2014-10-09 2 views
0

myfunction이라는 함수가 있습니다. 10 개의 선택적 인수가 있습니다. 이 함수는 myotherfunction이라는 다른 함수를 호출하는데,이 함수에는 10 개의 선택적 인수가 있습니다.옵션 인수가있는 다른 함수에 선택적 인수를 전달하는 방법

그래서 myfunction을 인수 1 만 호출한다고 가정 해 보겠습니다. 10 개의 선택적 인수 중 어느 것이 전달되었는지 알 수 없을 때 인수 1만을 사용하여 myotherfunction을 호출하려면 어떻게해야합니까?

전달해야하는 인수가 1 ~ 10 개일 수 있으므로 ret_value = myotherfunction (arg1 : = argumentone)이라고 말할 수 없습니다. 만약 2 개의 인자를 사용했다면 ret_value = myotherfunction (arg1 : = argumentone, arg2 : = argumenttwo) 일 필요가있을 것입니다.하지만 런타임에 다시 어떤 인자가 myfunction으로 전달되었는지 알지 못합니다. 함수 호출을 구문 분석 할 수있는 방법이 있습니까?

답변

1

IsMissing을 사용하십시오.

If IsMissing(arg1) Then 
    'do something 
End If 

Variant 유형에서만 작동합니다.

+0

'IsMissing' 함수는 선택적 매개 변수의 'Variant' 유형에서만 작동합니다. 자세한 내용은 [IsMissing 함수] (http://msdn.microsoft.com/en-us/library/aa445048(v=60) .aspx) – Jeeped

2

체인을 따라 인수를 전달하십시오.

Sub foo() 
    Call bar("test") 
End Sub 
Sub bar(sOne As String, Optional sTwo) 
    Call foobar(sOne, sTwo) 
End Sub 
Sub foobar(strOne As String, Optional strTwo) 
    If IsMissing(strTwo) Then 
     MsgBox strOne 
    Else 
     MsgBox strOne & "- " & strTwo 
    End If 
End Sub 

참고 : 매우 단순한 예로는 foobar에서 IsMissing 각 루틴의 요구는 그들과 함께 아무것도하기 전에 선택적 인수를 테스트하는 것을 나타 내기 위해서 전용입니다. 아마도 그것들을 전달하는 더 명확한 예가 다음과 같습니다 :

Sub foo() 
    ' note only one parameter provided 
    Call bar("test") 
End Sub 
Sub bar(sOne As String, Optional sTwo, Optional sThree, Optional sFour) 
    ' still pass all parameters even if we only got one 
    Call foobar(sOne, sTwo, sThree, sFour) 
End Sub 
Sub foobar(strOne As String, Optional strTwo, Optional strThree, Optional strFour) 
    ' some code here 
End Sub 
+0

문제는 10 개의 변수를 조합하여 사용할 수 있다는 것입니다. 나는 확실히 ismissing을 사용하여 런타임에 어떤 변수가 전달되었는지 알아낼 수 있지만 이러한 모든 조합을 수용하기 위해 디자인 단계에서 두 번째 함수 호출을 어떻게 작성합니까? –

+0

내 생각을 잊어 버린 것 같아. 첫 번째 루틴에서 두 번째 루틴으로 동일한 변수를 모두 전달하십시오. 그들을 테스트하는 것을 귀찮게하지 마십시오. ''foobar (sOne, sTwo)'호출은 sTwo가'bar'에 전달되었는지 아닌지를 검사하거나 신경 쓰지 않는다는 것을주의하십시오. 솔직히 말하면, 10 개의 선택적 인수는 나에게 나쁜 디자인처럼 보입니다. 아마도 ParamArray 또는 UDT/Class가 필요할 것입니다. – Rory

+0

글쎄, 내가 더 우아한 해결책을 찾고 있다고 생각해. 그러나 하나가있는 것처럼 보이지 않습니다. 10 개의 선택적 인수는 요청을 보내는 API에서 사용됩니다. 나는 그것을 바꿀 수 없다. 당신의 도움을 주셔서 감사합니다. –