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

3

有人能解释一下为什么这个VBA函数在定义MyArray的那行就终止了吗?

Function FindEndPinyin2(Rge As Range) As Integer

Dim MyArray() As String

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

FindEndPinyin2 = 2

End Function

这个函数在到达MyArray = Array("Cat", "Dog")这一行时,会简单地退出并返回一个#Value! 错误。 我意识到这个函数没有任何有意义的作用。这只是一个简化的例子。 提前感谢您的帮助。


这是什么语言?请加合适的标签。 - Arya McCarthy
这是Visual Basic吗? - PM 77-1
是的,这是VBA。抱歉,我没有提到,因为我认为这是一个仅限于VBA的区域。我现在已经更新了帖子。 - Mas
1个回答

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 Array中的元素都是适当类型(在您的情况下是String),也无法执行将Variant数组转换为类型数组的此赋值操作。
如果您坚持要进行此转换,则需要使用循环逐个填充类型数组元素。更简单的方法是将MyArray声明为Variant数组,或者仅声明为Variant:
Dim MyArray
' Also works: Dim MyArray()
' Also works: Dim MyArray() As Variant

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

谢谢。那很有道理。 - Mas
至少从Excel 2007开始,可以将Array()的结果分配给一个有类型的数组。但是如果变体数组来自其他地方作为参数,则不行。 - ivan_pozdeev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接