提前致谢。
我正在尝试使用变量名调用函数。它正在抛出错误
无法找到宏'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个Excel,我正在尝试将数据从一个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
答案 0 :(得分:1)
您可以使用字符串变量来保存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()
答案 1 :(得分:1)
如果您调用的函数与调用者位于同一工作簿中,则打开的工作簿数量并不重要。
如果调用的过程在整个项目中没有唯一的名称,则需要至少使用模块的名称来限定函数名称。这应该让你去:
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