[英]Nested Error Handling in Excel VBA
我試圖在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是問題,則代碼只會失敗。
這是根據密碼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
這是使用-1
一種可能方法,如@Darren Bartup-Cook在評論中所述。 但是, 強烈建議不要這樣做,除非您由於自己的原因不想編寫錯誤的代碼:
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
,並在立即窗口中提供有關它們的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.