vba - 迭代集合 (VBA)

标签 vba variables excel foreach

您好,我是 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/

相关文章:

excel - VBA 将 Microsoft Word 书签和选择文本导出到 Excel 电子表格

vba - 如何将一系列单元格向右移动

vba - 如何不刷新 backgroundQuery vba

excel - 从 Outlook 引用和访问 Excel

vba - 如果选中复选框,则更改下一个工作表上单元格的单元格颜色

excel - 验证下拉条件

excel - 无法使用目标复制将一个单元格复制到另一个单元格

javascript - 如何从 html 文本框中获取输入并将其分配给 javascript 变量?

caching - 如何知道特定 ColdFusion 变量或 ColdFusion 作用域的每个属性正在使用多少内存?

javascript - javascript/NodeJS 中的变量范围问题