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

时间:2015-04-06 10:26:40

标签: arrays excel vba excel-vba

为数组分配范围非常简单。尽管如此,我还是发现了VBA意外表现的情况。我无法找到答案为什么会这样,所以我希望有人可以向我解释,为什么它不起作用。

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

工作代码

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

问题 为什么我必须将目标范围分配给类型'范围'在创建数组之前?

1 个答案:

答案 0 :(得分:3)

由于Worksheets返回一个通用Object并且你没有指定value属性,你应该总是<你有太多层次的间接从Variant到Variant数组的隐式强制工作。 / strong>做。之一:

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

应该有用。