前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >循环语句For each...next语句

循环语句For each...next语句

作者头像
无言之月
发布2019-10-13 15:41:20
1.9K0
发布2019-10-13 15:41:20
举报

大家好,前面已经介绍过循环结构的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...whileDo...until语句为有条件的循环,For each...next语句用于处理集合中的对象。(可以通过链接复习相关内容。)

其中For each...next循环部分情景可以使用For...next语句代替,(For...next语句循环需要的数值范围,可以通过集合的count属性获得。)


今天下雨

For each...next循环语句除了用于处理集合中的对象外,还可以结合数组使用,后期介绍数组时会再作介绍,祝大家学习快乐。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Excel和Access学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档