Excel 我在管理器中指定的范围的类型不匹配

Excel 我在管理器中指定的范围的类型不匹配,excel,vba,type-mismatch,Excel,Vba,Type Mismatch,我希望有人能帮我弄清楚为什么在这个例子中会出现类型不匹配。我本来希望范围变量“returnDetectionRange”和名称管理器中名为“returnChangeDetectionRange”的对象都是range类型,但我遇到了一个错误 Dim returnDetectionRange As Range Set returnDetectionRange = ActiveWorkbook.Names("returnChangeDetectionRange") 在名称管理器中,returnCh

我希望有人能帮我弄清楚为什么在这个例子中会出现类型不匹配。我本来希望范围变量“returnDetectionRange”和名称管理器中名为“returnChangeDetectionRange”的对象都是range类型,但我遇到了一个错误

Dim returnDetectionRange As Range

Set returnDetectionRange = ActiveWorkbook.Names("returnChangeDetectionRange")
在名称管理器中,returnChangeDetectionRange是指使用偏移公式的动态范围:

=OFFSET(Returns!$D:$D, 0, 'Market Value'!$E$2)

谢谢你花时间看我的问题

ActiveWorkbook.Names集合包含
Name
对象,而不是
Ranges
。狡猾,阿米丽特

假设命名范围始终为“returnChangeDetectionRange”,则此赋值应该有效:

如果您下定决心使用
名称
集合,您可以在包含命名范围的书中使用以下小脚本:

Option Explicit
Sub CoolNamedRangeTest()

Dim Nm As Name '<~ we'll use this to iterate through ThisWorkbook.Names 
Dim returnDetectionRange As Range

For Each Nm In ThisWorkbook.Names
    If Nm.Name = "returnChangeDetectionRange" Then '<~ check the name
        Set returnDetectionRange = Range(Nm.Name)  '<~ assign the range
    End If
Next Nm

MsgBox (returnDetectionRange.Address) '<~ validate that it worked here

End Sub
选项显式
子CoolNamedRangeTest()

Dim Nm作为名称“您非常接近,但需要使用
名称。referestorange
属性:

Set returnDetectionRange = ActiveWorkbook.Names("returnChangeDetectionRange").RefersToRange

我投了反对票,因为第二部分不必要地复杂,第一部分应该通过工作表限定范围,也许还有名称。我认为,你的总体观点是,仅仅使用这个范围是一个好的选择。真诚的反馈非常感谢。第二部分是一个做作的例子(“如果你一心想使用
名称
集合…”)。我完全同意应该对范围进行限定,这导致了一个问题——如果指定的范围仅限于
工作簿
,而不是特定的
工作表
,该怎么办?不管怎样,
refrestorange
技术很巧妙,值得投票和绿色检查。谢谢你,道格!谢谢你,丹。您关于工作簿级别名称的范围的问题很有趣
referestorange
消除了范围界定的需要,我认为,因为它可以在一张工作表上找到范围。如果你知道你有这样一个名字,但不知道它在哪张纸上,这可能会很有用,但我很难想出一个现实的例子:)。+1,
。refrestorange
一直在我的关注范围内,是解决这个问题的最简单的方法。好东西!
Set returnDetectionRange = ActiveWorkbook.Names("returnChangeDetectionRange").RefersToRange