在Access中,使用VBA,我想使用Application.Run并捕获任何错误.不幸的是,Application.Run似乎劫持了错误捕获.有没有办法来解决这个问题?
On Error Resume Next
Application.Run ...
Run Code Online (Sandbox Code Playgroud)
即使我指定On Error Resume Next或On Error GoTo ErrCatch,我也永远不会错过Application.Run.我的错误捕获设置被忽略.
如果您调用的过程在VBA项目中,那么您可以直接调用该过程:
Sub Foo()
'Application.Run "SomeProc"
SomeProc
End Sub
Run Code Online (Sandbox Code Playgroud)
如果您需要能够按名称动态调用事物,则可以使用类进行探索CallByName:
'In a standard module
Sub Foo()
Dim o as New ProcRunner
CallByName o, "SomeProc", VbMethod, args
End Sub
'In a class module called ProcRunner
Sub SomeProc()
DoSomethingHere
'Or, do something in a standard module
Module1.SomeOtherProc
End Sub
Run Code Online (Sandbox Code Playgroud)
或者,您可以编写自己的动态处理程序,类似于:
Sub AppRun(ProcName As String, ParamArray Args)
Select Case ProcName
Case "SomeProc"
SomeProc
Case "SomeFunc"
SomeFunc
End Select
End Sub
Run Code Online (Sandbox Code Playgroud)
如果您在另一个VBA项目中调用过程,则可能需要添加对该项目的引用,具体取决于VBA主机.
但是,如果您正在使用,Application.Run因为您正在调用DLL或XLL注册的函数,那么除了使用之外您没有任何其他选项Application.Run