有人可以解释为什么这个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")
行
我意识到这个功能没有做任何有意义的事情。这是一个简化的例子。
提前致谢
答案 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")