• VBA错误处理


    VBA错误处理

    作者: 无敌大衡 Java技术QQ群:227270512 / Linux QQ群:479429477

    一般函数可以写异常处理代码增加稳健性。

    on error goto 0 是默认的,遇错即中断。

    但是建议写on error goto 错误控制, 并在函数末尾加写错误控制内容。

    楼主的问题可在判断后写on error goto 0回归默认状态。

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

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

    语法错误

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

    Function ErrorHanlding_Demo()
       dim x,y
       x = "Yiibai Yiibai"
       y = Ucase(x
    End Function
    

    Vb

    运行时错误

    运行时错误(也称为异常)在执行期间发生,在解释之后。

    例如,下面的行会导致运行时错误,因为这里的语法是正确的,但是在运行时它正在尝试调用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
    

    Vb

    逻辑错误

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

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

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

    Error对象

    假设我们有一个运行时错误,那么通过显示错误信息来停止执行。作为开发人员,如果想捕获错误,那么使用Error对象。

    例子

    在下面的例子中,Err.Number给出错误号,Err.Description给出错误描述。

    Err.Raise 6   ' Raise an overflow error.
    MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
    Err.Clear   ' Clear the error.
    

    Vb

    错误处理

    VBA启用错误处理例程,也可以用来禁用错误处理例程。没有On Error语句,发生的任何运行时错误都是致命的:显示错误消息,并且执行突然停止。

    On Error { GoTo [ line | 0 | -1 ] | Resume Next }
    

    Vb

    编号 关键字 描述
    1 GoTo 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

    原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/vba/vba_error_handling.html
     

  • 相关阅读:
    04-树7 二叉搜索树的操作集
    04-树6 Complete Binary Search Tree
    04-树5 Root of AVL Tree
    04-树4 是否同一棵二叉搜索树
    05-树8 File Transfer
    05-树7 堆中的路径
    二叉树的非递归遍历(先序、中序、后序和层序遍历)
    队列的定义与操作——顺序存储和链式存储
    Maven项目的核心pom.xml解释(转)
    eclipse安装插件的三种方式
  • 原文地址:https://www.cnblogs.com/grj001/p/12225441.html
Copyright © 2020-2023  润新知