簡體   English   中英

Excel VBA中的嵌套錯誤處理

[英]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/0Overflow ,並在立即窗口中提供有關它們的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM