Excel VBA 命名范围范围和/或命名范围的持久性

问题描述 投票:0回答:1

下面显示的 Sub 位于工作簿的 Module1 中(在 Modules 文件夹中)

工作簿/文件名为

"240122 Range Name Scope v01.xlsm"
它有 2 个工作表
S1
S2
。 每个工作表都有一个命名范围。

运行这个宏的地方 在单元格 Worksheets("S1").Cells(1,2) 中 (以上为工作表 S1 中的单元格 B1) 以下文本:=SUM(r_IN_Wksht_S2)

但是返回值是

#NAME?
我认为这意味着 Excel 不知道命名范围
r_IN_Wksht_S2

有人可以帮我理解为什么该值不是 10 吗? 工作表 S2 中单元格 A1 的值为 10。

子程序代码:

Sub Scope_Rng_Name_In_2_Wkshts_Insert_Formula()

Dim r_IN_Wksht_S1 As Range 'Named Range in Worksheet S1
Dim r_IN_Wksht_S2 As Range 'Named Range in Worksheet S2

Set r_IN_Wksht_S1 = Worksheets("S1").Range("$A$1")
Set r_IN_Wksht_S2 = Worksheets("S2").Range("$A$1")

r_IN_Wksht_S1.Value = 5
r_IN_Wksht_S2.Value = 10

Worksheets("S1").Cells(1, 2).FormulaR1C1 = "=sum(r_IN_Wksht_S2)"

End Sub

我已经尝试过:
我在 Excel 的 Formlas 选项卡的名称管理器功能/区域中查找了命名范围 r_IN_Wksht_S1 和 r_IN_Wksht_S2,但这些命名范围没有出现。

如果我使用“公式”选项卡中的“名称管理器”函数创建具有工作簿范围的命名范围 r_IN_Wksht_S1 和 r_IN_Wksht_S2,而不是在 Excel VBA 中创建命名范围,则当我在 Excel VBA 中编写公式时:

Worksheets("S1").Cells(1, 2).FormulaR1C1 = "=sum(r_IN_Wksht_S2)"

它有效。但我确实需要能够在 VBA 中定义/设置命名范围。

excel vba scope named-ranges
1个回答
0
投票

以下是添加语句以创建命名范围的示例:

Sub Scope_Rng_Name_In_2_Wkshts_Insert_Formula()

Dim r_IN_Wksht_S1 As Range 'Named Range in Worksheet S1
Dim r_IN_Wksht_S2 As Range 'Named Range in Worksheet S2

Set r_IN_Wksht_S1 = Worksheets("S1").Range("$A$1")
Set r_IN_Wksht_S2 = Worksheets("S2").Range("$A$1")

r_IN_Wksht_S1.Value = 5
r_IN_Wksht_S2.Value = 10

'// Create Named Ranges
ThisWorkbook.Names.Add Name:="r_IN_Wksht_S1", RefersTo:=r_IN_Wksht_S1
ThisWorkbook.Names.Add Name:="r_IN_Wksht_S2", RefersTo:=r_IN_Wksht_S2

'//Or Alternative way to create named ranges
'r_IN_Wksht_S1.Name = "r_IN_Wksht_S1"
'r_IN_Wksht_S2.Name = "r_IN_Wksht_S2"

Worksheets("S1").Cells(1, 2).FormulaR1C1 = "=sum(r_IN_Wksht_S2)"

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.