2015-04-06 54 views
1

将范围分配给Array非常简单。尽管如此,我发现了VBA出乎意料的表现。我找不到答案,为什么会这样,所以我希望有人能向我解释为什么它不起作用。使用“With .. End With”将范围分配给阵列

任务:指定一个范围(从打开的工作簿)到数组

工作代码

Dim vrtTabOEen() as Variant 
Dim rngTabOEen as Range 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    Set rngTabOEen = .Range(Name_Tab_Def_OEen) 
    vrtTabOEen = rngTabOEen 
End With 

非工作代码

Dim vrtTabOEen() as Variant 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    vrtTabOEen = .Range(Name_Tab_Def_OEen) 
End With 

运用非工作代码,我会得到错误13:类型不匹配。

问题 为什么我必须创建一个数组出来之前将其目标范围内分配给类型“范围”的变量?

回答

3

由于Worksheet返回一个通用对象并且您没有指定值属性,因此Variant到Variant数组的隐式强制的间接级别过高,因此您应该始终使用 。或者:

Dim vrtTabOEen() as Variant 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    vrtTabOEen = .Range(Name_Tab_Def_OEen).Value 
End With 

或:

Dim vrtTabOEen as Variant 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    vrtTabOEen = .Range(Name_Tab_Def_OEen) 
End With 

应该工作。

+0

感谢罗里,它的工作。虽然我不明白你的第一句话的开头。 “间接水平”以及“隐性强制”我都不知道。将查找他们 – AndyP 2015-04-06 10:56:14