在VBA中使用variables名称调用函数

提前致谢。

我试图调用一个variables名称的函数。 这是抛出错误

macros'testfunc'找不到。 简历没有错误

我的代码:我尝试了下面的3个语句,但都抛出了相同的错误。

sFuncName = "testfunc" ExtractData = Application.Run("Sheet.xls" & sFuncName, s1, s2) ExtractData = Application.Run(sFuncName, s1, s2) ExtractData = CallByName("Sheet.xls", sFuncName, VbMethod, s1, s2) 

请注意, sFuncName返回一个值&我有2 sFuncName在那一刻打开,我试图将数据从一个Excel复制到其他。

请帮我实现这一点。

 Private Function ABC sFuncName = oMapWksht.Cells(sMapRowItr, 3).Value 'sFuncName = "testfunc" ExtractData = Application.Run("Sheet.xls" & sFuncName, s1, s2) 'ExtractData = Application.Run(sFuncName, s1, s2) 'ExtractData = CallByName("Sheet.xls", sFuncName, VbMethod, s1, s2) End Function Public Function testfunc(ByVal s1 As String, ByVal s2 As String) As Boolean -- --- ---- End Function 

如果您调用的函数与调用方在同一工作簿中,则打开多less个工作簿并不重要。

如果所调用的过程在整个项目中没有唯一的名称,则需要至less使用模块的名称来限定函数名称。 这应该让你去:

Module1 (来电者)

 Sub DoSomething() Debug.Print Application.Run("Module2.Test", "Test") End Sub 

Module2 (被调用者)

 Public Function Test(ByVal title As String) As VbMsgBoxResult Test = MsgBox("Works?", vbQuestion + vbYesNo, title) End Function 

你可以使用一个Stringvariables来保存Sub的名字。 这是一个与调用者在同一个模块中的Sub的例子:

 Sub MAIN() Dim st As String st = "whatever" Application.Run st End Sub Public Sub whatever() MsgBox "whatever" End Sub 

如果调用者和被调用的子文件位于不同的模块中,则语法可能稍有不同。

编辑#1:

如果我们想在同一个工作簿中的不同模块中调用一个Sub,那么语法将是相同的。

如果我们想在另一个工作簿中调用一个Sub,并且这两个工作簿都是打开的,那么调用者将看起来像:

 Sub MAIN() Dim st As String st = "Book2.xlsm!whatever" Application.Run st End Sub 

我通常会声明所谓的Sub Public ,但是我不知道这是否有必要。

编辑#2

要在工作表单元格中使用另一个工作簿的UDF() ,则:

在这里输入图像说明

qwerty()是一个Public UDF()