Перегрузка функций и UDF в Excel VBA
Если вы можете различать excel-macro по количеству параметров, то macros-vba будет работать что-то вроде table-valued-functions этого:
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
Если единственный способ visual-basic-applications отличить функцию — по типам, то table-valued-functions вам фактически придется делать visual-basic-applications то, что делают C++ и другие excel-macro языки с переопределенными excel функциями, то есть вызывать scalar-function по сигнатуре. Я бы предложил excel сделать звонок примерно таким:
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
и user-defined-functions создание класса с набором scalar-function методов, соответствующих user-defined-functions ожидаемым сигнатурам. Однако udf вам, вероятно, потребуется workbook некоторая обработка ошибок, и excel имейте в виду, что распознаваемые user-defined-functions типы ограничены: например, даты user-defined-functions — это TypeName Double.
excel
user-defined-functions
vba
Перегрузка функций и UDF в Excel VBA
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.