2014-06-10 142 views
1

我有一個愚蠢的問題,當我創建一個函數返回一個數組時,我總是得到錯誤類型不匹配。這裏有兩個簡單的例子: 如果我不申報時,申報類型:它會被編譯,但功能結果類型不匹配錯誤,當返回一個函數中的數組時

Function aa(c As Integer) 
Dim arr(10) 
Dim i As Integer 
Dim k As Double 
For i = 0 To 10 
    k = i^2/c + 1 
    arr(i) = CStr(k) 
    Debug.Print k 
Next i 
aa = arr 
End Function 

後得到的錯誤,如果我聲明的類型:它不能被編譯並會得到錯誤直接

Function aa(c As Integer) as string() 

Dim arr(10) as string 
Dim i As Integer 
Dim k As Double 
For i = 0 To 10 
    k = i^2/c + 1 
    arr(i) = CStr(k) 
    Debug.Print k 
Next i 
aa = arr 
End Function 

回答

1

,如果你這樣調用它,使用相同類型的你的第二個版本將工作:

Sub Testaa() 
    Dim result() As String 

    result = aa(4)  
End Sub 

你的第一個版本將返回一個Variant - 沒有給出特定類型的任何函數(或變量)將默認爲Variant。所以,你需要返回的結果存儲在Variant以及:

Sub Testaa() 
    Dim result As Variant 

    result = aa(4) 
End Sub 

最好是儘可能使用顯式類型。

+0

非常感謝。但是,如果我想直接使用該函數,那麼如何修改它以避免類型不匹配錯誤? – yabchexu

+0

你是什麼意思直接調用該函數?如果你想在工作表單元格中使用該功能,那麼它需要更多的工作。請參閱[此鏈接](http://www.cpearson.com/excel/returningarraysfromvba.aspx)關於從UDF返回數組。 –

+0

非常感謝,鏈接有我想學的東西。 – yabchexu

相關問題