- VBA 教程
- VBA - 首页
- VBA - 概述
- VBA - Excel 宏
- VBA - Excel 术语
- VBA - 宏注释
- VBA - 消息框
- VBA - 输入框
- VBA - 变量
- VBA - 常量
- VBA - 运算符
- VBA - 决策
- VBA - 循环
- VBA - 字符串
- VBA - 日期和时间
- VBA - 数组
- VBA - 函数
- VBA - 子过程
- VBA - 事件
- VBA - 错误处理
- VBA - Excel 对象
- VBA - 文本文件
- VBA - 图表编程
- VBA - 用户窗体
- VBA 有用资源
- VBA - 快速指南
- VBA - 有用资源
- VBA - 讨论
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
逻辑错误
逻辑错误可能是最难追踪的错误类型。这些错误不是语法或运行时错误的结果。相反,当您在驱动脚本的逻辑中犯错并且没有得到预期的结果时,就会发生这些错误。
您无法捕获这些错误,因为它取决于您的业务需求,您希望在程序中使用哪种类型的逻辑。
例如,将数字除以零或编写一个进入无限循环的脚本。
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 }
序号 | 关键字及描述 |
---|---|
1 |
GoTo line 启用从 required line 参数中指定的行开始的错误处理例程。指定行必须与 On Error 语句位于同一过程中,否则会发生编译时错误。 |
2 |
GoTo 0 禁用当前过程中启用的错误处理程序并将其重置为 Nothing。 |
3 |
GoTo -1 禁用当前过程中启用的异常并将其重置为 Nothing。 |
4 |
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
广告