在(VBScript/VBA)編程中有三種類型的錯誤:
- 語法錯誤
- 運行時錯誤
- 邏輯錯誤
語法錯誤
語法錯誤(也稱為解析錯誤)發生在VBScript的解釋時間。 例如,下面一行導致語法錯誤,因為它缺少一個右括號。
Function ErrorHanlding_Demo() dim x,y x = "Yiibai Yiibai" 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
邏輯錯誤
邏輯錯誤可能是最難追查的錯誤類型。這些錯誤不是語法或運行時錯誤的結果。 相反,當您在驅動腳本的邏輯中犯了一個錯誤,並且沒有得到預期的結果時,就會發生這種情況。
你可能無法捕捉到這些錯誤,因為這取決於業務需求,在程序中加入什么類型的邏輯。
例如,將一個數字除以零,或寫入一個進入無限循環的腳本。
Error對象
假設我們有一個運行時錯誤,那么通過顯示錯誤信息來停止執行。作為開發人員,如果想捕獲錯誤,那么使用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 | 啟用在所需的行參數中指定的行開始的錯誤處理例程。指定的行必須與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