通过VBA中的字符串值调用变量

时间:2017-09-21 22:25:24

标签: excel vba excel-vba function variables

我有一个泡菜,我似乎无法找到解决方案。

让我说我在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"的值,获取具有相同名称的变量并返回该变量的值?

2 个答案:

答案 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解释了其他一些潜在的缺点和替代方案,以避免基于交换机的逻辑。