VBA 循环
循环结构:根据循环条件判断,循环条件成立,则执行循环体中的内容,循环条件不成立,则结束循环的执行。
VBA循环结构包括四类结构:For To、For Each、While、Do While。
1 For To
For To通过循环变量指定循环次数,执行循环体。
基本用法
语法
For 循环变量 = 起始值 to 结束值
循环体
Next
循环变量为整数,从起始值开始,每循环1次,循环变量自动加1。
循环变量的值依次变化为:起始值、起始值+1、起始值+2……结束值。
执行次数: 结束值 – 起始值 + 1 。
循环体可以包含多条语句。
示例
通过循环输出1到10。
Sub for1()
'声明循环变量
Dim i As Integer
'循环变量从1到10
For i = 1 To 10
Debug.Print i
Next
End Sub
输出结果:输出1到10。
调试查看循环执行流程
通过调试,查看代码的执行流程与执行过程中循环变量的变化情况。
第1步:显示本地窗口
显示[本地窗口]的方法:[视图]菜单选中[本地窗口]。
第2步:打断点
单击Debug.Pring i 这1行代码的左侧
第3步:运行
点击按钮运行
第4步:单点[逐语句]按钮
观察[立即窗口]与本地窗口中循环变量的变化。
不断重复第4步,理解代码的执行流程与执行过程中循环变量的变化情况。
指定步长
通过Step指定步长,没有指定时默认为1。每循环1次,循环变量自动加step。
示例。输出1、4、7…步长为3,一直到15。
Sub for2()
'声明循环变量
Dim i As Integer
'循环变量从1到15
For i = 1 To 15 Step 3
Debug.Print i
Next
End Sub
输出结果: 1、4、7、10、13
退出当前循环
VBA中没有Continue来退出当前循环,可以通过If结构实现即可。
示例。循环1到10,当3时退出当前循环。
Sub for3()
Dim i As Integer
For i = 1 To 10
'当i=3时退出当前循环,模拟其它语言中的continue
If i <> 3 Then
Debug.Print i
End If
Next
End Sub
输出结果:1、2、4到10。
Exit For退出整个循环
语法
Exit For
示例。循环1到10,当为3时退出整个循环。
Sub for4()
Dim i As Integer
For i = 1 To 10
If i = 3 Then
'For语句中,Exit For退出整个循环。
Exit For
End If
Debug.Print i
Next
End Sub
输出结果:1、2。
2 For Each
For Each用于遍历集合中的所有元素。
语法
For Each 循环变量 In 集合变量
循环体
Next
循环变量与集合中的元素类型相同,例如:集合为字符串集合,则循环变量是字符串类型,从第1个元素开始,每循环1次,循环变量代表下一个元素。
循环变量的值依次变化为:集合中的第1个元素、集合中的第2个元素、集合中的第3个元素……集合中的最后1个元素。
执行次数: 集合变量中有N个元素,则执行N次。
循环体可以包含多条语句。
示例代码
Sub for5()
'声明数组变量
Dim techs As Variant
'数组初始化
techs = Array("windows", "dos", "注册表", "vba", "html")
'遍历集合
For Each Item In techs
Debug.Print Item
Next
End Sub
输出结果为:
windows
dos
注册表
vba
html
调试查看循环执行过程
3 While
for循环中的循环变量是自动变化,开发人员不需要修改,更加简单。
通常,while循环需要修改循环变量,更加灵活。
语法
Do while 循环条件
循环体
Loop
首先判断循环条件是否成立,如果成立,则执行循环体中的内容;如果不成立,则结束while循环。
示例。通过while循环输出1到10。
Sub while1()
Dim i As Integer
i = 1
Do While i < 11
Debug.Print i
i = i + 1
Loop
Debug.Print "最后i的值为:" & i
End Sub
调试执行过程
打断点运行
第2次运行到断点处,立即窗口与本地窗口数据如下。
运行到结束时,立即窗口与本地窗口的数据如下:
Exit Do退出整个While循环
Exit Do
示例代码。
Sub while2()
Dim i As Integer
i = 1
Do While i < 11
'当i为3时,退出整个循环
If i = 3 Then Exit Do
Debug.Print i
i = i + 1
Loop
End Sub
输出结果:1、2。
4 Do While
上面的while结构与do while结构虽然都有do while,但我们还是沿用习惯说法。
while结构:首先判断循环条件,如果首次断不成立,则循环体一次也不执行。
do while结构:根据下面的语法结构,首先执行循环体,再判断循环条件,所以至少执行一次。
语法
Do
循环体
Loop while 循环条件
首先执行一次循环体,然后判断循环条件是否成立,如果成立,则执行循环体中的内容;如果不成立,则结束while循环。
示例代码如下:
Sub doWhile1()
Dim i As Integer
i = 1
Do
Debug.Print i
i = i + 1
Loop While i < 11
Debug.Print "最后i的值为:" & i
End Sub
调试代码执行流程
通过调试更加准确的理解do while的执行流程。