2017-02-07 109 views
2

我在這裏做錯了什麼?數組參數必須是ByRef

Sub Main() 

Dim patients() As String 

' Some code to populate the patients array, works fine 

CalculateScores (patients) ' Array argument must be ByRef compile error 

End Sub 



Sub CalculateScores(patients As String) 

End Sub 

如果我改變患者的主要變量數組和CalculateScores的正常工作的參數,但我看不出不能夠傳遞一個字符串的邏輯。默認情況下它是ByRef,所以我知道我錯過了一些東西。

我可以肯定地使用一個變體,但感覺哈克。

+2

「患者」參數不適合初學者。 – Comintern

+1

如果這是一個錯誤的問題,你只需要[刪除parens](http://stackoverflow.com/documentation/vba/1179/procedure-calls/3818/this-is-confusing-why-not-just CalculateScores'調用:'CalculateScores patients'' – Comintern

+1

爲了闡明@Comintern說的話,'CalculateScores'需要一個真正的String,而不是一個字符串數組。 – R3uK

回答

2

當你這樣做:

DoSomething (expression) 

你強迫expression進行評估作爲一種價值,並通過ByVal無論參數是否明確地說,它傳遞的ByRef。雖然大多數情況下它幾乎沒有影響,但當您嘗試傳遞數組或對象引用時,會在後端咬你。

刪除括號。

DoSomething expression 

現在,還有其他問題,您的代碼:要傳遞一個字符串數組爲String參數;那不行。將參數設爲數組或Variant,爲了清楚起見,我建議將參數明確標記爲ByRef

+0

謝謝。只是爲了澄清其他人 - 我的參數應該是一個字符串()而不是一個字符串,正如Mat's Mug所建議的那樣。 – Absinthe

相關問題