我有一个与其关联的多个命名范围的单元格。如何在不必遍历工作簿中的所有名称的情况下返回特定名称?
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相关联的其他名称,或者特别返回' MyName'?
我可以遍历工作簿中的所有名称,看看' RefersTo' Name对象的属性与单元格A1的地址匹配,但如果可能的话,我希望更直接的解决方案更快。
这个帖子给出了部分答案,但是如果有多个名字需要怎么做? How do you get a Range to return its Name?
答案 0 :(得分:1)
使用Workbook.Names
集合并测试地址:
For Each n In ActiveWorkbook.Names
If n.RefersToRange.Address = "$A$1" Then
Debug.Print n.Name
End If
Next
还有whole MSDN article关于命名范围的信息,以便进一步阅读。
范围对象没有Names
集合,因此完成此任务的唯一方法是在工作簿级别。除非您的工作簿中有数千个命名范围,否则使用此方法的速度差异不会明显,只需创建一个UDF即可获得所需的名称。
答案 1 :(得分:0)
WB作为工作簿 RG为范围
WB.Names(RefersTo:=“ =”&RG.Worksheet.Name&“!”&RG.Address(True,True))。名称
意识到这是一个过时的帖子,但是对于其他像我今天一样的人来说,以上内容对我有用。