기능 과부하고 UDF Excel VBA
-
09-06-2019 - |
문제
내가 사용하고 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 문화한 다음 해당 기능을 때 당신은 그 무엇...