Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2575|回复: 4

跟着校长学VBA之第4集:循环语句

[复制链接]
发表于 2013-1-2 22:54 | 显示全部楼层 |阅读模式
本帖最后由 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 的十个数字所组成的字符串,每个字符串之间用空格隔开。外层循环使用一个变量当作循环计数器,每循环一次,变量值减一。
  1. Dim Words, Chars, MyString
  2. For Words = 10 To 1 Step -1     ' 建立 10 次循环。
  3.     For Chars = 0 To 9    ' 建立 10 次循环。
  4.         MyString = MyString & Chars    ' 将数字添加到字符串中。
  5.     Next Chars    ' Increment counter
  6.     MyString = MyString & " "    ' 添加一个空格。
  7. Next Words
复制代码
如何使循环提速?
可根据循环次数的大小决定Counter的数据类型。
一般来说,较小的数据类型,在更新时所用的时间少。Variants 则会稍慢于它对等的各种数据类型。然而,此不同处只有在执行数千个操作时才会引人注目。

二、For Each...Next 语句
针对一个数组或集合中的每个元素,重复执行一组语句。
For Each element In group
[statements]
[Exit For]
[statements]
Next [element]
不能在 For...Each...Next 语句中使用用户自定义类型数组,因为 Variant 不能包含用户自定义类型。
  1. ‘本示例使用 For Each...Next 语句搜寻集合中的所有成员的 Text 属性,查找“Hello”字符串。示例中,MyObject 是面向文本的对象,并且是 MyCollection 集合的成员,这两个名字只是为示范目的而使用的通用名称而已。

  2. Dim Found, MyObject, MyCollection
  3. Found = False    ' 设置变量初始值。
  4. For Each MyObject In MyCollection    ' 对每个成员作一次迭代。
  5.     If MyObject.Text = "Hello" Then    ' 如果 Text 属性值等于“Hello”。
  6.         Found = True    ' 将变量 Found 的值设成 True。
  7.         Exit For    ' 退出循环。
  8.     End If
  9. Next
复制代码
  1. '例如,下面的过程会关闭所有的窗体,除了窗体包含的过程正在运行以外。

  2. Sub CloseForms()
  3.     For Each frm In Application.Forms
  4.         If frm.Caption <> Screen. ActiveForm.Caption Then frm.Close
  5.     Next
  6. End Sub

  7. 下面的代码会在数组的每个元素中循环,并且将每个值设置成它的索引变量 I 的值。

  8. Dim TestArray(10) As Integer, I As Variant
  9. For Each I In TestArray
  10.     TestArray(I) = I
  11. Next I
复制代码
  1. ’可以使用 For Each...Next 循环对某范围的单元格做循环。下面的过程会对于 Sheet1 中的 A1:D10 范围做循环,并将任何绝对值小于 0.01 的号码设为 0。

  2. Sub RoundToZero()
  3.     For Each myObject in myCollection
  4.         If Abs(myObject.Value) < 0.01 Then myObject.Value = 0
  5.     Next
  6. End Sub
复制代码
  1. '在完成前退出 For Each...Next 循环
  2. '可以使用 Exit For 语句来退出 For Each...Next 循环。例如,当错误发生时可以在 If...Then...Else 语句或是 Select Case 语句的 True 语句块中使用 Exit For 语句,它是专门用来检查此错误的。如果没有错误发生,If...Then...Else 语句的值为 False,则循环会象预期那样运行。

  3. '下面的示例,测试在 A1:B5 范围内找出第一个不含数值的单元。如果有找到此类单元,则会有信息显示并用 Exit For 语句退出循环。

  4. Sub TestForNumbers()
  5.     For Each myObject In MyCollection
  6.         If IsNumeric(myObject.Value) = False Then
  7.             MsgBox "Object contains a non-numeric value."
  8.             Exit For
  9.         End If
  10.     Next c
  11. End Sub
复制代码
三、DO...LOOP循环
当条件为 True 时,或直到条件变为 True 时,重复执行一个语句块中的命令。
语法
Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop
或者可以使用下面这种语法:
Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]
  1. 'Do...Loop 语句示例
  2. '本示例示范如何使用 Do...Loop 语句。内层的 Do...Loop 语句循环到第 10 次时将标志值设置为 False,并用 Exit Do 语句强制退出内层循环。外层循环则在检查到标志值为 False 时,马上退出。

  3. Dim Check, Counter
  4. Check = True: Counter = 0    ' 设置变量初始值。
  5. Do    ' 外层循环。
  6.     Do While Counter < 20    ' 内层循环。
  7.         Counter = Counter + 1    ' 计数器加一。
  8.         If Counter = 10 Then    ' 如果条件成立。
  9.             Check = False    ' 将标志值设成 False。
  10.             Exit Do    ' 退出内层循环。
  11.         End If
  12.     Loop
  13. Loop Until Check = False    ' 退出外层循环。

复制代码
四、WHILE...WEND循环
只要指定的条件为 True,则会重复执行一系列的语句
请注意,与DO LOOP的不同。前者是先循环后判断,后者是先判断再循环。
While condition
[statements]Wend
  1. 'While...Wend 语句示例
  2. '本示例使用 While...Wend 语句来增加计数变量的值。如果条件判断值为 True,则循环内的语句将一直执行下去。

  3. Dim Counter
  4. Counter = 0    ' 设置变量初值。
  5. While Counter < 20    ' 测试计数器的值。
  6.     Counter = Counter + 1    ' 将计数器的值加一。
  7. Wend    ' 当 Counter > 19 时则循环终止。
  8. Debug.Print Counter    ' 在“立即”窗口中显示数字 20。
复制代码
发表于 2013-1-2 23:11 | 显示全部楼层
烟花,请你放慢脚步,让子弹飞一会吧。

评分

参与人数 1 +3 收起 理由
梅一枝 + 3 同意观点

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-1-2 23:42 | 显示全部楼层
cbg2008 发表于 2013-1-2 23:11
烟花,请你放慢脚步,让子弹飞一会吧。


回复

使用道具 举报

发表于 2013-1-3 07:03 | 显示全部楼层
本帖最后由 qhllqhll 于 2013-1-3 07:06 编辑

跟着“烟花”大师学vba
希望大师不停地传教

无私的奉献
非常感谢
回复

使用道具 举报

发表于 2013-1-12 21:30 | 显示全部楼层
这些代码看着眼熟,呵呵,仔细找了一下,发现就是帮助文件里的.
谢谢了,整理出来,可以比较一下.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-16 02:52 , Processed in 0.251240 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表