Выбор списка аргументов функции VBA - PullRequest
6 голосов
/ 17 марта 2011

Я хочу сделать что-то вроде следующего:

    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 ]

11 голосов
/ 17 марта 2011

Это то, что известно как перечисление. Вот быстрый пример:

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

Это даст желаемый эффект «Выпадающий», который вы ищете при вызове функции в редакторе VBA. Однако если бы вы вызывали GetDrinkSpecial из формулы ячейки Excel, у вас не будет доступа к перечислению, и вам нужно будет передать ему длинное значение перечисления.

2 голосов
/ 17 марта 2011

Не совсем так, как вы просили.

Сначала вы должны определить «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"и "С".Кстати, OPTION_A, OPTION_B и т. Д. Могут быть переименованы, чтобы иметь больше смысла, но они должны быть уникальными во всем проекте.

...