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