Hi,大家好,本专栏将会从零开始和大家用图文的方式,让你从零基础学会VBA!有兴趣的小伙伴可以持续关注我,或者在专栏进行查看学习,愿与君携手共进!

在上一个章节中我们说到For…Next的循环使用方法,相信大家都可以熟练使用这个。今天我们现在说说他的同胞兄弟For Each...Next,这个循环是VBA的一个特色,这个循环遍历集合中的所有元素非常方便。需要注意的是For Each...Next 不是将语句运行指定的次数,而是对于集合中的每个元素或对象集合中的每一项重复一组语句。这个特点是在历遍集合中所有元素的数目时非常有用。

For Each...Next 的语法使用结构如下所示:

语法结构如下:

主要参数:

element:用来枚举集合或数组中所有元素的变量。对于集合,element可能是Variant变量、通用Object变量或任意指定的Automation对象变量。对于数组,element只能是Variant变量。

group:对象集合或数组的名称。

如果集合中至少有一个元素,就会进入 For...Each 执行。一旦进入循环,便先针对 group 中第一个元素执行循环中的所有语句。如果 group 中还有其它的元素,则会针对它们执行循环中的语句,当 group 中的所有元素都执行完了,便会退出循环,然后从 Next 语句之后的语句继续执行。 在循环中可以在任何位置放置任意个 Exit For 语句,随时退出循环。Exit For经常在条件判断之后使用,例如If匮hen,并将控制权转移到紧接在 Next 之后的语句。 可以将一个 For...Each...Next 循环放在另一个之中来组成嵌套For...Each...Next 循环。但是每个循环的 element 必须是唯一的。 PS:如果省略 Next 语句中的 element,就像 element 存在时一样执行。如果 Next 语句在它相对应的 For 语句之前出现,则会产生错误。

说了这么多理论概念,也许有很多的小伙伴们还不知道什么是集合?举个最简单的例子,所有的工作表是一个集合,所有的工作薄是一个集合,人类是一个通俗意义上的集合。

我们举2个实际简单的例子来说明这个的使用方法吧!

Step-01 在我们当前激活的所有工作表之间进行循环,然后使用Msgbox函数显示工作的名字,当然你可以使用其他功能性代码来完成这个操作。

以上带代码的意思是,在我们所有的工作表之间进行循环操作。这个和我们的For…Next的循环类似。

Step-02 可以把工作表的一个单元格区域看做是一个集合对象区域,如下所示:

这个的使用方法我们在后期数据处理的时候,是经常会用到的。

当你的过程需要在一个集合的所有对象或者一个数组的所有元素之间循环时,应该使用For Each…Next循环。该循环不需要计数器变量,VBA自己知道应该执行几次循环。我们拿工作表集合作个例子,要删除工作簿里面的工作表,你首先不得不要选择它,再选择“编辑”-“删除工作表”。如果要只留一个工作表在工作簿里面的话,你就不得不使用同样的命令,次数取决于工作表的总数。因为每个工作表都是工作表集合里的一个对象,所以使用ForEach…Next循环来加速删除工作表。

提前跳出循环

有时候,你并不想等到循环自己结束,可能是用户输入了错误的数据,过程遇到了错误或者可能是任务已经完成并且没有必要作更多的循环。你可以提前跳出循环,而不必等到条件正常结束。VB有两种Exit语句:

2 Exit For语句用来提前退出For…Next或者For Each…Next循环

②Exit Do语句立即退出任何VBA Do 循环

下面的过程示范如何使用Exit For语句提前跳出For Each…Next循环:

退出过程:如果你想提前退出子过程,那么可以使用ExitSub语句。如果该过程是一个函数的话,就使用Exit Function语句代替就行。

好啦!快乐的时间总是非常短暂的,又到了和大家说再见的时候,如果大家感觉本文如果对你有所帮助的话,请帮忙转发点赞,谢谢您能观看到现在,我们下期再见!

我是Excel教案,关注我持续分享更多的Excel技巧!

如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。