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