使用string值调用VBA子

这是我的testing代码

Sub dotask() Dim qusub As String qusub = Worksheets("Task List").Range("C2").Value MsgBox qusub Application.Run qusub End Sub Sub msg1() MsgBox "sub msg1" End Sub Sub msg2() MsgBox "sub msg2" End Sub Sub msg3() MsgBox "sub msg3" End Sub Sub msg4() MsgBox "sub msg4" End Sub 

所有这些都包含在一个标准模块中。 我读过试图调用一个string的VBA的子,并根据我在那里发现(即使用Application.Run)编写我的代码。 任务列表工作表的单元格C2当前包含“msg3”。 当我执行子“dotask”我第一次得到一个消息框说“msg3”,因为我想但是然后我得到以下错误信息:

运行时错误“1004”:

无法运行macros'msg3'。 macros可能不在此工作簿中可用或所有macros可能被禁用。

我在Excel 2010上工作,文件是.xlsm – 我该怎么做才能让我的代码执行,因为我想要它?

就在这里跑过来 msg1似乎是一个保留字…改变它的东西,它工作正常=)

使用GetRef,你提供了对子的引用。 例如,看我的问题

编辑:遵循评论中的build议,这里是这个问题的解决scheme的一部分。

 sub one(para) WScript.Echo para & " from one" end sub sub two(para) WScript.Echo para & " from two" end sub sub main(subname, para) Dim f : Set f = GetRef(subname) f para end sub main "one", "test" '=>test from one