无法将变量数组分配给类型化数组

时间:2017-05-07 02:08:49

标签: arrays vba excel-vba function excel

有人可以解释为什么这个VBA函数终止于定义MyArray的行吗?

Function FindEndPinyin2(Rge As Range) As Integer

Dim MyArray() As String

MyArray = Array("cat", "dog")

FindEndPinyin2 = 2

End Function

该功能,只需退出并返回一个#Value!错误一旦到达MyArray = Array( "Cat", "Dog")行   我意识到这个功能没有做任何有意义的事情。这是一个简化的例子。 提前致谢

1 个答案:

答案 0 :(得分:4)

VBA未将Variant Array转换为Typed Array。您应该选择其中之一并使用它。

Dim MyArray() As String ' <--- MyArray is a TYPED array
MyArray = Array("cat", "dog") ' <-- Type Mismatch

Array(...)是一个VBA 函数,它返回Variant Array。因此,您无法执行将变量数组转换为类型化数组的此分配,即使Variant数组中的元素都是适当的类型(在您的情况下为String)。

如果你坚持做这个转换,你需要一个循环来逐个元素地填充所输入的数组。更简单的是将MyArray声明为变量数组,或仅作为变体:

Dim MyArray
' Also works: Dim MyArray()
' Also works: Dim MyArray() As Variant

MyArray = Array("cat", "dog")