执行以下行时,抛出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
请不要选择这个作为答案。这只适用于增值:)
如果您只知道表的名称,并且不确定表在哪个工作表中,那么您可以尝试使用
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
我认为Range Object可以访问任何表格中的任何表格:
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