带错误陷阱的Application.Run

som*_*mer 2 vba

在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.我的错误捕获设置被忽略.

Thu*_*ame 5

如果您调用的过程在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