Office中国论坛/Access中国论坛

标题: VBA能否根据不同的错误做出不同的处理? [打印本页]

作者: 网络蜘蛛    时间: 2013-4-10 11:14
标题: VBA能否根据不同的错误做出不同的处理?
每次出错时提出框上都会有一个数字,我能否根据这个数字做出不贩处理?比如:On Error 9 GoTo ...
窗体的错误事件可以接收错误数字。我这个是当一个子程序遇到错误时可否做出不同的处理?

作者: todaynew    时间: 2013-4-10 11:48
错误捕获
参阅参阅使用 On Error GoTo 语句可以捕获错误,并将过程流转向过程中错误处理语句的位置。例如,下列语句将流程转向 ErrorHandler: 标签行:

On Error GoTo ErrorHandler
               
要确保在过程中每个错误处理标签名称是唯一的,而不会与过程中的其他任何元素发生冲突;并且在名称后面追加冒号。在过程中,请将 Exit Sub 或 Exit Function 语句放置在错误处理标签前面,这样如果没有错误发生,过程将不会运行错误检查代码。

Sub CausesAnError()
    ' Direct procedure flow.
    On Error GoTo ErrorHandler
    ' Raise division by zero error.
    Err.Raise 11
    Exit Sub

ErrorHandler:
    ' Display error information.
    MsgBox "Error number " & Err.Number & ": " & Err.Description
    ' Resume with statement following occurrence of error.
    Resume Next
End Sub
               
Err 对象的 Raise 方法将生成指定的错误。Err 对象的 Number 属性返回最近一次运行时错误所对应的编号,Description 属性返回给定错误所对应的消息文本。

注释

在 Microsoft Access 1.x 和 2.0 版本中,可能已经使用 Error 语句来生成错误,使用 Err 函数来返回错误编号,使用 Error 函数来返回错误说明。依赖于 Error 语句和 Error 函数的现有错误处理代码将继续工作。不过在编写新代码时,最好使用 Err 对象及其属性和方法。
Microsoft Access 1.x 和 2.0 版本对于所有的自动化(以前称为 OLE 自动化)错误,仅返回一个错误。产生错误的 COM 组件应用程序也将返回一个错误信息,它与在该应用程序中工作时收到的错误信息相同。可能需要重写已有的错误处理代码,才能正确地处理新的“自动化”错误。
如果希望返回与 Microsoft Access 错误或数据访问对象 (DAO) 错误相关的说明性字符串,但该错误尚未在代码中实际发生,那么可以使用 AccessError 方法来返回字符串。

作者: 网络蜘蛛    时间: 2013-4-10 17:11
todaynew 发表于 2013-4-10 11:48
错误捕获
参阅参阅使用 On Error GoTo 语句可以捕获错误,并将过程流转向过程中错误处理语句的位置。例如, ...

如果一和子程序中有可能出现两种错误,比如溢出错误和数据类型不同,怎么分别处理?(我看到的都是发生错误了会怎么样,没有发生这种错误怎么样,那种错误又怎么样。)
作者: 叶海峰    时间: 2013-4-11 09:27
select case err.number
case 1
case 2
end select
作者: todaynew    时间: 2013-4-11 11:57
网络蜘蛛 发表于 2013-4-10 17:11
如果一和子程序中有可能出现两种错误,比如溢出错误和数据类型不同,怎么分别处理?(我看到的都是发生错 ...

对待错误有三种态度:其一是处理,其二是不处理,其三是避免错误。
由于错误可以分为两种:一种叫做可预见的错误,一种叫做不可预见的错误。对于可预见的错误,宜采取避免错误的态度;对于不可预见的错误又需要将其分为有处理必要的错误和没处理必要的错误,对于没有必要处理的错误,采取的态度是不处理;只有确实需要处理的错误才去处理。
按照这样的处理思路,便全然没有必要写出所有错误的处理了,除非你闲着没事干,呵呵。
作者: 叶海峰    时间: 2013-4-11 16:21
有时候,错误陷阱是一个不错的思路.




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3