【发布时间】:2016-01-23 02:33:04
【问题描述】:
我希望在调用函数 func1 时显示可能值的列表。我找到了一种通过 ENUM 在 VBA 中实现此目的的方法,但这在工作表中不起作用。所以我创建了一个函数 e ,它将某些字符串转换为正确的枚举值。不幸的是,我找不到使用字符串或枚举值调用此函数 func1 而不会出错或失去功能的方法。到目前为止,这是我所得到的:
Enum eLanguages
evEnglish = 2
evItalian = 3
'and so on
End Enum
Function e(vString)
Select Case vString
Case "english", "eng", "en", "e"
e = evEnglish
Case "italian", "italien", "it", "i"
e = evItalian
Case Else
e = vString '(= will keep the value if it's already a number)
End Select
End Function
选项 1:在 VBA 中键入时显示可能值的列表,但不适用于字符串输入
Function func1(var As eLanguages)
func1 = e(var)
End Function
Sub test1()
MsgBox func1(evEnglish) 'Will result in 2 (through the enum and the e function)
MsgBox func1("e") 'Type 13 error
End Sub
选项 2:给出正确的结果,但我没有得到 VBA 中可能值的列表
Function func2(var)
func2 = e(var)
End Function
Sub test2()
MsgBox func2(evEnglish) 'Will result in 2 (through the enum and the e function)
MsgBox func2("e") 'Will result in 2 (through the e function)
End Sub
注意:像这样调用两个函数中的任何一个都会得到正确的结果,但显然我并不热衷于每次调用函数时都必须编写 e():
MsgBox func1(e("e"))
那么您对如何忽略 Type 13 错误或如何在 ENUM 声明中包含“允许的任何字符串”选项有任何建议吗?
提前致谢。
【问题讨论】:
-
什么是
eLanguages?你需要解释你在做什么。似乎缺少拼图。 -
对不起,eLanguages 是枚举。
-
好的 --
e是什么?由于您的问题是关于当您以某种方式调用e时会发生什么,因此几乎不可能在不知道e究竟是什么的情况下回答。 -
我编辑了原帖。如果将字符串而不是枚举值传递给函数,则“E”只是分配枚举值之一。重点是为用户提供多种选择语言的选项,而无需查找代码以获得确切的措辞。
-
如果这是你想要的,为什么不让
e返回一个字符串?枚举的元素只是整数的别名(VBA 程序员使用的别名,而不是使用 Excel 应用程序的人),所以返回evEnglish是返回 2。
标签: vba enums intellisense