使用“With .. End With”将范围分配给数组

给Array分配一个Range非常简单。 尽pipe如此,我还是发现了VBA出乎意料的performance。 我找不到答案,为什么这么做,所以我希望有人能向我解释,为什么它不工作。

任务:将范围(从打开的工作簿)分配给数组

工作代码

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:types不匹配。

问题为什么在创build数组之前,必须将目标范围指定给“范围”types的variables?

由于Worksheet返回一个通用对象,而且您没有指定value属性,所以您应该始终这样做,因此,对于Variant to 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 

应该pipe用。