迭代集合(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的整个问题对我来说是新的。 谢谢!
声明y
为Variant
,即:
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
。)