以下是这种情况:
名字范围:
名称=" DualRange"
工作表=" Sheet1"
范围=工作簿
价值="全球"
第二名范围:
名称=" DualRange"
工作表=" Sheet1"
范围= Sheet1
值="本地"
现在
Worksheets("Sheet1").Range("DualRange").Value
将始终解析为" local"
但是
Range("DualRange").Value
解析为" local"如果Sheet1处于活动状态且"全局"如果sheet1未激活。
当sheet1处于活动状态时,有人可以告诉我如何引用工作簿范围吗?
答案 0 :(得分:0)
您使用:ThisWorkbook.Names(Index).RefersToRange
由于名称相同,您必须按索引找到正确的名称,并使用该索引号来指代该范围。
你可以通过循环遍历名称集合并找到一个没有"!"在其名称中或为其添加注释,然后使用循环来查找注释。
答案 1 :(得分:0)
感谢您的回复。我应该澄清一下,我会知道范围的范围。我正在寻找一个相当优雅的解决方案来访问"全球"当Sheet1处于活动状态时,在上述情况下的范围。我目前使用的方法是:
禁用屏幕更新
获取当前活动表的名称
激活Sheet1以外的工作表
得到Range的值(" DualRange")。值
恢复以前活动的纸张
启用屏幕更新
如果有人能提出更好的解决方案,那将会非常感兴趣。 感谢
答案 2 :(得分:0)
在代码的开头如何使用字典访问所有全局变量呢?
Set d = New Scripting.Dictionary
For Each n In ActiveWorkbook.Names
If TypeOf n.Parent Is Workbook Then 'check to verify name is global
d.Add n.Name, n 'add name to dictionary
End If
Next n
然后:
d("DualRange").RefersToRange.Value
根据需要解析为“全局”,无论哪个工作表处于活动状态。
答案 3 :(得分:0)
使用Application.Range("DualRange")
将始终解析为Global(即使Sheet1处于活动状态或正在执行的VBA代码位于Sheet1模块中)。