我有两个模块.在一个模块中,我想间接地从另一个模块运行一个子模块.根据MS和众多在线资源,这应该有效 – 但事实并非如此.可能是什么问题呢?
'Module: "Helpers"
Public Sub ubTest()
MsgBox "ubTest is called"
End Sub
'Another Module -> I also tried this from a form and a class...
Public Sub test()
Dim s As String
Helpers.ubTest 'works
s = "ubTest"
Application.Run s 'works
s = "Helpers.ubTest"
Application.Run s 'doesn't work
End Sub
(显然这是一个测试 – 在实际应用程序中,我将有多个模块,并且不会总是控制过程名称 – 所以我必须使用模块前缀)
我尝试/反编译并压缩数据库 – 也没有运气.
最佳答案 Access Application.Run方法帮助主题说明了有关Name参数的信息:
‘如果您正在调用另一个数据库中的过程,请使用项目名称和过程名称,并在表单中用点分隔:“projectname.procedurename”.
所以我认为当你提供“modulename.procedurename”(即“Helpers.ubTest”)时,Access认为你的modulename是VBA项目的名称.由于它找不到名为Helpers的项目,因此抛出错误#2517,“…找不到程序’Helpers.ubTest.’”
不幸的是,我找不到用Application.Run做我认为你想要的方法.我希望“projectname.modulename.procedurename”可以工作,但这也引发了2517错误.