2015-10-15 24 views
2

我的目標是從子程序返回數組。我一直在關注this教程。這裏是我的代碼:從子程序返回數組給出:編譯錯誤:不能分配給數組

Function FuncReturnArray() As String 
    Dim Films(1 To 5) As String 
    Films(1) = "Lord of the Rings" 
    Films(2) = "Speed" 
    Films(3) = "Star Wars" 
    Films(4) = "The Godfather" 
    Films(5) = "Pulp Fiction" 
    FuncReturnArray = Films 
End Function 

Sub SubReturnArray() 
    Dim Films() As String 
    Films = FuncReturnArray() 
    MsgBox Films(4) 
End Sub 

Compile error: Can't assign to array和編輯指向以下行:Films = FuncReturnArray()什麼,我做錯了什麼?

回答

3

如此接近 - 你真的要踢自己爲這一個:

Function FuncReturnArray() As String() 
    Dim Films(1 To 5) As String 
    Films(1) = "Lord of the Rings" 
    Films(2) = "Speed" 
    Films(3) = "Star Wars" 
    Films(4) = "The Godfather" 
    Films(5) = "Pulp Fiction" 
    FuncReturnArray = Films 
End Function 

Sub SubReturnArray() 
    Dim Films() As String 
    Films = FuncReturnArray() 
    MsgBox Films(4) 
End Sub 

請注意,在上面的代碼中的頂線 - 需要「字符串」應遵循的「()」以表明FuncReturnArray是一個數組。您可能認爲「FuncReturnArray」後面的括號是這樣做的,但實際上在這種情況下,他們在那裏引用了沒有參數傳遞給函數的事實。

+0

謝謝,這按預期工作。你可以請我指出一些來源,解釋如何調試類似的錯誤?所以我不需要再問這些初學者的問題。 –

+0

坦率地說,我並沒有意識到有能力做到這一點 - 我會建議@ScottHoltzman在下面列出。我只是發現了這個,因爲你引用的鏈接包含括號。就調試而言,在我看來,調用subs和函數是一項特別棘手的任務,因爲語法非常重要。請注意,您似乎一直專注於調用函數的那一行,但正如您所看到的,錯誤出現在函數的定義本身中。確保您查看錯誤行的所有元素 - 包括調用/調用它的元素。 –

1

使您的函數變體類型。

Function FuncReturnArray() As Variant 
+0

比字符串有什麼好處? –

+2

其實,請參閱下面的等級'Eh'培根的答案。它比我的好。變體的作品是因爲它是一種模糊的類型,可以接受所有事物,但是在內存和資源方面可能會非常昂貴 - 所以應該儘可能地避免。在您編寫代碼的方式中,函數返回一個扁平的字符串值,並嘗試將其分配給一個數組。 –

+1

謝謝。我已投稿。 –