在VBA中通过string的值调用variables

我有一个泡菜,我似乎无法find一个解决scheme。

假设我在VBA中有下面的代码,基本上,无论函数Example作为string参数给出什么,都会调用与string参数同名的variables,并返回被调用的variables的值(如果我的解释有什么意义):

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 

所以它只是获取string“name”的值,获取具有相同名称的variables并返回该variables的值?

你可以声明你的公共variables作为一个对象,并将其设置为一个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 

现在你的全局字典已经被创build和填充了,你可以使用你设置的键来从中获取值,这似乎是你正在寻找的:

 Sub Test() MsgBox diValues("EnterMenu") '--> shows a box displaying the string "Opening the menu" End Sub 

请注意,如果您使用的是旧版本的Excel,则可能需要添加对Microsoft脚本运行时的引用。 这可以在VB编辑器 – >工具 – >参考中完成。

Excel没有简单的方法来dynamic调用stringvariables。 您可以使用CallByName函数来获取对象,如果您愿意为您的variables创build一个自定义类对象 。 或者你可以看看为你计划使用的每个variables创build一个命名的范围,设置范围的值等于variables的值,然后用Range("YourVariable").Value调用它。

有些开发人员觉得最好避免使用Select Case ; 如果您有很多情况需要切换,您可能需要重新考虑您的逻辑stream程。 这是开发人员之间争论的话题,我不知道我可以select一个方面,但维基百科解释了一些潜在的缺点和其他方法,以避免基于开关的逻辑。