下面显示的 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 中定义/设置命名范围。
以下是添加语句以创建命名范围的示例:
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