2017-05-07 12 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 ArrayTyped Arrayに変換しません。どちらかを選択して作業する必要があります。

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

Array(...)Variant Arrayを返すVBA 関数あります。その結果、バリアント配列内の要素がすべて適切な型(あなたの場合はString)であっても、バリアント配列を型付き配列に変換するこの割り当てを行うことはできません。

この変換を行うとしたら、型付き配列を要素ごとに満たすループが必要です。 MyArrayをバリアント配列、またはバリアントとして宣言するほうがずっと簡単です。

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

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

ありがとうございます。それは理にかなっている。 – Mas

関連する問題