Microsoft® Visual Basic® Scripting Edition
迴圈陳述式
 VBScript 教學 
 上一頁 | 下一頁 


使用迴圈重複執行程式碼
迴圈可以讓您重複的執行一群陳述式。有一些迴圈是在條件變成 False 之前,會一直重複執行陳述式;另一些則可能是在條件變成 True 時才停止迴圈。此外,還有一些迴圈是重複了某個固定次數之後就會停止。

VBScript 中可以使用下列的迴圈陳述式:

使用 Do 迴圈
您可以使用 Do...Loop 陳述式來重複執行一群陳述式數次。直到條件是 True 時,或條件變成 True 為止,迴圈會不斷的重複。
當條件是 True 時重複陳述式
Do...Loop 陳述式中,需用 While 關鍵字來檢查條件。您可以在進入迴圈之前就先檢查(就像以下的 ChkFirstWhile 例子),或在迴圈至少執行過一次之後再檢查(像是 ChkLastWhile 的例子)。在 ChkFirstWhile 程序中,如果 myNum 不是設成 20,而是設成 9,那麼在迴圈中的陳述式就永遠不會被執行。在 ChkLastWhile 程序中,迴圈裡的陳述式只會被執行一次。因為它的條件已經是 False 了。
 Sub ChkFirstWhile()
     Dim counter, myNum
     counter = 0
     myNum = 20
     Do While myNum > 10
         myNum = myNum - 1
         counter = counter + 1
     Loop
     MsgBox "The loop made " & counter & " repetitions."
 End Sub

 Sub ChkLastWhile()
     Dim counter, myNum
     counter = 0
     myNum = 9
     Do
         myNum = myNum - 1
         counter = counter + 1
     Loop While myNum > 10
     MsgBox "The loop made " & counter & " repetitions."
 End Sub
重複執行陳述式,直到條件變成 True 為止
Do...Loop 陳述式中,您有兩種方法來使用 Until 關鍵字檢查條件。您可以在進入迴圈前先檢查條件(像是以下的 ChkFirstUntil 例子),或在迴圈至少執行過一次後再檢查(像是 ChkLastUntil 的例子)。只要在條件是 False 時,迴圈就會執行。
 Sub ChkFirstUntil()
     Dim counter, myNum
     counter = 0
     myNum = 20
     Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
     Loop
     MsgBox "The loop made " & counter & " repetitons."
 End Sub

 Sub ChkLastUntil()
     Dim counter, myNum
     counter = 0
     myNum = 1
     Do
         myNum = myNum + 1
         counter = counter + 1
     Loop Until myNum = 10
     MsgBox "The loop made " & counter & " repetitions."
 End Sub
在迴圈中跳離 Do...Loop 陳述式
您可以在 Do...Loop 中使用 Exit Do 陳述式來跳離迴圈。因為通常您只會希望在某些特定的情形發生時,才要跳離迴圈,比如像要避免無窮迴圈時,您應該把 Exit Do 陳述式放在 If...Then...Else 陳述式的 True 區塊中。當條件是 False 時,迴圈就會照常執行。

在下面的例子中,myNum 將會被指定成一個會造成無窮迴圈的值。其中的 If...Then...Else 陳述式將會檢查這個條件,以避免無窮迴圈的發生。

 Sub ExitExample()
     Dim counter, myNum
     counter = 0
     myNum = 9
     Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
         If myNum < 10 Then Exit Do
     Loop
     MsgBox "The loop made " & counter & " repetitions."
 End Sub
使用 While...Wend
在 VBScript 中有提供 While...Wend 陳述式,這是為了用慣了 While...Wend 陳述式的使用者所提供的。不過,因為使用 While...Wend 較缺乏彈性,所以我們還是建議您使用 Do...Loop 來取代。
使用 For...Next
您可以使用 For...Next 陳述式使一整區塊的陳述式重複執行某個固定的次數。在 For 迴圈中,有一個用來當作計數器的變數。每執行一次迴圈時,這個變數的值就會遞增或是遞減。

舉例來說,下面的程序將會呼叫 MyProc 程序 50 次。這個 For 陳述式指定了一個計數器變數 x,還有其起始值和結束值。Next 陳述式會使計數器的值遞增 1。

 Sub DoMyProc50Times()
     Dim x
     For x = 1 To 50
         MyProc
     Next
 End Sub
使用 Step 關鍵字,您就可以隨您的需要來遞增或遞減計數器變數。在下面的例子中,計數器變數 j 會在每次迴圈執行後遞增 2。當迴圈執行完時,變數 total 將是 2、4、6、8 和 10 的總合。
 Sub TwosTotal()
     Dim j, total
     For j = 2 To 10 Step 2
         total = total + j
     Next
     MsgBox "The total is " & total
 End Sub
如果您要使計數器變數遞減,您可以使用負的 Step 值。此時,結束值必須小於起始值。在下面例子中,計數器變數 myNum 會在每次迴圈執行過後遞減 2。當這個迴圈結束時,變數 total 的值將會是 16、14、12、10、8、6、4 和 2 的總合。

 Sub NewTotal()
     Dim myNum, total
     For myNum = 16 To 2 Step -2
         total = total + myNum
     Next
     MsgBox "The total is " & total
 End Sub
您可以使用 Exit For 陳述式在計數器到達其結束值之前跳離 For...Next 陳述式。因為通常您只會希望在某些特定的情形發生時,才要跳離迴圈,比如像發生錯誤時。所以您應該把 Exit Do 陳述式放在 If...Then...Else 陳述式的 True 區塊中。當條件是 False 時,迴圈就會照常執行。

使用 For Each...Next
For Each...NextFor...Next 迴圈非常相似。它們的不同之處在於,For Each...Next 迴圈是針對集合物件中的每一個物件或陣列中的每一個元素重複執行一次迴圈,而後者是依指定的數字重複執行迴圈的次數。當您不知道集合物件中有幾個元素時,For Each...Next 迴圈會特別的有用。

在下面的 HTML 程式碼範例中,Dictionary 物件的功用是要將文字放到數個文字方塊中:

 <HTML>
 <HEAD><TITLE>Forms and Elements</TITLE></HEAD>
 <SCRIPT LANGUAGE="VBScript">
 <!--
 Sub cmdChange_OnClick
    Dim d                   'Create a variable 
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "0", "Athens"     'Add some keys and items
    d.Add "1", "Belgrade"
    d.Add "2", "Cairo"

    For Each I in d
        Document.frmForm.Elements(I).Value = D.Item(I)
    Next
 End Sub
 -->
 </SCRIPT>
 <BODY>
 <CENTER>
 <FORM NAME="frmForm"

 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Button" NAME="cmdChange" VALUE="Click Here"><p>
 </FORM>
 </CENTER>
 </BODY>
 </HTML>