可以使用 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 循环语句的用法:
示例 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