大家好,前面已经介绍过循环结构的for..next和do...loop系列语句。还有一种用于处理对象集合的循环语句,即for each...next语句,在本节介绍。(下面程序控制结构图帮助回顾)
For each...next语句是在集合的对象中循环,对集合中满足某种条件的对象或所有对象执行操作。
For each...next语句的优点在于,不需要集合中对象的数量。只需要声明相应的对象变量,再编写相应的执行代码即可。(而for..next循环需要有循环范围,通常需用通过集合count属性获得集合中对象的数量。)
基 础 知 识
首先看下for each...next语句的具体语法结构:
声明对象变量
For Each 对象变量 In 对象集合
[语句块]
[Exit For]
[语句块]
Next [对象变量]
语句中[ ]中的部分可以选择性省略,对象变量需要在循环之前先声明,语句中如果有exit for 表示退出循环,可以与判断语句嵌套使用。
示 例
下面通过几个示例来演示如何使用For each...next语句的使用。
示例一
在模板表中显示所有工作表的名字。
Sub test()
Dim sht As Worksheet, i As Integer
i = 0
For Each sht In Worksheets
i = i + 1
Sheets(1).cells(i, 1) = sht.Name
Next
End Sub
首先声明对象变量sht为普通工作表对象,Dim sht As Worksheet,变量 i 为整型变量,变量i初始值设为0。
套用格式 For Each sht In Worksheets,通过循环语句遍历worksheets集合中所有工作表对象。(注意 in 后面是worksheets集合),每循环一次 变量i 累加1。
循环中Sheets(1).cells(i, 1)的值等于 sht.Name 。
示例二
将模板表中的模板单元格“a1:b4"单元格复制到其他所有表格中。
Sub test()
Dim sht As Worksheet
For Each sht In Worksheets
If sht.Name <> "模板" Then
Worksheets("模板").Range("a1:b4").Copy sht.Range("a1")
End If
Next
End Sub
代码在循环结构中嵌套了判断语句,通过if..then判断工作表是否名为“模板”。如果不是“模板“工作表”,就将“模板”表的模板单元格通过copy方法复制到其他表格中。
示例三
判断指定的工作表是否存在(示例中添加了表单控件)
Sub test()
Dim sht As Worksheet, i As Integer, j As String
i = 0
j = InputBox("请输入工作表名称")
For Each sht In Worksheets
If sht.Name = j Then
i = i + 1
End If
Next
If i > 0 Then
MsgBox j & "存在"
Else
MsgBox j & "不存在"
End If
End Sub
代码解析:首先声明变量,sht为工作表变量,i为整型变量,j为字符串变量。
变量i的初始值为0。变量j通过inputbox函数获得需要判断的表名称。
通过for each...next循环判断工作表中是否指定名字的工作表,如果有则i变量累加1。
最后循环结束后,判断i变量的值是否为0,来判断工作表是否存在。如果i>0,则所查工作表存在。
(注意判断i>0的语句,需要在循环结束之后再判断,这种累加的用法在VBA代码中也经常用到。)
示例四
Sub test()
Dim rng As Range
For Each rng In Worksheets(1).Range("a1:b4")
rng.Value = "数值"
rng.Interior.ColorIndex = 5
Next
End Sub
代码中先声明单元格变量rng,通过for each...next语句在Range("a1:b4")单元格区域中循环,设置它们的值和背景色。
此处Worksheets(1).Range("a1:b4")也可以再赋值给一个对象变量,比如rng2。然后用rng2来代替即可。这样方便修改。
小贴士
循环结构语句,For..next语句为计数循环,Do...while和Do...until语句为有条件的循环,For each...next语句用于处理集合中的对象。(可以通过链接复习相关内容。)
其中For each...next循环部分情景可以使用For...next语句代替,(For...next语句循环需要的数值范围,可以通过集合的count属性获得。)
今天下雨
For each...next循环语句除了用于处理集合中的对象外,还可以结合数组使用,后期介绍数组时会再作介绍,祝大家学习快乐。
本文分享自 Excel和Access学习笔记 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!