2016-01-22 22 views
0

我想要一个可能的值列表,当我调用函数func1时显示。我发现了一种通过ENUM在VBA中实现此功能的方法,但这在工作表中不起作用。所以我创建了一个函数e,它将某些字符串转换为正确的枚举值。不幸的是,我找不到一个方法来调用这个函数func1与一个字符串或枚举值没有得到错误或失去功能。下面是我到目前为止有:VBA:非排他性ENUM或忽略类型13错误?

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 

注:调用任何像这样的两个功能将给予正确的结果,但很明显,我并不热衷于不必写Ë () 每次我调用该函数: MsgBox func1(e("e"))

那么,你对如何忽略类型13错误或如何包括在ENUM声明选项“允许任何字符串”有什么建议?

在此先感谢。

+0

什么是'eLanguages'?你需要解释你在做什么。似乎缺少拼图。 –

+0

对不起,eLanguages是枚举。 – Angela1234

+0

好的 - 什么是'e'?既然你的问题是关于当你以某种方式调用'e'时会发生什么,所以在不知道实际是什么的情况下回答几乎是不可能的。 –

回答

0

@CinyMeister的想法很有趣。细微变化 - 让参数可选,并使用if - then - else,连同IsMissing功能的两个参数合并为一条:功能FUNC3(可选的X作为eLanguages,可选ÿ作为字符串) 暗淡VAR为Variant 如果ISMISSING (X)然后

 var = y 
    Else 
     var = x 
    End If 
    func3 = e(var) 
End Function 

Sub test() 
    MsgBox func3(evEnglish) 
    MsgBox func3(, "it") 
End Sub 

即使有大量的参数,这样的事情会工作 - 当您在VBA编辑器,你可以调用函数通过重复按下逗号键的选项标签。通过枚举给出的参数将唤起智能感知下拉菜单。其他参数希望具有描述性名称。

0

我刚刚有另一个想法,但我不认为它会作为一个超级解决方案。

我可以有2个函数,一个用于Excel,一个用于VBA。像这样:

Function funcV(var As eLanguages) 
funcV = SOMETHING 
End Function 

Function funcE(var) 
funcE= funcV(e(var)) '(which is "SOMETHING") 
End Function 

问题是我是否会记得我的许多函数中哪一个具有姐妹函数。没有办法将Type 13错误捕获为“on error”事件并自动重定向,是吗?