位置:首頁 > 高級語言 > VBA教學 > VBA錯誤處理

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