Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 10922|回复: 11

[已解决][求助]On error goto 0

[复制链接]
发表于 2009-10-16 15:21 | 显示全部楼层 |阅读模式
err.clear和On error goto 0有啥区别?[em04]
最佳答案
2009-10-16 15:37

先介绍On Error Goto AAA语句,即当有错误发生的时候不提示错误,即刻执行AAA标签后的语句。

On Error Resume Next 即不提示错误,直接执行错误语句的下一句。

On Error Goto 0,停止错误处理(默认情况),当有错误时会中断程序,提示错误信息并将程序停留在错误的那一句语句。

Err.Clear即清除 Err 对象的所有属性设置。

默认情况下当有错误发生的时候,中断程序,提示错误信息并将程序停留在错误的那一句语句。这时候Err.Clear是没有办法执行的。

只有当设置为On Error Goto AAAOn Error Resume Next时,由于可以执行下一句,Err.Clear才显得有价值,看下面Test和Test2:

Test执行到第二句就停下了,执行不到Err.Clear。Test2可以继续执行,可以观察错误号的变化。

Sub test()
    On Error GoTo 0
    Sheets("Sheet123").Select
    Err.Clear
End Sub
Sub test2()
    On Error Resume Next
    MsgBox Err.Number
    Sheets("Sheet123").Select
    MsgBox Err.Number
    Err.Clear
    MsgBox Err.Number
End Sub

Err.Clear消除Err属性后,可以方便我们察看那句出错。

[此贴子已经被作者于2009-10-16 15:40:13编辑过]
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2009-10-16 15:34 | 显示全部楼层

err.clear是清除错误

on error goto 0主要是在前面代码中有用到on error resume next,on error resume next是遇到错误不提示,直接进入下一步,在后面用on error goto 0就代表了遇到错误马上报错,并中断程序执行

回复

使用道具 举报

发表于 2009-10-16 15:37 | 显示全部楼层    本楼为最佳答案   

先介绍On Error Goto AAA语句,即当有错误发生的时候不提示错误,即刻执行AAA标签后的语句。

On Error Resume Next 即不提示错误,直接执行错误语句的下一句。

On Error Goto 0,停止错误处理(默认情况),当有错误时会中断程序,提示错误信息并将程序停留在错误的那一句语句。

Err.Clear即清除 Err 对象的所有属性设置。

默认情况下当有错误发生的时候,中断程序,提示错误信息并将程序停留在错误的那一句语句。这时候Err.Clear是没有办法执行的。

只有当设置为On Error Goto AAAOn Error Resume Next时,由于可以执行下一句,Err.Clear才显得有价值,看下面Test和Test2:

Test执行到第二句就停下了,执行不到Err.Clear。Test2可以继续执行,可以观察错误号的变化。

Sub test()
    On Error GoTo 0
    Sheets("Sheet123").Select
    Err.Clear
End Sub
Sub test2()
    On Error Resume Next
    MsgBox Err.Number
    Sheets("Sheet123").Select
    MsgBox Err.Number
    Err.Clear
    MsgBox Err.Number
End Sub

Err.Clear消除Err属性后,可以方便我们察看那句出错。

[此贴子已经被作者于2009-10-16 15:40:13编辑过]
回复

使用道具 举报

 楼主| 发表于 2009-10-16 15:42 | 显示全部楼层

QUOTE:
以下是引用零点★沉思在2009-10-16 15:34:00的发言:

err.clear是清除错误

on error goto 0主要是在前面代码中有用到on error resume next,on error resume next是遇到错误不提示,直接进入下一步,在后面用on error goto 0就代表了遇到错误马上报错,并中断程序执行

我举例一下,比如我有这样的代码:

Sub test()
    Dim a As Byte
    On Error resume next    
    a = InputBox("test")
    '输入-3,会导致错误


    on error goto 0

    'err.clear这里我用err.clear替换上面的语句达到效果一样.应该是清除了错误才对呀

    '可以在后面再来一次错误来验证

a = InputBox("test")'输入负数
End Sub

那么 on error goto 0也达到了清楚错误的目的

不过我好像想到一点不同,就是err.clear之前是必须有on error的处理

回复

使用道具 举报

 楼主| 发表于 2009-10-16 15:43 | 显示全部楼层

QUOTE:
以下是引用amulee在2009-10-16 15:37:00的发言:

先介绍On Error Goto AAA语句,即当有错误发生的时候不提示错误,即刻执行AAA标签后的语句。

On Error Resume Next 即不提示错误,直接执行错误语句的下一句。

On Error Goto 0,停止错误处理(默认情况),当有错误时会中断程序,提示错误信息并将程序停留在错误的那一句语句。

Err.Clear即清除 Err 对象的所有属性设置。

默认情况下当有错误发生的时候,中断程序,提示错误信息并将程序停留在错误的那一句语句。这时候Err.Clear是没有办法执行的。

只有当设置为On Error Goto AAAOn Error Resume Next时,由于可以执行下一句,Err.Clear才显得有价值,看下面Test和Test2:

Test执行到第二句就停下了,执行不到Err.Clear。Test2可以继续执行,可以观察错误号的变化。

Sub test()
    On Error GoTo 0
    Sheets("Sheet123").Select
    Err.Clear
End Sub
Sub test2()
    On Error Resume Next
    MsgBox Err.Number
    Sheets("Sheet123").Select
    MsgBox Err.Number
    Err.Clear
    MsgBox Err.Number
End Sub

Err.Clear消除Err属性后,可以方便我们察看那句出错。


多谢阿木,这下就更清楚了

[em04]
回复

使用道具 举报

发表于 2009-10-16 15:49 | 显示全部楼层

在处理错误之后使用 Clear 来清除 Err 对象,例如,在对 On Error Resume Next 使用拖延错误处理时就可使用 Clear。每当执行下列语句时就会自动调用 Clear 方法:

  • 任意类型的 Resume 语句。

  • Exit Sub, Exit Function, Exit Property

  • 任何 On Error 语句。
回复

使用道具 举报

 楼主| 发表于 2009-10-16 15:52 | 显示全部楼层

多谢各位的关注!

[em04]
回复

使用道具 举报

发表于 2009-10-16 16:57 | 显示全部楼层

学习下。。。。。。。。。。。。。

回复

使用道具 举报

发表于 2009-10-17 06:00 | 显示全部楼层

学习[em02][em02]
回复

使用道具 举报

发表于 2012-3-3 22:57 | 显示全部楼层
amulee 发表于 2009-10-16 15:37
先介绍On Error Goto AAA语句,即当有错误发生的时候不提示错误,即刻执行AAA标签后的语句。On Error Resum ...

阿木老师讲解得非常好,学习!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-13 21:43 , Processed in 0.263161 second(s), 5 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表