2017-05-07 103 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