我希望做如下事情:
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。
谢谢
这就是所谓的枚举。这是一个简单的例子:
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”,您将无法访问枚举,并且需要专门将枚举的长值传递给它。
不完全是你问的那样。
首先,必须为一个模块中可能的选项定义一个“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 等可能会重命名以更有意义,但它们在整个项目中应该是独一无二的。