您好,我是 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
有人可以解释为什么它不允许我迭代这些值吗? 声明变量的整个问题对我来说是新的。 谢谢!
最佳答案
将y
声明为Variant
,即:
Dim y As Variant
并像这样更改循环:
For Each y In rows
然后循环就会起作用,或者至少,它不会在那个点给你一个错误。
但是下一个问题/错误是在循环内部。这一行:
rows(y).Delete
会给你一个错误“需要对象”,或者类似的东西,因为rows(y)
返回一个整数,所以你不能对其调用Delete
。这里有些困惑,因为 rows
本身就意味着事件工作表的 Rows
范围。但您还将集合命名为 rows
,因此存在命名冲突。
将您的rows
重命名为myrows
,然后它就应该可以正常工作了。但是,我不知道您要对 Delete
行执行什么操作,因此我无法提供进一步建议。
关于vba - 迭代集合 (VBA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24962346/