Excel: VBA 引用基于字符串变量的命名范围

Excel: VBA referencing named range based on string variable

如何 reference/select 基于字符串变量的命名范围,文本是名称范围名称?

示例:

'Target is range variable which is set to cell that is double clicked.
'For this example lets say the cell value is "A1A"
Dim binName As String
binName = "B1" & Target(1).Value
MsgBox(binName) 'This displays "B1A1A" which is the name of the named range
Range(binName).Select 'I want to select the range with the name B1A1A

这给了我 运行-时间错误'1004': 对象“_Worksheet”的方法 'Range' 失败 在上面代码的最后一行。

我知道 Range() 正在寻找一个对象,但我不知道如何从字符串变量中引用调用范围名称。

在此先感谢您的帮助。

分辨率编辑: 根据下面戴维斯的建议,我更改了

Range(binName).Select

Application.Goto ThisWorkbook.Worksheets("B1").Range(binName) 'where "B1" is the worksheet name

Application.Evaluate(binName).Select

应用程序评估将评估字符串并解析引用。它接受字符串作为参数,并且不需要解析为范围(例如,Application.Evaluate("10") 将导致 return 为 10)。

有关详细信息,请查看 MSDN 文档:https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-evaluate-method-excel

编辑:值得注意的是,错误处理不当,因此如果输入字符串不是有效的命名范围,它可能会 return 一个 Nothing 引用或错误。

此外,ThisWorkbook.Sheets("SomeRangeName").Select 应该可以(并且确实可以)正常工作。更有可能是你的范围名称有问题

可以有一个仍然明确分配给单个作品的工作簿范围范围sheet,我收集的是你想要的(Name 指的是其他作品的某个范围[= =23=],等等)。

如果您以 UI 的身份执行此操作,而不是 Select,请尝试使用以下内容:

Application.GoTo Range(binName)

或:

Application.GoTo [binName]

经过测试,即使某个范围明确用于另一作品sheet,似乎也能正常工作sheet,Application.GoTo负责切换到该sheet并选择该范围。