vba - 为什么不能捕获通过Application.Run调用例程时发生的错误?

标签 vba excel error-handling

使用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)

关于vba - 为什么不能捕获通过Application.Run调用例程时发生的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45193436/

相关文章:

python - 函数在错误处理中调用自身是Pythonic吗?

jsp - 缺少 Action 错误,但是仍然有效。怎么样?

matlab - 不存在的列的 Octave 错误

excel - 查找重复项和重命名主/子

VBA 仅在 Debug模式下运行

vba userform ,如果框架中的任何复选框为真,则不应将宏应用于复选框中提到的工作表名称

java - 数据格式自动转换为父子格式

python - 如何更正导致列集中出现 "shifted"数据的缺失单元格/缺失分隔符?

vba - 一次复制 2 列之前的单元格?

VBA在具有 "True"条件的多个复选框上显示结果