VBA错误处理

在(VBScript/VBA)编程中有三种类型的错误:

  • 语法错误
  • 运行时错误
  • 逻辑错误

语法错误

语法错误(也称为解析错误)发生在VBScript的解释时间。 例如,下面一行导致语法错误,因为它缺少一个右括号。

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

逻辑错误

逻辑错误可能是最难追查的错误类型。这些错误不是语法或运行时错误的结果。 相反,当您在驱动脚本的逻辑中犯了一个错误,并且没有得到预期的结果时,就会发生这种情况。

你可能无法捕捉到这些错误,因为这取决于业务需求,在程序中加入什么类型的逻辑。

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

rror对象

假设我们有一个运行时错误,那么通过显示错误信息来停止执行。作为开发人员,如果想捕获错误,那么使用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 }

Vb

编号关键字描述
1GoTo line启用在所需的行参数中指定的行开始的错误处理例程。指定的行必须与On Error语句在相同的过程中,否则将发生编译时错误。
2GoTo 0禁用当前过程中启用的错误处理程序并将其重置为Nothing
3GoTo -1禁用当前过程中启用的异常并将其重置为Nothing
4Resume 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 11   ' 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

 

 

 

 

 

VBA(Visual Basic for Applications)中,错误处理通常采用 `On Error` 语句块来进行。以下是几种常用的错误处理方法: 1. **Resume Next** 或 **Resume** (简写): 这个关键字告诉VBA如果当前有错误,就忽略并继续执行下一个代码行。这常用于捕获和处理特定类型的错误,然后继续执行流程。 ```vba On Error Resume Next ' 可能会出现错误的代码行 If Not IsNull(someValue) Then ' 对值进行处理 End If On Error GoTo 0 ' 结束错误处理模式 ``` 2. **GoTo label**: 使用 `GoTo` 和一个标签名可以强制程序跳转到指定位置处理错误。例如,`errorHandler` 是预先定义好的错误处理标签: ```vba On Error GoTo errorHandler ' 可能出错的代码 ' ... errorHandler: ' 执行错误处理逻辑,如记录日志或显示错误消息 ``` 3. **Try...Catch...Finally**: VBA虽然不像.NET那样内置了完整的 try-catch-finally 语法,但你可以通过嵌套语句模拟类似的功能,对错误进行分级处理: ```vba Try ' 可能出错的代码 Catch ex As Exception ' 处理错误 Debug.Print "Error: " & ex.Message Finally ' 无论是否出错,都会执行的代码(如关闭文件) End Try ``` 4. **Error Number and Description**: 在错误发生时,可以用 `Err.Number` 和 `Err.Description` 获取错误代码和描述,帮助诊断问题。 记得在完成编程后,最好使用 `On Error GoTo 0` 来关闭错误处理模式,以防意外的错误掩盖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值