VBA - 错误处理

编程中有三种类型的错误:(a)语法错误,(b)运行时错误,以及(c)逻辑错误.

语法错误

语法错误,也称为解析错误,在VBScript的解释时发生.例如,以下行导致语法错误,因为它缺少右括号.

Function ErrorHanlding_Demo()
   dim x,y
   x = "Tutorialspoint"
   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

逻辑错误

逻辑错误可以是最难追查的错误类型.这些错误不是r语法或运行时错误的结果.相反,当你在驱动你的脚本的逻辑中犯了错误并且你没有得到你期望的结果时,它们会发生.

你无法捕获这些错误,因为它取决于你的业务需求你希望在你的程序中放置什么类型的逻辑.

例如,将数字除以零或写入进入无限循环的脚本.

错误对象

假设我们遇到运行时错误,则通过显示错误消息停止执行.作为开发人员,如果我们想捕获错误,则使用错误对象.

示例

在下面的示例中, 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 }


Sr.No.关键字&描述
1

GoTo行

启用从所需行参数中指定的行开始的错误处理例程.指定的行必须与On Error语句在同一过程中,否则将发生编译时错误.

2

GoTo 0

在当前过程中禁用启用的错误处理程序并将其重置为Nothing.

3

GoTo -1

禁用启用的异常在当前程序中并将其重置为Nothing.

4

继续下一步

指定当发生运行时错误时,控件在发生错误的语句之后立即转到语句,并从该点继续执行.

示例

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