我正在尝试在 VBA 中使用简单的
ListObject
循环迭代 Excel 表 (For Each
) 的行,紧接着以 same 方式迭代一次 same 表:
With Sheet3.ListObjects("Contractuels")
For Each r In .ListRows
dict.Add Application.Intersect(r.Range, .ListColumns("mail_ouvert").Range).Value, Application.Intersect(r.Range, .ListColumns("CMI / IPR").Range).Value
Next r
Call ImportPQ
Call FormatCTENTable
For Each ro In .ListRows
For Each i In dict.Items
If i.Key = Application.Intersect(r.Range, .ListColumns("mail_ouvert").Range).Value Then
Application.Intersect(r.Range, .ListColumns("CMI / IPR").Range).Value = i.Value
End If
Next i
Next ro
End With
我在第二次迭代中遇到错误,内容如下:
"Run-time error '-721329648 (d5016210)' :
Method 'ListRows' of object 'ListObject' failed"
我不知道问题是否在于我最初在第二次迭代中重新使用了上面的
For Each r in .ListRows
,所以我将变量r
更改为ro
。同样的错误。
这让我很困惑,我什至不知道该怎么做才能解决这个问题,所以任何帮助将不胜感激......
正如 @braX 在评论中建议的那样,其中一个潜艇 (
ImportPQ
) 确实删除并重新创建了我正在使用的表,尽管在同一张表上,具有相同的名称。这对 VBA 来说并不重要:With
语句正在操作另一个 ListObject(因此已被删除),因此它引发了错误。因此,解决方案是使用两个 With
语句,以便将 new 表存储在内存中以供进一步操作。
这是更新后的代码:
With Sheet3.ListObjects("Contractuels")
For Each r In .ListRows
dict.Add Application.Intersect(r.Range, .ListColumns("mail_ouvert").Range).Value, Application.Intersect(r.Range, .ListColumns("CMI / IPR").Range).Value
Next r
End With
Call ImportPQ
Call FormatCTENTable
With Sheet3.ListObjects("Contractuels")
For Each ro In .ListRows
For Each i In dict.Items
If i.Key = Application.Intersect(r.Range, .ListColumns("mail_ouvert").Range).Value Then
Application.Intersect(r.Range, .ListColumns("CMI / IPR").Range).Value = i.Value
End If
Next i
Next ro
End With
再次感谢@braX!