使用Application.Run调用另一个例程时,似乎无法捕获错误。

Sub Test()
    On Error Resume Next
    Debug.Print Application.Run("SomeRoutine", 1, 2, 3)
End Sub

仍然会显示运行时错误对话框。

最佳答案

确实如此。但是,请尝试其他两种方法中的一种作为解决方法:

Option Explicit

Sub Test()

    On Error Resume Next

    SomeRoutine 1, 1, 1
    Call SomeRoutine(2, 2, 2)

    Application.Run "SomeRoutine", 3, 3, 3

End Sub

Public Sub SomeRoutine(a, b, c)

    Debug.Print a
    Debug.Print 5 / 0

End Sub

使用Call和不使用Call,您可以整齐地捕获错误。使用Application.Run-不,因为它就像一个外部调用。

通常,您可以使用Singleton设计模式在类中创建Sub SomeRoutine。因此,您将可以通过CallByName像这样访问它:
Call CallByName(objSingleTonClass, "SomeRoutine", VbMethod, 5)

07-26 02:07