我有一个泡菜,我似乎无法找到解决方案。
让我说我在VBA中有以下代码,基本上,无论函数Example为字符串参数赋予什么,都会调用与字符串参数同名的变量并返回变量的值这被称为(如果我的解释有任何意义):
Private EnterMenu, ExitMenu as String
Function Example(name)
Select Case name
Case "EnterMenu"
Example = EnterMenu
Case "ExitMenu"
Example = ExitMenu
'and so on
End Select
End Function
这很好,但是有没有办法为每一种可能性写一个案例,例如
Function Example(name)
Example=Value(name)
End Function
这样它只是抓取字符串" name"的值,获取具有相同名称的变量并返回该变量的值?
答案 0 :(得分:3)
您可以将公共变量声明为对象并将其设置为dictonary,如下所示:
Public diValues As Object
Sub InitPubVar()
Set diValues = CreateObject("Scripting.Dictionary")
diValues.Add "EnterMenu", "Opening the menu"
diValues.Add "ExitMenu", "Closing the menu"
End Sub
现在您的全局词典已经创建并填充,您可以使用您设置的键从中提取值,这似乎是您正在寻找的:
Sub Test()
MsgBox diValues("EnterMenu") '--> shows a box displaying the string "Opening the menu"
End Sub
请注意,如果您使用的是旧版本的Excel,则可能需要添加对Microsoft Scripting Runtime的引用。这可以在VB编辑器中完成 - >工具 - >引用。
答案 1 :(得分:1)
Excel没有一种动态调用字符串变量的简便方法。您可以使用CallByName
函数作为对象,如果您的变量为willing to create a custom class object,则可以使用该函数。或者您可以查看为您计划使用的每个变量创建命名范围,将范围值设置为等于变量的值,然后调用它
代码中的Range("YourVariable").Value
。
有些开发人员认为最好避免使用Select Case
;如果您有很多情况需要切换,您可能需要重新考虑您的逻辑流程。这是开发人员之间争论的话题,我不知道我可以选择一方,但Wikipedia解释了其他一些潜在的缺点和替代方案,以避免基于交换机的逻辑。