【问题标题】:Using Error Handling in VBA在 VBA 中使用错误处理
【发布时间】:2015-04-07 14:14:21
【问题描述】:

我想弄清楚我的所有潜艇是否有可能有一个错误处理程序?我的情况是,每当出现错误时我都需要退出子程序并跳过所有下一个子程序。

Sub Runall()
Call A
Call B
Call C 
Call D
End sub 

现在,如果 Sub A 中出现错误,我不想为 B 运行 B、C、D 和相同的事情。我应该将错误处理程序放在哪里?我实际上很困惑,因为 EXIT 语句的使用有什么关系。请指教。

【问题讨论】:

  • this 的可能重复项。你能检查一下接受的答案,看看它是否适合你吗?

标签: vba excel


【解决方案1】:

试试这个

 Sub Runall()
    Call A
    On Error GoTo Errhandler
    Call B
    On Error GoTo Errhandler
    Call C 
    On Error GoTo Errhandler
    Call D
    On Error GoTo Errhandler

 ' Exit the macro so that the error handler is not executed.
 Exit Sub
    Errhandler:
    ' If an error occurs, display a message and end the macro.
    MsgBox "An error has occurred. The macro will end."
 End sub 

【讨论】:

  • 我在哪里可以放置错误处理程序。抱歉,我创建了某些新工作表,如果出现任何错误,我需要删除它们。
【解决方案2】:

我会这样做。
在调用 sub 时包含 On Error GoTo Handler:

一旦这些子程序在RunAll will take over 中引发错误On Error(因为如果子程序缺少错误处理程序,它将尝试使用调用子程序的错误处理程序)并且其GoTo 将跳过所有内容,直到它看到Handler

请记住,在Handler 之前您需要包含Exit Sub,否则Handler 中的VBA 将被使用,无论您是否有错误。

这是一个“失败”的例子:

Sub RunAll()
    On Error GoTo Handler
    Call A
    Call B
    Exit Sub
Handler:
        Debug.Print "testing"
End Sub

一个

Sub A()
    Dim fail As Integer

    fail = 1 / 1
End Sub

B

Sub B()
    Dim fail As Integer

    fail = 1 / 0
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2017-08-24
    • 2012-03-03
    相关资源
    最近更新 更多