使用字符串值调用VBA sub

时间:2015-06-10 10:38:09

标签: excel vba excel-vba

这是我的测试代码

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

所有这些都包含在一个标准模块中。我已经阅读了Trying to call a Sub with a String - VBA并根据我在那里找到的代码(即使用Application.Run)编写了代码。任务列表工作表的单元格C2目前包含“msg3”。当我执行sub“dotask”时,我首先得到一个消息框,说“msg3”,但我收到以下错误消息:

  

运行时错误'1004':

     

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

我正在使用Excel 2010,文件是.xlsm - 我应该怎么做才能让我的代码按照我的意愿执行?

2 个答案:

答案 0 :(得分:3)

在这里跑过来。 msg1似乎是一个保留字......将其更改为其他内容并且工作正常=)

答案 1 :(得分:1)

使用GetRef,您可以提供对sub的引用。 请参阅我的问题here,例如

编辑:按照评论中的建议,这里是这个问题解决方案的一部分。

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