2017-02-07 75 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

相关问题