您可以使用 Do...Loop 陳述式,以無限次數執行陳述式區塊。迴圈會重複執行陳述式,直到條件為 True 或條件變成 True。
條件為 True 時重複執行陳述式
使用 While 關鍵字來檢查 Do...Loop 陳述式中的條件。您可以在進入迴圈之前檢查條件 (如下列 ChkFirstWhile 範例所示),或者在迴圈至少執行一次之後再檢查 (如 ChkLastWhile 範例所示)。在 ChkFirstWhile 程序中,如果 myNum 設為 9 而不是 20,則迴圈內的陳述式永遠不會執行。在 ChkLastWhile 程序中,迴圈內的陳述式只會執行一次,因為條件已是 False。
下列範例說明 while 的用法:
範例 1:
Sub ChkFirstWhile()
Dim counter, myNum
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
'This loop made 10 repetitions."
End Sub
範例 2:
Sub ChkFirstWhile()
Dim counter, myNum
counter = 0
myNum = 9
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
'This loop made 0 repetitions.
End Sub
範例 3:
Sub ChkLastWhile()
Dim counter, myNum
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
'This loop made 1 repetition.
End Sub
範例 4:
Sub ExampleWithDoWhile()
Dim counter, myNum
counter = 0
myNum = 15
Do While myNum > 10
myNum = myNum - 2
counter = counter + 1
Loop
' This loop reduced myNum to 9 and made 3 repetitions
End Sub
範例 5:
Sub ExampleWithDoLoopWhile()
Dim counter, myNum
counter = 0
myNum = 5
Do
myNum = myNum + 1
counter = counter + 1
Loop While myNum < 10
' This loop increased myNum to 10 and made 5 repetitions.
End Sub
範例 6:
Sub ChkLastWhile()
Dim counter, myNum
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
'This loop made 1 repetition.
End Sub
重複執行陳述式直到條件變成 True
有兩種方法可以使用 Until 關鍵字來檢查 Do...Loop 陳述式中的條件。您可以在進入迴圈之前檢查條件 (如下列 ChkFirstUntil 範例所示),或者在迴圈至少執行一次之後再檢查 (如 ChkLastUntil 範例所示)。只要條件為 False,迴圈就會持續執行。
下列範例說明 until 的用法:
範例 1:
Sub ChkFirstUntil()
Dim counter, myNum
counter = 0
myNum = 20
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
Loop
'This loop made 10 repetitions.
End Sub
範例 2:
Sub ChkLastUntil()
Dim counter, myNum
counter = 0
myNum = 1
Do
myNum = myNum + 1
counter = counter + 1
Loop Until myNum = 10
'This loop made 9 repetitions.
End Sub
範例 3:
Sub ExampleWithDoUntil()
Dim counter, myNum
counter = 0
myNum = 20
Do Until myNum < 15
myNum = myNum - 2
counter = counter + 1
Loop
'This loop reduced myNum to 14 and made 3 repetitions.
End Sub
範例 4:
Sub ExampleWithDoLoopUntil()
Dim counter, myNum
counter = 0
myNum = 5
Do
myNum = myNum + 2
counter = counter + 1
Loop Until myNum >= 15
'This loop increased myNum to 15 and made 5 repetitions.
End Sub
從迴圈內部結束 Do...Loop 陳述式
您可以使用 Exit Do 陳述式來結束 Do...Loop。因為通常只會在特定情況下 (例如避免無限迴圈) 需要結束,所以應在 If...Then...Else 陳述式的 True 陳述式區塊中使用 Exit Do 陳述式。如果條件為 False,則迴圈會照常執行。
在下列範例中,指派給 myNum 的值會建立無限迴圈。If...Then...Else 陳述式會檢查此情況,以防止無限重複。
下列範例說明 Do...Loop 陳述式的用法:
範例 1:
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
'This loop made 1 repetition.
End Sub
範例 2:
Sub PreventEndlessLoop()
Dim counter, myNum
counter = 1
myNum = 0
Do
myNum = myNum + 1
counter = counter + 1
If counter > 10 Then
Exit Do ' Avoids endless loop by exiting after 10 iterations.
End If
Loop
'This loop made 11 repetitions.
End Sub
範例 3:
Sub ExampleWithDoWhile()
Dim counter, myNum
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 2
counter = counter + 1
If myNum < 15 Then Exit Do ' Exit the loop early if myNum is less than 15.
Loop
'This loop reduced myNum to 14 and made 3 repetitions.
End Sub
範例 4:
Sub NestedLoopsExample()
Dim i, j
For i = 1 To 3
j = 0
Do
j = j + 1
If j > 2 Then Exit Do ' Exit inner loop after 2 iterations.
Loop
Next
End Sub