B.On Error GoTo 0 这条语句执行后会当前活动过程中之前建立的错误机制。 如果是调用的子过程中出错,请参考上节最后的测试代码,一定要F8加深理解。 发生运行错误后依旧还是系统弹出一个消息框,让用户做出选择。 注意: 即使过程中包含编号为 0 的行,它也不把行 0 指定为处理错误的代码的起点。
如上图,过程中有定义0行,0行代码是显示一个消息框,标题为错误号,提示信息为错误描述信息。但是实际上错误产生时是不会跳转到0行。 如果没有 On Error GoTo 0 语句,在退出过程时,错误处理程序会自动关闭。
C.On Error goto Line Line必备参数,可以是任何行标签或行号。 如果发生一个运行时错误,则代码则会会跳到 line,激活错误处理程序。 指定的 line 必须在一个过程中,这个过程与 On Error 语句相同,否则会发生编译时间错误,如下图:
但是可以在错误处理程序中调用其他过程,如下图:
注意: 1>当在错误处理程序中再次产生运行错误,则不会发生跳转,系统直接弹出错误消息框。如下图演示。
所以在错误处理程序中如果有一些相关操作有可能触发错误的情况下可以先加上On Error Resume Next。 2>错误处理程序代码可以在程序中的任何地方写入。
推荐错误处理程序代码在 Exit Sub 语句之后,而在 End Sub 语句之前,从而与过程中的流程分开。 3>当处理在访问其它对象期间产生的错误时,与其使用 On Error GoTo 指令,不如使用 On Error Resume Next。
每次和对象打交道,在不知道用代码访问哪个对象时,检查一下 Err 都会打消这种疑虑。
可以确定是哪个对象产生错误(Err.Source 中指定的对象),也可以确定是哪个对象将错误代码放在 Err.Number 中。 4>错误处理程序依靠 Err 对象的 Number 属性中的值来确定错误发生的原因。 5>调用动态链接库 (DLL) 期间产生的系统错误不会产生例外情况,也不会被 Visual Basic 的错误捕获操作所捕获。
当调用 DLL 函数时,应该(根据 API 的详细说明)检查每一个返回值以确定是成功还是失败,
如果失败,则检查 Err 对象的 LastDLLError。
|