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

How to obtain workbook-scoped name?

在Excel中,我定义了两个名字。两者名称相同,但范围和价值不同。一个范围为 sheet,另一个范围为工作簿。

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

在 VBA 中,以下 returns sheet 范围的名称: ThisWorkbook.names("myName")

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

如何在单元格公式中检索工作簿范围名称 and/or VBA?

使用这个 ThisWorkbook.Worksheets("Sheet1").范围("myName").值

如果您将我的代码粘贴到新模块中,您可以在 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") 也可以获得 sheet 作用域名称。

此冲突仅发生在新工作簿中 默认第一个 sheet 时。冲突 不会 发生在任何其他 sheet 上定义的名称上。

如果您重命名默认的第一个 sheet,您仍然会在 sheet 上遇到名称冲突——这 与 sheet-名称无关.

您可以删除默认的第一个sheet,而新的第一个sheet-used-to-be-2nd-sheet,将没有有这个问题。具体到新书默认第1sheet

如果您从不删除默认的第一个 sheet,那么永远,在 上 sheet, sheet 范围定义的名称将永远覆盖书范围内的同名。

因此,对于 answer OP,当存在相同的 sheet-scoped 名称时,获取 book-scoped 名称的最简单、最简单的方法是 不尝试在默认的第一个 sheet.

不需要VBA。

仅在 Excel 2010 年测试。

一条评论和上面的 Microsoft link 让我找到了答案。感谢那个评论者。