迭代集合(VBA)

你好,我是VBA新手,我正在尝试迭代我已经做的一个集合,并为每个值执行一个操作。

这是我的代码:

Sub makeRowsMatch() Dim rows As VBA.Collection Set rows = New VBA.Collection Dim i As Integer Dim j As Integer Dim y As Integer For i = 2 To 22203 For j = 2 To 121 If Cells(i, 2).Value <> Cells(j, 38) Then rows.Add (i) End If Next j Next i For Each y As Object in rows rows(y).Delete Next y End Sub 

我一直在错误的行中:

 For Each y As Object in rows 

它不断得到突出的黄色,但是当我删除上面的行是得到以下错误:

 For Each control variable must be Variant or Object 

有人可以解释为什么它不让我迭代值? 声明variables的整个问题对我来说是新的。 谢谢!

声明yVariant ,即:

 Dim y As Variant 

并像这样改变你的循环:

 For Each y In rows 

那么循环将起作用,或者至less在一点上不会给你一个错误。

但下一个问题/错误是在循环内。 这一行:

 rows(y).Delete 

会给你一个“Object required”对象的错误,因为rows(y)返回一个Integer,所以你不能调用Delete 。 这里有一些困惑,因为rows本身意味着活动工作表的Rows范围。 但是你也把你的集合命名为rows ,所以有一个命名冲突。

重命名你的rows ,例如, myrows ,它应该都工作。 但是,我不知道你想用Delete行做什么,所以我不能进一步build议。

你的声明和使用有冲突。 这一行将y声明为一个Integer ,显然:

 Dim y As Integer 

但是,你尝试把它当作一个Object来使用,

 For Each y As Object in rows 

要么

 For Each y in rows 

将声明更改为

 Dim y As Object 

(我不熟悉VBA,如果上面的不行,把声明改为Dim y As Variant 。)