Do...Loop
当条件为True时重复语句块,或直到条件变为True。
语法:
Do [{ While | Until } 条件 ] [ 语句 ] [ Exit Do | Continue Do ] [ 语句 ] ... Loop
Do [ 语句 ] [ Exit Do | Continue Do ] [ 语句 ] ... Loop [{ While | Until } 条件 ]
条件 : 可选 为True或False的数值表达式或字符串表达式。如果条件为Null,则将条件视为False。
语句 : 当或直到条件为True时重复的一个或多个语句。
Exit Do语句可以放置在Do…Loop中的任何位置,作为退出Do…Loop的替代方法。Exit Do通常在评估某些条件(例如If…Then)后使用,在这种情况下,Exit Do语句将控制权转移到紧跟在Loop后面的语句。
当在嵌套的Do…Loop语句中使用时,Exit Do将控制权转移到比Exit Do出现的循环高一级的循环。
Continue Do语句可以放置在Do…Loop中的任何位置,以跳过其余语句并继续新的迭代。
示例
此示例显示如何使用Do...Loop语句。内部Do...Loop语句循环10次,询问用户是否应该继续,当用户选择否时将标志的值设置为False,并使用Exit Do语句提前退出。外部循环在检查标志的值后立即退出。
Public Sub LoopExample()
Dim Check As Boolean, Counter As Long, Total As Long
Check = True: Counter = 0: Total = 0 ' 初始化变量。
Do ' 外部循环。
Do While Counter < 20 ' 内部循环
Counter = Counter + 1 ' 增加计数器。
If Counter Mod 10 = 0 Then ' 在每个10的倍数时检查用户。
Check = (MsgBox("继续吗?", vbYesNo) = vbYes) ' 当用户点击否时停止
If Not Check Then Exit Do ' 退出内部循环。
End If
Loop
Total = Total + Counter ' Exit Do 到达这里。
Counter = 0
Loop Until Check = False ' 立即退出外部循环。
MsgBox "计数到:" & Total
End Sub使用Do...Loop语句
使用Do...Loop语句运行语句块不确定的次数。语句要么在条件为True时重复,要么直到条件变为True。
当条件为True时重复语句
有两种方法可以在Do...Loop语句中使用While关键字检查条件。您可以在进入循环之前检查条件,或者在循环至少运行一次后检查条件。
在以下ChkFirstWhile过程中,您在进入循环之前检查条件。如果myNum设置为9而不是20,循环内的语句将永远不会运行。在ChkLastWhile过程中,循环内的语句仅在条件变为False之前运行一次。
Sub ChkFirstWhile()
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
MsgBox "循环重复了" & counter & "次。"
End Sub
Sub ChkLastWhile()
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
MsgBox "循环重复了" & counter & "次。"
End Sub重复语句直到条件变为True
有两种方法可以在Do...Loop语句中使用Until关键字检查条件。您可以在进入循环之前检查条件(如ChkFirstUntil过程中所示),或者在循环至少运行一次后检查条件(如ChkLastUntil过程中所示)。当条件保持False时继续循环。
Sub ChkFirstUntil()
counter = 0
myNum = 20
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
Loop
MsgBox "循环重复了" & counter & "次。"
End Sub
Sub ChkLastUntil()
counter = 0
myNum = 1
Do
myNum = myNum + 1
counter = counter + 1
Loop Until myNum = 10
MsgBox "循环重复了" & counter & "次。"
End Sub从循环内部退出Do...Loop语句
您可以使用Exit Do语句退出Do...Loop。例如,要退出无限循环,请在If...Then...Else语句或Select Case语句的True语句块中使用Exit Do语句。如果条件为False,循环将正常运行。
在以下示例中,myNum被分配创建无限循环的值。If...Then...Else语句检查此条件,然后退出,防止无限循环。
Sub ExitExample()
counter = 0
myNum = 9
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
If myNum < 10 Then Exit Do
Loop
MsgBox "循环重复了" & counter & "次。"
End SubNOTE
要停止无限循环,请按ESC或CTRL+BREAK。