Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA ActiveWorkbook/RefersToLocal-1004应用程序定义或对象定义错误_Vba_Excel - Fatal编程技术网

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

VBA ActiveWorkbook/RefersToLocal-1004应用程序定义或对象定义错误,vba,excel,Vba,Excel,执行以下行时,会抛出1004运行时错误(应用程序定义的错误或对象定义的错误) rangeString = ActiveWorkbook.Names.Item("MyTableName").RefersToLocal 我看不出我的代码有任何错误,表名似乎是正确的。此代码位于类模块内,我不是vba专家,因此我不知道这是否会导致范围等问题。如果您的对象(MyTableName)是Excel数据表,请使用ListObject使用的范围,例如 Sub test() Dim L As ListOb

执行以下行时,会抛出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对象可以在任何工作表上访问任何表:

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

对于遇到类似错误的任何人,请在即时窗口中尝试以下一行:

此工作簿的ii=1的
name.Count:?ii&&&ThisWorkbook.Names.Item(ii).名称:下一步

从结果中,您可能会发现工作表名称是名称的一部分,即“我的第二张工作表”!打印区域“-此全名需要用作
的索引。名称


?ThisWorkbook.Names.Item(“'BlahBlah'!Print_Area”)。请参考

尝试此
rangeString=ThisWorkbook.Names.Item(“MyTableName”)。参考本地
同样的问题,不幸的是我们如何显示代码,虽然有可能
MyTableName
不是一个范围名称,或者在任何免费文件共享站点上传您的工作簿并在此处共享链接,但它并不是严格意义上的范围名称,因为它是一个表名称,我遵循这个答案+1的逻辑:D我不得不放弃我的帖子:)我有一个稍微不同的变体
“=”&oSh.Name&“!”&oLo.Range.Address
@SiddharthRout打败你并不容易。。。我很荣幸这么说,我怎样才能把床单的名字拿出来?@Nelp欢迎。。。期待更多的酷问题和答案留言,我已经在上面的第一条评论中展示了如何获取工作表名称。@SiddhartRout您再次帮助了我,我想我会很快进入这个网站,感谢您在这个网站上提供了一些宝贵的答案!我在一份新的工作中工作了3周,第一次写VBA,像这样的事情真是太棒了!