VBA 函数参数列表选择

问题描述 投票:0回答:2

我希望做如下事情:

    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。

谢谢

vba excel excel-2007
2个回答
13
投票

这就是所谓的枚举。这是一个简单的例子:

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 编辑器中调用该函数时正在寻找的所需“下拉”效果。但是,如果您要从 Excel 单元格公式中调用“GetDrinkSpecial”,您将无法访问枚举,并且需要专门将枚举的长值传递给它。


2
投票

不完全是你问的那样。

首先,必须为一个模块中可能的选项定义一个“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 等可能会重命名以更有意义,但它们在整个项目中应该是独一无二的。

© www.soinside.com 2019 - 2024. All rights reserved.