在同一工作表上引用具有双作用域的命名范围

时间:2014-11-03 18:33:04

标签: excel vba range named-scope

以下是这种情况:

名字范围:
名称=" DualRange"
工作表=" Sheet1"
范围=工作簿
价值="全球"

第二名范围:
名称=" DualRange"
工作表=" Sheet1"
范围= Sheet1
值="本地"

现在

Worksheets("Sheet1").Range("DualRange").Value

将始终解析为" local"

但是

Range("DualRange").Value

解析为" local"如果Sheet1处于活动状态且"全局"如果sheet1未激活。

当sheet1处于活动状态时,有人可以告诉我如何引用工作簿范围吗?

4 个答案:

答案 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模块中)。