【发布时间】:2016-05-10 15:04:55
【问题描述】:
我正在尝试创建一个使用命名范围的 UDF。我的命名范围(“best_Grade”)是一个带有值的单元格。 (命名范围的范围是工作簿)。
在工作簿模块中,当我尝试使用命名范围创建变量时,我得到 p>
运行时错误“1004”:对象“_Global”的“范围”方法失败
这两行都不行:
Dim namedRng As Range
Dim locDataWS As Worksheet
Set locDataWS = Sheets("Approval matrix 16")
Set namedRng = Range("best_Grade") ' errors
Set namedRng = locDataWS.Range("best_Grade") ' When I take above line out, this line errors too
我试过了:
Dim wb As Workbook
Set wb = ActiveWorkbook
Set namedRng = wb.Names("best_Grade").RefersToRange
怎么会出错? This page 说它应该可以工作,不是吗?我是否必须将此 UDF 放在实际的工作表对象上,而不是放在工作簿模块中?
编辑:注意:命名范围不是设置为单元格,而是 SumIf 公式 (best_Grade = SumIf(A2:A10,"x",...)` 可能导致错误?
Edit2:是的,这就是我认为的原因。我为随机单元格创建了一个命名范围,并且能够使用 Range("a_grade").Value 并返回预期值。由于我的best_Grade 范围是一个公式,我认为这就是它出错的原因。但是,我不知道为什么,因为我认为命名范围就是命名范围,无论它是由什么组成的......
编辑 n+1:注意这里有两个“答案”。如果我想继续使用命名范围作为 Range 变量,请参阅下面的答案。然而,我真正想做的是@MacroMarc 发布的内容,所以我选择了它作为“答案”。
【问题讨论】:
-
根据我的经验,引用命名范围与地址不同,因为您必须首先使用对工作表的引用来限定它。也就是说,我原以为你说的第二行错误应该只要删除前一行就可以工作。
-
@MacroMan - 我想我偶然发现了为什么它会返回这样的错误。由于命名范围未设置为单元格,而是设置为公式,因此会出错。我想我要做的就是有一个辅助单元格,给 that 一个命名范围,然后使用它。但是,如果可能的话,我想使用我的公式命名范围...
-
@findwindow 不用担心,反正还没有人接受我!
-
@BruceWayne 是的,这就是问题所在。您是否尝试过改用
Application.Evaluate()? -
@Findwindow 我看到 Scott 不再是你的导师了,否则你会尝试为 sumproduct 或聚合函数定义一个名称! 8)