本节介绍Excel VBA的另外两种循环结构,即For Each…Next结构和Do循环结构。
For Each…Next结构
利用For Each…Next结构可以对集合中的所有对象或数组中的所有元素重复进行同一操作。其语法格式为:
code.vba
For Each var In items
执行语句
Next [var]
它为items中的每个选项运行循环体中的语句。其中,var为迭代变量;items为将要完成的选项的集合。
下面的例子中,在立即窗口中逐个输出App.Documents对象中每个文本的标题。
code.vba
Sub Test()
Dim Document As Object
For Each Document In App.Documents
Debug.Print Document.Title
Next Document
End Sub
运行过程,在立即窗口中输出所有工作簿的标题。
Python中万物皆对象,所以对于类对象也可以直接使用普通的for循环进行处理。
Do循环
5.3.1小节介绍while循环的时候已经用到了Do循环,实际上,Do循环有多种语法格式,有不同的用法。总的来说,Do循环的语法格式有下面3种:
code.vba
Do
执行语句
Loop
或
code.vba
Do {Until|While} 条件表达式
执行语句
Loop
或
code.vba
Do
执行语句
Loop {Until|While} 条件表达式
其中,第1种格式在循环起始行和终止行都没有条件表达式,它的条件表达式在循环体内部,当满足某个条件时用Exit或Goto语句退出循环;第2种格式在循环起始行计算条件表达式,满足条件时执行循环体中的语句;第3种格式在循环终止行计算条件表达式,此时是先至少执行一次循环体内的语句再做判断。
注意后面两种格式中Until语句和While语句用法上的区别。Until是执行语句直到满足条件时终止,While则是当满足条件时执行语句。所以当表达相同的意思时它们使用的条件表达式中的比较运算关系是相反的。例如,当intA>0时循环执行语句,可以表示为:
code.vba
Do While intA>0
执行语句
Loop
或
code.vba
Do Until intA<=0
执行语句
Loop