VBA錯誤處理
有三種類型的編程錯誤:(1)語法錯誤和(b)運行時錯誤(三)邏輯錯誤。
語法錯誤
語法錯誤,也被稱為解析錯誤,發生在VBScript解釋的時候。例如,下麵的一行將導致一個語法錯誤,因為它缺少一個右括號:
Function ErrorHanlding_Demo() dim x,y x = "Yiibai" y = Ucase(x End Function
運行時錯誤
在執行過程中運行時錯誤,也被稱為異常,發生解釋後。
例如,下麵的行導致運行時錯誤,因為這裡的語法是正確的,但在運行時,它試圖調用乘法,這是一個不存在的功能:
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 }
關鍵字 | 描述 |
---|---|
GoTo line | 可允許在需要的行參數指定的行開始的錯誤處理例程。指定的行必須在相同的過程中On Error語句,否則將發生編譯時錯誤。 |
GoTo 0 | 禁用啟用的錯誤處理當前過程中,並重置為Nothing。 |
GoTo -1 | 在當前過程中禁用啟用例外,它重置為Nothing。 |
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