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

'patients '매개 변수는 시동 자용 배열이 아닙니다. – Comintern

+1

질문에 오타가있는 경우 [괄호 제거] 만하면됩니다 (http://stackoverflow.com/documentation/vba/1179/procedure-calls/3818/this-is-confusing-why-not-just). -always-use-parentheses) : CalculateScores' 호출 : CalculateScores patients – Comintern

+1

@Comintern이 말한 것을 명확히하기 위해 CalculateScores는 문자열 배열이 아닌 실제 String을 기대합니다. – R3uK

답변

2

이 수행 할 때

DoSomething (expression) 

당신은 expression을 강요하고이 값으로 을 평가, 관계없이 매개 변수를 명시 적으로하는 ByRef 전달 말한다 여부 ByVal, 을 통과 할 수 있습니다. 대부분의 경우 영향이 거의 없지만 배열이나 객체 참조를 전달하려고하면 후위에서 물게됩니다.

괄호를 버립니다. 이제

DoSomething expression 

, 코드 다른 문제가있다 : 당신은 String 매개 변수에 문자열 배열을 전달하는; 그것은 작동하지 않습니다. 매개 변수를 배열 또는 Variant으로 만들고 명확성을 위해 매개 변수를 명시 적으로 ByRef으로 표시하는 것이 좋습니다.

+0

감사합니다. 그냥 다른 사람을 명확히하기 위해 - 내 매개 변수는 매트의 낯짝이 제안하는 것처럼 문자열이 아니어야합니다. – Absinthe