
- VBA 教程
- VBA - 首頁
- VBA - 概述
- VBA - Excel 宏
- VBA - Excel 術語
- VBA - 宏註釋
- VBA - 訊息框
- VBA - 輸入框
- VBA - 變數
- VBA - 常量
- VBA - 運算子
- VBA - 決策
- VBA - 迴圈
- VBA - 字串
- VBA - 日期和時間
- VBA - 陣列
- VBA - 函式
- VBA - 子過程
- VBA - 事件
- VBA - 錯誤處理
- VBA - Excel 物件
- VBA - 文字檔案
- VBA - 圖表程式設計
- VBA - 使用者窗體
- VBA 有用資源
- VBA - 快速指南
- VBA - 有用資源
- VBA - 討論
VBA - 錯誤處理
程式設計中存在三種類型的錯誤:(a) 語法錯誤,(b) 執行時錯誤,以及 (c) 邏輯錯誤。
語法錯誤
語法錯誤,也稱為解析錯誤,發生在 VBScript 的解釋時間。例如,以下行會導致語法錯誤,因為它缺少一個閉合括號。
Function ErrorHanlding_Demo() dim x,y x = "Tutorialspoint" y = Ucase(x End Function
執行時錯誤
執行時錯誤,也稱為異常,發生在解釋後執行期間。
例如,以下行會導致執行時錯誤,因為這裡的語法是正確的,但在執行時它試圖呼叫 fnmultiply,這是一個不存在的函式。
Function ErrorHanlding_Demo1() Dim x,y x = 10 y = 20 z = fnadd(x,y) a = fnmultiply(x,y) End Function Function fnadd(x,y) fnadd = x + y End Function
邏輯錯誤
邏輯錯誤可能是最難追蹤的錯誤型別。這些錯誤不是語法或執行時錯誤的結果。相反,當您在驅動指令碼的邏輯中犯錯並且沒有得到預期的結果時,就會發生這些錯誤。
您無法捕獲這些錯誤,因為它取決於您的業務需求,您希望在程式中使用哪種型別的邏輯。
例如,將數字除以零或編寫一個進入無限迴圈的指令碼。
Err 物件
假設如果我們有一個執行時錯誤,那麼執行將停止並顯示錯誤訊息。作為開發人員,如果我們想捕獲錯誤,則使用Error物件。
示例
在以下示例中,Err.Number給出錯誤編號,Err.Description給出錯誤描述。
Err.Raise 6 ' Raise an overflow error. MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description Err.Clear ' Clear the error.
錯誤處理
VBA 啟用錯誤處理例程,也可用於停用錯誤處理例程。如果沒有 On Error 語句,發生的任何執行時錯誤都是致命的:會顯示錯誤訊息,並且執行會突然停止。
On Error { GoTo [ line | 0 | -1 ] | Resume Next }
序號 | 關鍵字及描述 |
---|---|
1 |
GoTo line 啟用從 required line 引數中指定的行開始的錯誤處理例程。指定行必須與 On Error 語句位於同一過程中,否則會發生編譯時錯誤。 |
2 |
GoTo 0 停用當前過程中啟用的錯誤處理程式並將其重置為 Nothing。 |
3 |
GoTo -1 停用當前過程中啟用的異常並將其重置為 Nothing。 |
4 |
Resume Next 指定當發生執行時錯誤時,控制權轉到發生錯誤的語句之後的語句,並從該點繼續執行。 |
示例
Public Sub OnErrorDemo() On Error GoTo ErrorHandler ' Enable error-handling routine. Dim x, y, z As Integer x = 50 y = 0 z = x / y ' Divide by ZERO Error Raises ErrorHandler: ' Error-handling routine. Select Case Err.Number ' Evaluate error number. Case 10 ' Divide by zero error MsgBox ("You attempted to divide by zero!") Case Else MsgBox "UNKNOWN ERROR - Error# " & Err.Number & " : " & Err.Description End Select Resume Next End Sub
廣告