使用迴圈重複執行程式碼
迴圈可以讓您重複的執行一群陳述式。有一些迴圈是在條件變成 False 之前,會一直重複執行陳述式;另一些則可能是在條件變成 True 時才停止迴圈。此外,還有一些迴圈是重複了某個固定次數之後就會停止。VBScript 中可以使用下列的迴圈陳述式:
- Do...Loop:當條件是 True 時執行迴圈,也可以是執行到條件為 True 時,停止迴圈。
- While...Wend:當條件是 True 就執行迴圈。
- For...Next:使用一個計數器,讓陳述式重複執行某個固定的次數。
- For Each...Next:對每個集合物件中的項目或陣列中的元素重複執行一次迴圈。
使用 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。
使用 Step 關鍵字,您就可以隨您的需要來遞增或遞減計數器變數。在下面的例子中,計數器變數 j 會在每次迴圈執行後遞增 2。當迴圈執行完時,變數 total 將是 2、4、6、8 和 10 的總合。Sub DoMyProc50Times() Dim x For x = 1 To 50 MyProc Next End Sub
如果您要使計數器變數遞減,您可以使用負的 Step 值。此時,結束值必須小於起始值。在下面例子中,計數器變數 myNum 會在每次迴圈執行過後遞減 2。當這個迴圈結束時,變數 total 的值將會是 16、14、12、10、8、6、4 和 2 的總合。Sub TwosTotal() Dim j, total For j = 2 To 10 Step 2 total = total + j Next MsgBox "The total is " & total End Sub
您可以使用 Exit For 陳述式在計數器到達其結束值之前跳離 For...Next 陳述式。因為通常您只會希望在某些特定的情形發生時,才要跳離迴圈,比如像發生錯誤時。所以您應該把 Exit Do 陳述式放在 If...Then...Else 陳述式的 True 區塊中。當條件是 False 時,迴圈就會照常執行。Sub NewTotal() Dim myNum, total For myNum = 16 To 2 Step -2 total = total + myNum Next MsgBox "The total is " & total End Sub
使用 For Each...Next
For Each...Next 和 For...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>
沒有留言:
張貼留言