문제

내가 사용하고 Excel VBA 를 쓰는 UDF.나는 과부하 내 자신의 UDF 의 부부와 함께 다른 버전을 다른 인수 호출의 다른 기능이다.

로 VBA 보이지 않는 이를 지원하기 위해 누군가는,비분의 방법으로 동일한 목적을 달성하?아야 할 옵션을 사용하여 인수 또는 더 나은 방법이 있을까?

도움이 되었습니까?

해결책

선언으로 인수 Optional Variants, 다음을 테스트할 수 있습을 보면 그들은 누락 사용 IsMissing() 또는 체크인 자신의 유형을 사용하여 TypeName(), 에서와 같이,다음 예제:

Public Function Foo(Optional v As Variant) As Variant

    If IsMissing(v) Then
        Foo = "Missing argument"
    ElseIf TypeName(v) = "String" Then
        Foo = v & " plus one"
    Else
        Foo = v + 1
    End If

End Function

이라고 할 수 있습에서 워크시트로 =FOO(), =FOO(번호), 나 =FOO("문자열").

다른 팁

는 경우에 당신을 구별할 수 있으로 매개 변수 계산,다음 이런 작동:

Public Function Morph(ParamArray Args())

    Select Case UBound(Args)
    Case -1 '' nothing supplied
        Morph = Morph_NoParams()
    Case 0
        Morph = Morph_One_Param(Args(0))
    Case 1
        Morph = Two_Param_Morph(Args(0), Args(1))
    Case Else
        Morph = CVErr(xlErrRef)
    End Select

End Function

Private Function Morph_NoParams()
    Morph_NoParams = "I'm parameterless"
End Function

Private Function Morph_One_Param(arg)
    Morph_One_Param = "I has a parameter, it's " & arg
End Function

Private Function Two_Param_Morph(arg0, arg1)
    Two_Param_Morph = "I is in 2-params and they is " & arg0 & "," & arg1
End Function

는 경우만을 구별하는 방법 기능을 유형별로,당신은 효과적으로 가야 할 것은 무엇인 C++및 다른 언어로 재정의 함수를 호출하여 서명이 있습니다.나는 제안 호출을 다음과 같은 모양이 됩니다:

Public Function MorphBySig(ParamArray args())

Dim sig As String
Dim idx As Long
Dim MorphInstance As MorphClass

    For idx = LBound(args) To UBound(args)
        sig = sig & TypeName(args(idx))
    Next

    Set MorphInstance = New MorphClass

    MorphBySig = CallByName(MorphInstance, "Morph_" & sig, VbMethod, args)

End Function

고 클래스를 만들의 번호와 방법과 일치하는 서명을 기대합니다.당신은 아마 일부를 필요로 오류 처리도,그리고 경고하는 유형을 인식할 수 있는 제한된:날짜형 이 두 예를 들어,.

VBA 이 지저분하다.나는 확실하지 않다 거기에는 쉬운 방법은 가짜 오버로드:

과거에는 나는 하나 사용이 많이 optionals 있으며,사용되거나 다양한 기능입니다.에 대한 인스턴스

Foo_DescriptiveName1()

Foo_DescriptiveName2()

말 갈 선택적으로는 인수가 합리적지 않는 경우 기본값을 인수 목록은 얻을 것 어리석,다음을 작성하려면 별도의 함수를 호출한 경우입니다.

당신 mighta 리는 것도 좋은 방법이 변형을 사용하여 데이터 유형에 대한 귀하의 인수 목록한 다음 그림의 어떤 유형을 사용하여 TypeOf 문화한 다음 해당 기능을 때 당신은 그 무엇...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top