【烟花原创】VBA零基础之第17篇 Do…Loop循环 (一)
上一篇聊过了以指定次数执行语句的For Next循环,但是当我们不知道循环具体会运行多少次,但能通过某种条件的变化来实现控制循环的开始和结束,这便是今天咱们要聊聊的的Do…Loop循环。
一、当条件为 True 时重复语句
语法:
1.条件前置
Do While 条件表达式
执行语句
Exit Do
执行语句
条件控制语句
Loop
2.条件后置
Do
执行语句
Exit Do
执行语句
条件控制语句
Loop While 条件表达式
条件表达式:可选参数,其值为True或False,当省略条件表达式时,While关键字也不需要写。
示例省略了While和条件表达式,但这样循环如果不用上Exit Do则永远无法结束。
Dim i As Long
Do
i = 1
Loop
Exit Do:通常用于条件判断之后,例如 If...Then。
在这种情况下,Exit Do 语句将控制权转移到紧接在 Loop 命令之后的语句(提早退出所在的Do…Loop循环)。
Dim i As Long, j As Long
i = 1: j = 1
Do While i < 100
j = j + i
If j > 100 Then Exit Do
i = i + 1
Loop
MsgBox "i=" & i
上述1,2两种形式的区别在于,形式1是先判断条件,为Ture则执行语句,否则执行Loop之后的语句;
形式2是先执行一次,执行完后再进行判断,条件为True的情况下再继续执行循环。
简单的说,就是形式1(条件前置)有可能循环语句一次也不会执行,形式2(条件后置)最少执行一次。
例如
Dim counter As Integer
Dim myNum As Integer
counter = 0
myNum = 9
Do While myNum > 10
counter = counter + 1
myNum = myNum - 1
Loop
‘myNum的初始值是9,测试条件是myNum>10。
’由于是条件前置,所以先检测条件,结果为False,循环执行0次
Dim counter As Integer
Dim myNum As Integer
counter = 0
myNum = 9
Do
counter = counter + 1
myNum = myNum - 1
Loop While myNum > 10
'myNum的初始值是9,测试条件是myNum>10。
'由于是条件后置,先执行一次循环然后再判断,结果为False,循环结束,循环执行1次。
条件控制语句: 可选语句
在For…Next循环中,计数器变量在执行完语句后会自动累加步长值。
在Do…Loop循环中,有时条件是需要自己写语句进行控制的。
如果不写,在没有Exit Do的情况下,循环会永远无法结束,这样就陷入死循环中了。
例如下面的代码:myNum的初始值是20,循环的条件是mynum>10,
条件控件语句是mynum=mynum-1,如果缺少条件控制语句,循环无法停止。
Dim counter As Integer
Dim myNum As Integer
counter = 0
myNum = 20
Do While myNum > 10
counter = counter + 1
myNum = myNum - 1
Loop
循环体内执行的可执行语句也是可选的,通常情况下都会写。
示例,用循环的方法求大于0的整数的2进制数值(10进制转2进制)
Sub Dec2Bin()
'大于0的整数转换成2进制
Dim i As Long, j As Long
Dim str As String, strMsg As String
i = 1000: j = i
Do While i <> 0
str = i Mod 2 & str
'i mod 2 取得 i 除以2的余数
i = i \ 2
'\,用来对两个数作除法并返回一个整数
Loop
strMsg = j & " 的2进制数为:" & vbCrLf
strMsg = strMsg & str & vbCrLf
MsgBox strMsg
End Sub