对象“ListObject”的方法“.ListRows”失败

问题描述 投票:0回答:1

我正在尝试在 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
。同样的错误。

这让我很困惑,我什至不知道该怎么做才能解决这个问题,所以任何帮助将不胜感激......

excel vba listobject
1个回答
0
投票

正如 @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!

© www.soinside.com 2019 - 2024. All rights reserved.