如何获取工作簿范围的名称?

在Excel中,我定义了两个名字。 两者具有相同的名称,但是范围和价值不同。 一个范围是一张纸,另一个是工作簿。

在这里输入图像说明

我无法在单元格公式或VBA中检索书籍范围的名称。

在VBA中,以下内容返回表单作用域名称: ThisWorkbook.names("myName") 在这里输入图像说明

在一个单元格中,当我input以下内容: =book.xlsb!myName Excel将其重写为: Sheet1!myName

如何检索单元格公式和/或VBA中的工作簿范围名称?

如果您将我的代码粘贴到新的模块中,则可以在VBA中和公式中使用此函数来获取工作簿范围中的名称:

 Public Function §(ra As String) Application.Volatile Dim tName As Name For Each tName In ThisWorkbook.Names If tName.Name = ra Then § = tName.RefersToRange.Value Exit Function End If Next tName End Function 

只需在公式中使用“=§(”myRange“)”或在VBA中使用§(“myRange”)即可。 使用§(“Sheet1!myRange”)也获得了工作表范围名称。

使用此ThisWorkbook.Worksheets(“Sheet1”)。范围(“myName”)。值

新冲突只发生在新的工作簿中的默认第一个工作表。 与任何其他工作表上定义的名称发生冲突。

如果您重命名默认的第一张纸张,您仍然会在该纸张上发生名称冲突 – 这与纸张名称无关

您可以删除默认的第一个工作表,而新的第一个工作表使用的第二个工作表不会有这个问题。 这是特定于新书中的默认第一张。

如果永远不删除默认的第一张纸张,然后永远删除该纸张,则纸张作用域定义的名称将覆盖书籍范围的同名。

因此,要回答 OP,在存在相同的工作表范围的名称时获取书籍范围名称的最简单,最简单的方法是不要在默认的第一个工作表上尝试。

不需要VBA。

仅在Excel 2010上进行testing。

上面的评论和微软链接使我得到了答案。 感谢那位评论员。