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即可获取所需的名称。