String 如何在字符串中使用函数名引用函数

String 如何在字符串中使用函数名引用函数,string,excel,function,vba,String,Excel,Function,Vba,我希望只使用包含函数名的字符串来引用函数。我已经查看了callbyname和application.run,但我不确定哪里出了问题 有什么想法吗 Option Explicit Public Sub TestDynamic1() Debug.Print "TestDynamic 1" End Sub Sub TestDynamic2() Debug.Print "TestDynamic 2" End Sub Private Sub TestDynamic3() Debug.Pr

我希望只使用包含函数名的字符串来引用函数。我已经查看了callbyname和application.run,但我不确定哪里出了问题

有什么想法吗

Option Explicit

Public Sub TestDynamic1()
  Debug.Print "TestDynamic 1"
End Sub

Sub TestDynamic2()
  Debug.Print "TestDynamic 2"
End Sub

Private Sub TestDynamic3()
  Debug.Print "TestDynamic 3"
End Sub

Sub callTestDynamic(i As Integer)
  On Error GoTo DynamicCallError
  Application.Run "TestDynamic" & i
  Exit Sub
DynamicCallError:
  Debug.Print "Failed dynamic call: " & Err.Description
End Sub

Public Sub TestMe()
  callTestDynamic 1
  callTestDynamic 2
  callTestDynamic 3
  callTestDynamic 4
End Sub
我得到的只是说宏不存在的错误

我想做的是

function testFunction(functionName as string)
    run functionName
end function

sub testSub()
    *... some code here ...*
    testFunction "test"
end sub

function test()
    debug.print "This function works"
end function

任何人能提供的任何帮助都将不胜感激。

您在命名方面存在一些不一致之处

同时,将“test”用作函数也不起作用

Sub testSub()
    '*... some code here ...*
    testFunction "test1"
End Sub

Function testFunction(functionName As String)
    Application.Run functionName
End Function

Function test1()
    Debug.Print "This function works"
End Function
注:OP引用以下代码:


把你的代码放在一个普通的模块中,使它能正确运行。TestDynamic 1、2和3正常工作,不存在的TestDynamic4导致了预期的错误,可能是的重复