Excel VBA中的嵌套错误处理

时间:2017-10-02 15:34:56

标签: excel-vba error-handling vba excel

我正在尝试在Excel VBA中的错误处理程序中运行错误处理程序,但第二个错误处理程序从不运行。它只是给我一个错误信息。这是我的代码。

Sub func()
   On Error GoTo error1 
   'code
   Exit Sub

error1:
   On Error GoTo error2
   'code
   Resume Next

error2:
   'code
   Resume Next

基本上,该函数可能会遇到2个可能的错误。我尝试运行代码,如果它遇到错误,它会尝试修复error1,如果失败,那么error2将修复它。调试适用于error1,但如果error2是问题,则代码将失败。

1 个答案:

答案 0 :(得分:0)

这是基于密码char:

抛出两个特定错误的方法
Sub Bar()

    Dim password As String

    On Error GoTo err1

    password = "asd^"

    If InStr(1, password, "&") Then Err.Raise 9990, Description:="No &!"
    If InStr(1, password, "^") Then Err.Raise 9991, Description:="No ^!"

    Exit Sub
err1:

Select Case Err.Number
    Case 9990:
        Debug.Print Err.Description
    Case 9991:
        Debug.Print Err.Description & ":("
End Select

End Sub

正如@Darren Bartup-Cook在评论中所提到的,使用-1这是一种可行的方法。但是,强烈建议,除非您不想出于自己的原因编写错误的代码:

Sub Bar()

    On Error GoTo err1
    Debug.Print 0 / 0
    Exit Sub

err1:

    Debug.Print "err1"
    On Error GoTo -1
    On Error GoTo err2

    Debug.Print 5 / 0
    Debug.Print "Just testing..."

err2:
    Debug.Print "err2"

End Sub

有很多更好的方法可以做到,如果你想捕获2个错误,请尝试以下方法:

Sub Bar()

    On Error GoTo err1

    Debug.Print 4 / 0

    On Error Resume Next
    Exit Sub

err1:
    Select Case Err.Number

    Case 6:
        Debug.Print "Overflow!"
    Case 11:
        Debug.Print "Division by 0 error!"
    Case Else:
        Debug.Print "Another error!"
    End Select

End Sub

它会捕获Div/0Overflow,并在即时窗口中为您提供有关它们的信息。