ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 25979|回复: 10

[求助] 求问:On Error GoTo 0 的用法?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-3-9 17:20 | 显示全部楼层 |阅读模式
求问:On Error GoTo 0 的用法?

TA的精华主题

TA的得分主题

发表于 2005-3-9 20:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

让我们先看一段语句,例如在过程中有这么一段

On Error Resume Next Range("a1") = Application.WorksheetFunction.Match(1, 3)

Range("a1") = Application.WorksheetFunction.Match(1, 3) On Error GoTo 0 Range("a1") = Application.WorksheetFunction.Match(1, 3)

我们看到,三句语句是一样的,同时我们也知道,这句语句是错误的

但是让我们看看结果吧,前面的两个不会给出错误信息,

而最后一个会出现一个错误。

结论:主要的作用在于当过程中用到了ON ERROR RESUME NEXT(GOTO ...) 之后,

取消用户的错误处理。

以上为个人理解,不知对否,还请校正!

[此贴子已经被作者于2005-3-10 9:18:06编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-3-10 09:19 | 显示全部楼层
以下是引用清风_ll在2005-3-9 20:27:00的发言:

让我们先看一段语句,例如在过程中有这么一段

结论:主要的作用在于当过程中用到了ON ERROR RESUME NEXT 之后,

重新恢复错误处理

以上为个人理解,不知对否,还请校正!

下面例程进一步说明了上面的见解明确不误:

Sub DisplayCalendar() Dim olApp As Object Dim olNs As Object On Error Resume Next Set olApp = GetObject(, "Outlook.Application") If Err.Number = 429 Then Set olApp = CreateObject("Outlook.application") End If On Error GoTo 0 Set olNs = olApp.GetNamespace("MAPI") If olApp.ActiveExplorer Is Nothing Then olApp.Explorers.Add _ (olNs.GetDefaultFolder(9), 0).Activate Else Set olApp.ActiveExplorer.CurrentFolder = _ olNs.GetDefaultFolder(9) olApp.ActiveExplorer.Display End If Set olNs = Nothing Set olApp = Nothing End Sub

The GetObject function will raise an error if there is no existing instance of Outlook, so we used On Error Resume Next to ignore that error. Then we tested for the specific error, and if the error was raised, we used CreateObject. We reset error handling with On Error GoTo 0 so that we don't disguise any errors later in the procedure.(恢复错误捕捉以不再规避任何错误)

[此贴子已经被作者于2005-3-10 9:23:34编辑过]

TA的精华主题

TA的得分主题

发表于 2005-3-9 19:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

EXCEL帮助中的一段:

On Error GoTo 0 停止在当前过程中处理错误。即使过程中包含编号为 0 的行,它也不把行 0 指定为处理错误的代码的起点。如果没有 On Error GoTo 0 语句,在退出过程时,错误处理程序会自动关闭。

在错误未发生的时候,为了防止错误处理程序代码运行,请像在下段程序中那样,在紧靠着错误处理程序的前面写入 Exit Sub、Exit Function Exit Property 语句。

Sub InitializeMatrix(Var1, Var2, Var3, Var4) On Error GoTo ErrorHandler . . . Exit SubErrorHandler: . . . Resume NextEnd Sub

此处,错误处理程序代码在 Exit Sub 语句之后,而在 End Sub 语句之前,从而与过程中的流程分开。错误处理程序代码可以在程序中的任何地方写入。

TA的精华主题

TA的得分主题

发表于 2009-10-17 16:25 | 显示全部楼层
前面几位都写得复杂了一点.
     可能问这个问题的用户,其他的application等不懂.问题反而更多了

TA的精华主题

TA的得分主题

发表于 2009-10-17 17:30 | 显示全部楼层
发生错误时,不运行错误处理程序,只显示错误提示信息,中断运行。
可用在on error resume next之后,使错误处理块无效。
举例如多个错误发生,用on error resume next 则忽略错误,而在第一个错误后加入on error goto 0
则第一个错误忽略,但遇到第二个错误,则显示错误信息并终止程序。


不知道我这样说法对不对.
我个人总结的.

TA的精华主题

TA的得分主题

发表于 2012-3-3 22:48 | 显示全部楼层
良凤精品 发表于 2009-10-17 17:30
发生错误时,不运行错误处理程序,只显示错误提示信息,中断运行。
可用在on error resume next之后,使错误处 ...

有道理,通俗易懂!

TA的精华主题

TA的得分主题

发表于 2016-4-21 12:10 | 显示全部楼层
良凤精品 发表于 2009-10-17 17:30
发生错误时,不运行错误处理程序,只显示错误提示信息,中断运行。
可用在on error resume next之后,使错误 ...

相当易懂经验之谈

TA的精华主题

TA的得分主题

发表于 2016-4-21 12:13 | 显示全部楼层
良凤精品 发表于 2009-10-17 17:30
发生错误时,不运行错误处理程序,只显示错误提示信息,中断运行。
可用在on error resume next之后,使错误 ...

哇,居然没想到在7年之后能学习到!不知道目前的您成长如何了哈哈哈

TA的精华主题

TA的得分主题

发表于 2017-2-20 11:19 | 显示全部楼层
三楼的例子
Sub DisplayCalendar()
Dim olApp As Object
Dim olNs As Object
On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If Err.Number = 429
Then Set olApp = CreateObject("Outlook.application")
End If
On Error GoTo 0
Set olNs = olApp.GetNamespace("MAPI")
If olApp.ActiveExplorer Is Nothing Then olApp.Explorers.Add _
(olNs.GetDefaultFolder(9), 0).Activate Else Set olApp.ActiveExplorer.CurrentFolder = _ olNs.GetDefaultFolder(9) olApp.ActiveExplorer.Display
End If
Set olNs = Nothing
Set olApp = Nothing
End Sub

The GetObject function will raise an error if there is no existing instance of Outlook,
so we used On Error Resume Next to ignore that error.
Then we tested for the specific error, and if the error was raised, we used CreateObject.
We reset error handling with On Error GoTo 0 so that we don't disguise any errors later in the procedure.

On Error Resume Next 忽略后续代码的报错
On Error GoTo 0 恢复默认的状态,即不再掩饰后续代码的错误
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-4 18:38 , Processed in 0.027183 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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