【问题标题】:VBA ActiveWorkbook / RefersToLocal - 1004 Application defined or object defined errorVBA ActiveWorkbook / RefersToLocal - 1004 应用程序定义或对象定义错误
【发布时间】:2016-04-14 01:06:11
【问题描述】:

执行以下行时,抛出1004运行时错误(Application defined or object defined error)

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

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

【问题讨论】:

  • 试试这个rangeString = ThisWorkbook.Names.Item("MyTableName").RefersToLocal
  • 同样的问题,很遗憾
  • 向我们展示代码,尽管MyTableName 可能不是范围名称
  • 或将您的工作簿上传到任何免费的文件共享网站并在此处共享链接
  • 严格来说它不是一个范围名称,因为它是一个表名,我遵循这个答案stackoverflow.com/a/19755989的逻辑

标签: vba excel


【解决方案1】:

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

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

【讨论】:

  • + 1 你打败了我 :D 我不得不放弃我的帖子 :) 我有一个稍微不同的变化"=" & oSh.Name & "!" & oLo.Range.Address
  • @SiddharthRout 打败你并不容易......我很荣幸
  • 话虽如此,我如何才能得到工作表名称?
  • @NeilP 欢迎...期待更多酷的问题和答案
  • Neil,我已经在上面的第一条评论中展示了如何获取工作表名称。
【解决方案2】:

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

如果您只有表格的名称并且不确定表格在哪个表格中,那么您可以试试这个

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

【讨论】:

  • @SiddhartRout 你又一次帮助了我,我想我会很快介入,以感谢你在这个网站上提供的一些非常宝贵的答案!我第一次在新工作中编写 VBA 3 周,这样的事情真是太棒了!
【解决方案3】:

我认为 Range Object 可以很好地访问任何工作表上的任何表格:

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

【讨论】:

    【解决方案4】:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      相关资源
      最近更新 更多