对于每个循环的反向顺序

关于VB最强大的function之一是能够循环通过集合中的对象而不涉及索引 – for each循环。

我发现它非常有用,只想从集合中删除对象。

在从电子表格中的预定义行(如行)中删除对象时,如果使用索引并从最大值开始并返回第一个值,则代码会更简单。 (使用迭代器的步骤-1)(否则需要一个偏移量,一旦活动的一个被删除,For就会将枚举器指针移回到前一个对象)

例如。

 For intA = 10 to 1 step -1 ' ... Next 

如何使用For Each | 接下来例如。

 For each rngCell in Selection.Cells ' ... Next 

我怎么能循环使用for each循环语法?

对于单元集合使用“For x = a To b Step -1”的替代方法:

 Sub reverseForEach() Dim lngCounter As Long, rng As Range Set rng = ActiveSheet.Range("A1:B5") For lngCounter = rng.Cells.Count To 1 Step -1 Debug.Print rng(lngCounter).Address 'rng(lngCounter) is shorthand for rng.item(lngCounter) Next lngCounter End Sub 

这应该适用于大多数具有.item属性的集合。

对于内置的集合(例如Range ),简短的回答是:你不能。 对于用户定义的集合,由@VBlades链接的答案可能是有用的,但成本可能会超过有利的。

一个解决方法是分离从实际移除中删除的项目的标识 。 例如,对于范围,使用Unionbuild立一个新的范围variables,然后处理该variables,例如一次删除所有行。 对于Range示例,您还可以利用Variant Array方法来进一步加快速度。

这些是否有用将取决于您的实际使用情况。