本帖最后由 hwc2ycy 于 2013-1-4 15:45 编辑
一、For...Next语句
以指定次数来重复执行一组语句。
For counter = start To end [Step step]
[statements]
[Exit For]
[statements] Next [ counter]
本示例使用 For...Next 语句创建一个字符串,其内容为由 0 到 9 的十个数字所组成的字符串,每个字符串之间用空格隔开。外层循环使用一个变量当作循环计数器,每循环一次,变量值减一。
- Dim Words, Chars, MyString
- For Words = 10 To 1 Step -1 ' 建立 10 次循环。
- For Chars = 0 To 9 ' 建立 10 次循环。
- MyString = MyString & Chars ' 将数字添加到字符串中。
- Next Chars ' Increment counter
- MyString = MyString & " " ' 添加一个空格。
- Next Words
复制代码如何使循环提速?
可根据循环次数的大小决定Counter的数据类型。
一般来说,较小的数据类型,在更新时所用的时间少。Variants 则会稍慢于它对等的各种数据类型。然而,此不同处只有在执行数千个操作时才会引人注目。
二、For Each...Next 语句
针对一个数组或集合中的每个元素,重复执行一组语句。
For Each element In group
[statements]
[Exit For]
[statements] Next [ element]
不能在 For...Each...Next 语句中使用用户自定义类型数组,因为 Variant 不能包含用户自定义类型。 - ‘本示例使用 For Each...Next 语句搜寻集合中的所有成员的 Text 属性,查找“Hello”字符串。示例中,MyObject 是面向文本的对象,并且是 MyCollection 集合的成员,这两个名字只是为示范目的而使用的通用名称而已。
- Dim Found, MyObject, MyCollection
- Found = False ' 设置变量初始值。
- For Each MyObject In MyCollection ' 对每个成员作一次迭代。
- If MyObject.Text = "Hello" Then ' 如果 Text 属性值等于“Hello”。
- Found = True ' 将变量 Found 的值设成 True。
- Exit For ' 退出循环。
- End If
- Next
复制代码 - '例如,下面的过程会关闭所有的窗体,除了窗体包含的过程正在运行以外。
- Sub CloseForms()
- For Each frm In Application.Forms
- If frm.Caption <> Screen. ActiveForm.Caption Then frm.Close
- Next
- End Sub
- 下面的代码会在数组的每个元素中循环,并且将每个值设置成它的索引变量 I 的值。
- Dim TestArray(10) As Integer, I As Variant
- For Each I In TestArray
- TestArray(I) = I
- Next I
复制代码- ’可以使用 For Each...Next 循环对某范围的单元格做循环。下面的过程会对于 Sheet1 中的 A1:D10 范围做循环,并将任何绝对值小于 0.01 的号码设为 0。
- Sub RoundToZero()
- For Each myObject in myCollection
- If Abs(myObject.Value) < 0.01 Then myObject.Value = 0
- Next
- End Sub
复制代码- '在完成前退出 For Each...Next 循环
- '可以使用 Exit For 语句来退出 For Each...Next 循环。例如,当错误发生时可以在 If...Then...Else 语句或是 Select Case 语句的 True 语句块中使用 Exit For 语句,它是专门用来检查此错误的。如果没有错误发生,If...Then...Else 语句的值为 False,则循环会象预期那样运行。
- '下面的示例,测试在 A1:B5 范围内找出第一个不含数值的单元。如果有找到此类单元,则会有信息显示并用 Exit For 语句退出循环。
- Sub TestForNumbers()
- For Each myObject In MyCollection
- If IsNumeric(myObject.Value) = False Then
- MsgBox "Object contains a non-numeric value."
- Exit For
- End If
- Next c
- End Sub
复制代码 三、DO...LOOP循环
当条件为 True 时,或直到条件变为 True 时,重复执行一个语句块中的命令。
语法
Do [{While | Until} condition]
[statements]
[Exit Do]
[statements] Loop 或者可以使用下面这种语法: Do
[statements]
[Exit Do]
[statements] Loop [{ While | Until} condition] - 'Do...Loop 语句示例
- '本示例示范如何使用 Do...Loop 语句。内层的 Do...Loop 语句循环到第 10 次时将标志值设置为 False,并用 Exit Do 语句强制退出内层循环。外层循环则在检查到标志值为 False 时,马上退出。
- Dim Check, Counter
- Check = True: Counter = 0 ' 设置变量初始值。
- Do ' 外层循环。
- Do While Counter < 20 ' 内层循环。
- Counter = Counter + 1 ' 计数器加一。
- If Counter = 10 Then ' 如果条件成立。
- Check = False ' 将标志值设成 False。
- Exit Do ' 退出内层循环。
- End If
- Loop
- Loop Until Check = False ' 退出外层循环。
复制代码 四、WHILE...WEND循环
只要指定的条件为 True,则会重复执行一系列的语句
请注意,与DO LOOP的不同。前者是先循环后判断,后者是先判断再循环。
While condition
[ statements] Wend- 'While...Wend 语句示例
- '本示例使用 While...Wend 语句来增加计数变量的值。如果条件判断值为 True,则循环内的语句将一直执行下去。
- Dim Counter
- Counter = 0 ' 设置变量初值。
- While Counter < 20 ' 测试计数器的值。
- Counter = Counter + 1 ' 将计数器的值加一。
- Wend ' 当 Counter > 19 时则循环终止。
- Debug.Print Counter ' 在“立即”窗口中显示数字 20。
复制代码 |