为什么我不能捕获使用Application.Run调用例程时发生的错误?

时间:2017-07-19 14:22:19

标签: vba excel-vba error-handling excel

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

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

无论如何都会显示运行时错误对话框。

1 个答案:

答案 0 :(得分:1)

那是真的。但是,请尝试使用其他两种方法作为解决方法:

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和w / o Call,您可以整齐地捕获错误。使用Application.Run - 不,因为它就像是外部呼叫。

通常,您可以使用 Singleton设计模式在类中创建Sub SomeRoutine。因此,您可以通过CallByName访问它,如下所示:

Call CallByName(objSingleTonClass, "SomeRoutine", VbMethod, 5)