【发布时间】:2014-08-13 00:52:21
【问题描述】:
VB 最强大的功能之一是能够在不引用索引的情况下循环遍历集合中的对象 - for each 循环。
我发现只想从集合中删除对象非常有用。
从预定义的对象(例如电子表格上的行)中删除对象时,如果我使用索引并从最大开始并返回到第一个,则代码会更简单。 (带迭代器的步骤-1)(否则需要一个偏移量,因为一旦删除活动对象,For each 会将枚举器指针移回前一个对象)
例如。
For intA = 10 to 1 step -1
' ...
Next
使用 For Each | 时会怎样?下一个 例如。
For each rngCell in Selection.Cells
' ...
Next
如何使用for each 循环语法向后循环?
【问题讨论】:
-
您可以简单地反转集合并执行 ForEach :)
-
我什至不知道你能做到这一点:stackoverflow.com/questions/4203329/…。很高兴知道。
-
@VBlades,这很有趣,但是对于这个问题,OP 不会仅仅使用新集合就面临同样的问题吗?我认为在像这样删除 VBA 集合中的对象时,最好的解决方案是只使用集合索引和计数器。
-
@DougGlancy:是的,也许是道格。 Tbh,我在工作,只是发现它很新颖,可能与 OP 的问题有关,所以我把它链接了。不过,我认为更大的原则是 For...Each 构造专门针对那些顺序不重要的情况(stackoverflow.com/questions/952136/…);有点像带有数据行的集合论——本质上是无序的。这意味着是的,如果您需要按特定顺序执行操作,请使用您正在使用的集合提供的计数器。
-
问您为什么要这样做 - 所需的变通办法会使代码的效率低于 Step 替代方案?