Выбор списка аргументов функции VBA
Я хочу сделать что-то вроде следующего:
Public Function myFunc(vArg1 as string, vArg2 as string, vArg3 as ["A","B","C"])
End Function
Где пользователь получает выпадающий список для vArg3 при вызове. Это будет похоже на следующее:
Public Sub Main()
Call StrComp("A", "B", vbTextCompare)
End Sub
Где vbTextCompare может быть выбран из предопределенного списка или аргументов для функции.
Спасибо
2 ответа
Это то, что известно как перечисление. Вот быстрый пример:
Public Enum DayOfWeek
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
Sunday = 7
End Enum
Public Function GetDrinkSpecial(day As DayOfWeek) As String
Select Case day
Case DayOfWeek.Monday
GetDrinkSpecial = "$1 Tap Domestics"
Case DayOfWeek.Tuesday
GetDrinkSpecial = "2 for 1 Rail Mixers"
Case DayOfWeek.Wednesday
GetDrinkSpecial = "$2 You-Call-Its"
Case DayOfWeek.Thursday
GetDrinkSpecial = "$1 Bush Bottles"
Case DayOfWeek.Friday
GetDrinkSpecial = "$3 Greenies"
Case DayOfWeek.Saturday
GetDrinkSpecial = "No Specials, Doh!"
Case DayOfWeek.Sunday
GetDrinkSpecial = "No Specials, Doh!"
Case Else
GetDrinkSpecial = "No Specials, Doh!"
End Select
End Function
Public Sub TestIt()
MsgBox GetDrinkSpecial(Monday)
MsgBox GetDrinkSpecial(Tuesday)
MsgBox GetDrinkSpecial(Wednesday)
MsgBox GetDrinkSpecial(Thursday)
MsgBox GetDrinkSpecial(Friday)
MsgBox GetDrinkSpecial(Saturday)
MsgBox GetDrinkSpecial(Sunday)
End Sub
Это даст желаемый эффект "Drop Down", который вы ищете при вызове функции в редакторе VBA. Однако, если бы вы вызывали GetDrinkSpecial из формулы ячейки Excel, у вас не будет доступа к перечислению, и вам нужно будет передать ему длинное значение перечисления.
Не совсем так, как ты просил.
Во-первых, вы должны определить "Public Enum" для возможных опций в модуле (это может быть тот же модуль, если он не является модулем класса)
Public Enum myFuncEnum
OPTION_A
OPTION_B
OPTION_C
End Enum
Тогда в определении функции вы должны иметь:
Public Function myFunc(vArg1 as string, vArg2 as string, vArg3 as myFuncEnum)
End Function
Помните, что вы должны сравнить vArg3 с OPTION_A, OPTION_B и OPTION_C вместо "A", "B" и "C". Кстати, OPTION_A, OPTION_B и т. Д. Могут быть переименованы, чтобы иметь больше смысла, но они должны быть уникальными во всем проекте.