VBA错误处理
VBA錯誤的三種類型
- 語法錯誤:輸入代碼不符合VBA編寫規范;
- 運行時錯誤:程序運行時發生的錯誤;
- 邏輯錯誤:語法和運行都沒問題,結果不正確;
這里講的錯誤主要是運行時的錯誤;
錯誤捕獲和處理
VBA中使用On Error語句捕獲錯誤,該語句用于啟動一個錯誤處理程序并指定該子程序在一個過程中的位置,或者用來禁止一個錯誤處理程序。
如果不使用On Error語句,運行時的任何錯誤都會顯示錯誤信息、終止程序;
錯誤處理程序依靠Err對象的Number屬性中的值來確定錯誤發生的原因;在其他任何錯誤發生之前,或在調用一個可能會導致錯誤發生的過程之前,錯誤處理程序應該先測試或存儲Err對象中相關的屬性值。Err對象中的屬性值只反映最近發生的錯誤。Err.Description中包含有與Err.Number相關聯的錯誤信息。
Err.Number值介紹:
引用Err對象等同于訪問Err.Number屬性,MsgBox Err和MsgBox Err.Number是等同的;
On Error語句
- On Error GoTo line:
啟動錯誤處理程序,如果發生一個運行時錯誤,則會跳到line標號處開始執行錯誤處理程序。標號line必須位于與On Error語句相同的過程中,否則會發生編譯時間錯誤。這個line也可以是其他命名;
案例:打開工作簿處理
Function workbook_open(file_path As String) ' 打開工作簿 Dim wb As Workbook On Error Resume Next ' 遇到錯誤,跳過 Set wb = Workbooks.Open(file_path)If Err <> 0 Then ' 如果打開工作簿報錯,直接結束程序,不運行下面代碼Exit Function End If Debug.Print "處理工作表的其他邏輯" End Sub- On Error Resume Next:
如果一個運行時錯誤發生,程序會轉到發生錯誤語句的下一條語句,并在此繼續運行。訪問對象時要使用這種形式而不使用On Error GoTo。類似于python總的pass.
- On Error GoTo 0:
禁止當前過程中任何已啟動的錯誤處理程序。如果沒有On Error GoTo 0語句,則在退出過程時,錯誤處理程序會自動關閉。
在錯誤未發生時,為了防止錯誤處理程序代碼繼續運行,一般在緊靠著錯誤處理程序的前面寫入ExitSub、Exit Function或Exit Property語句。
Resume語句
- Resume:
如果錯誤和錯誤處理程序出現在同一個過程中,則從產生錯誤的語句處恢復運行。如果錯誤出現在被調用的過程中,則從最近一次調用包含錯誤處理程序的過程的語句處恢復運行。 - Resume Next:
如果錯誤和錯誤處理程序出現在同一個過程中,則從緊隨著產生錯誤的語句的下一個語句處恢復運行。如果錯誤發生在被調用的過程中,則找出最后一次調用包含錯誤處理程序的過程的語句(或On ErrorResume Next語句),從緊隨該語句之后的語句處恢復運行。 - Resume line:
- 錯誤處理程序運行結束后,跳轉到標號line處恢復運行。line必須和錯誤處理程序在同一個過程中。
非代碼內容提煉自《精通Excel VBA》- 伍云輝
總結
- 上一篇: mysql8创建用户并授权_新特性解读
- 下一篇: java数组排序源码_Java 数组工具