Excel VBA。 你如何得到与范围相关的特定名称?

我有一个单元格,它有多个与之相关的命名范围。 我如何得到它返回一个特定的名称,而不必循环工作簿中的所有名称?

Sub Test() ActiveWorkbook.Names.Add Name:="AUserDefinedName1", RefersTo:="='Sheet1'!$A$1", Visible:=True ActiveWorkbook.Names.Add Name:="AUserDefinedName2", RefersTo:="='Sheet1'!$A$1", Visible:=True ActiveWorkbook.Names.Add Name:="MyName", RefersTo:="='Sheet1'!$A$1", Visible:=True Dim n As Name Set n = Range("A1").Name Debug.Print n.Name End Sub 

如果你运行上面的单元格A1,它只会返回第一个名字。 然而,我怎么会得到它返回与单元格A1相关的其他名称以及具体返回“我的名字”?

我可以遍历工作簿中的所有名称,并查看Name对象的“RefersTo”属性是否与单元格A1的地址匹配,但是如果可能的话,我希望有更快的解决scheme。

这个线程给出了一个部分的答案,但是如果有多个名字,需要什么呢? 你如何得到一个范围返回它的名字?

使用Workbook.Names集合并testing地址:

 For Each n In ActiveWorkbook.Names If n.RefersToRange.Address = "$A$1" Then Debug.Print n.Name End If Next 

有一个关于命名范围的完整的MSDN文章 ,以便进一步阅读。

范围对象没有Names集合,因此完成此操作的唯一方法是在工作簿级别。 除非您的工作簿中有成千上万的命名范围,否则使用此方法将不会有明显的速度差异,只需创build一个UDF即可获取所需的名称。