2011-10-10 4 views
32

이 내 간단한 스크립트에서 하위를 호출. 나는 그 오류를 이해하지 못한다. 이것은 두 개의 인수를 갖는 간단한 서브 루틴 호출입니다. VBA가 전화를받지 않는 이유는 무엇입니까?은 VBA

답변

60

시도 -이 질문을 통해 MSDN에서 그 이유에 관해서는

Call CatSubProduktAreakum(Stattyp, Daty + UBound(SubCategories) + 2) 

, 이것은 - What does the Call keyword do in VB6?

당신은 프로 시저를 호출 할 때 호출 키워드를 사용할 필요는 없습니다. 그러나 Call 키워드를 사용하여 인수가 인 프로 시저를 호출하는 경우 argumentlist는 괄호로 묶어야합니다. Call 키워드 을 생략하면 argumentlist 주변의} 호를 생략해야합니다. 호출 구문을 사용하여 내장 함수를 호출하거나 사용자 정의 함수를 호출하면 함수의 반환 값이 무시됩니다. 아직이 게시물에 오는 사람들을위한

+1

감사합니다. 작동하는 것 같습니다. 하나의 인수 만 사용하여 서브 루틴을 호출하면 (그리고 하나의 인수로 정의하는 경우) 이름과 괄호 안의 인수로 호출 할 수 있습니다. 두 개의 인수를 가진 Sub를 호출 할 수없는 이유는 무엇입니까? – reggie

+3

@reggie 괄호'Mysub arg1, arg2, arg3'을 건너 뛰는 한 Call없이 서브를 호출 할 수 있습니다. 그러나 ByVal과 ByRef를 읽어야합니다. – Fionnuala

+0

더 자세한 설명으로 답변을 업데이트했습니다. – ipr101

5

, 다른 옵션은 단순히 괄호를 생략하는 것입니다

Sub SomeOtherSub(Stattyp As String) 
    'Daty and the other variables are defined here 

    CatSubProduktAreakum Stattyp, Daty + UBound(SubCategories) + 2 

End Sub 

Call 키워드는 이전 버전과의 호환성 (을)에 대한 VBA 만 정말 실제로 필요하지 않습니다.

그러나 Call 키워드를 사용하기로 결정한 경우에는 구문을 적절하게 변경해야합니다.

'// With Call 
Call Foo(Bar) 

'// Without Call 
Foo Bar 

둘 다 똑같은 일을합니다.


말했다되고, 당신이 수를 의도하지 않은 곳 (괄호는 VBA에서이 작업을 수행으로) 평가하기 위해 사용하는 괄호가 불필요하게 가지 원인이 어디에 조심 인스턴스가있을 수있는 것을 너무 더 나은 옵션은 아마도 Call 키워드와 괄호를 생략하는 것입니다.