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