2017-05-07 65 views
2

任何人都可以解释为什么此VBA函数在定义的行上终止?无法将变量数组分配到键入的数组

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

这是什么语言?请适当标记。 –

+0

它是Visual Basic吗? –

+0

是的,它是VBA。对不起,我没有提到,因为我认为这是一个VBA专区。我现在更新了这篇文章。 – Mas

回答

3

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") 
+0

谢谢。这就说得通了。 – Mas