VBA ActiveWorkbook / RefersToLocal – 1004应用程序定义的错误或对象定义的错误

执行以下行时,会引发1004运行时错误(应用程序定义的错误或对象定义的错误)

rangeString = ActiveWorkbook.Names.Item("MyTableName").RefersToLocal 

我不能看到我的代码有什么问题,表名似乎是正确的。 这个代码是在一个类模块中,我不是一个vba专家,所以我不知道是否引入任何问题,范围等

如果您的对象(MyTableName)是Excel数据表,请使用ListObject使用的范围,例如

 Sub test() Dim L As ListObject Set L = ActiveSheet.ListObjects("MyTableName") ' at this point you can inspect the properties of L in the debugger ' retrieve the local address of tue underlying range Debug.Print L.Range.AddressLocal End Sub 

请不要select这个答案。 这只是为了增值:)

如果你只是有表的名称,不知道该表是在哪张表,那么你可以试试这个

 Sub Sample() Dim oSh As Worksheet Dim oLo As ListObject For Each oSh In ThisWorkbook.Worksheets For Each oLo In oSh.ListObjects If oLo.Name = "MyTableName" Then Debug.Print "=" & oSh.Name & "!" & oLo.Range.Address Exit For End If Next Next End Sub 

我认为范围对象可以访问任何表中的任何表就好:

 Debug.Print "=" & Range("MyTableName").Parent.Name & "!" & Range("MyTableName").Address 

对于任何人类似的错误尝试在即时窗口中的这一行:

For ii = 1 to ThisWorkbook.Names.Count : ? ii & " " & ThisWorkbook.Names.Item(ii).Name : next

从结果中你可能会发现表名是名字的一部分,例如'My Second Sheet'!Print_Area' – 这个全名需要用作.Names的索引:

? ThisWorkbook.Names.Item("'BlahBlah'!Print_Area").RefersTo