我正在尝试在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是问题,则代码将失败。
答案 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/0
和Overflow
,并在即时窗口中为您提供有关它们的信息。