【问题标题】:Get NamedRange from unknown worksheet in other workbook从其他工作簿中的未知工作表中获取 NamedRange
【发布时间】:2016-06-30 09:54:51
【问题描述】:

我正在尝试从标准化的 Excel 表单中提取数据,其中我想要的所有值都命名为 Ranges。 NamedRanges 是特定于工作表的,例如c_001 指的是 Sheet1!$X$38。

我已尝试检索工作簿中的所有名称,例如

'Runtime error 13 - Type mismatch
Set namesInWb = Workbooks(wbName).Names

这似乎不起作用,可能是因为所有名称都是特定于工作表的?

然后我认为我可以通过 Range 对象获取名称,例如我希望能够使用这样的东西来获取 wsName:

tempRange.Worksheet.Name

虽然我需要先检索 Range 对象,但如果不知道工作表名称,我想不出任何办法。

'Not working - Runtime error 438 - Object does not support this property or method
Set tempRange = Workbooks(wbName).Range("c_001")


'This works now, only failed due to another error earlier in the code that I had missed
Set tempRange = Range(currentName)

更新:最后一种方法现在有效。只是由于我之前错过的代码中的错误而失败。

【问题讨论】:

  • 您是否尝试遍历所有工作表以查找特定的命名范围?
  • 以上有什么错误/
  • Names collection 返回活动书中的所有姓名。你能解释一下这不起作用吗?您收到错误消息吗?对不起@Nathan_Sav;我试图赞成你的评论,但后来我不小心投了反对票。所以不会让我重新投票。
  • @Nathan_Sav 我已经更新了收到的错误消息。
  • 从我的角度来看 Workbooks(wbName).Names 应该可以工作,但也许它返回 Nothing 因为没有全局名称?我不确定 Excel 是否以及如何区分工作表特定名称和非工作表名称。

标签: excel vba named-ranges


【解决方案1】:

在 VBA 中,您还可以像这样将命名范围放在方括号中来引用它们

Dim namedRange as Range
Set namedRange = [rangeName]

或者干脆直接调用它的方法...

[rangeName].Select

【讨论】:

    【解决方案2】:

    要选择一个范围,我们应该知道工作表名称。 Range 是工作表的方法,所以我们不能在工作簿上应用Range 方法。

    如果我们不知道工作簿下的工作表名称,那么您可以使用下面的工作表索引

    ThisWorkbook.Worksheets(1).Range("A1").Value
    

    您还可以通过使用(如果您需要在同一个工作簿上进行多次操作)知道工作表的名称

    ThisWorkbook.Worksheets(1).Name
    

    ThisWorkbok 将成为您工作簿的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多