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