2017-09-21 25 views
1

我有一个泡菜,我似乎无法找到解决方案。在VBA中调用一个字符串值的变量

假设我在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”的值,得到th e变量具有相同的名称并返回该变量的值?

回答

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脚本运行时的参考。这可以在VB编辑器 - >工具 - >引用中完成。

1

Excel没有简单的方法来动态调用字符串变量。您可以使用对象的CallByName函数,如果您的变量为willing to create a custom class object,则可以使用该函数。或者您可以查看为您计划使用的每个变量创建一个命名范围,将范围的值设置为等于该变量的值,然后在您的代码中使用 Range("YourVariable").Value来调用它。

一些开发人员觉得最好避免使用Select Case;如果你有很多情况需要切换,你可能需要重新考虑你的逻辑流程。这是开发人员之间争论的话题,我不知道我可以选择一边,但Wikipedia解释了其他人为避免基于交换机的逻辑而提出的潜在缺点和替代方案。

相关问题