困惑在VB6错误处理和使用上的错误转到的

我需要解决一些旧VB6代码,我感到困惑的使用“在错误”的。 在下面的例子,如果我周围的代码,我想用在错误转到和ErrHandler1测试的特定行,就是只能行的测试。 或由零鸿沟被列入如果是在同一子?

On Error GoTo ErrHandler1 If Not Exists(BaseDirectory + "\ARCHIVE") Then _ MkDir BaseDirectory + "\ARCHIVE" ErrHandler1: Call MsgBox(Err.Number & vbCrLf & Err.Description, vbExclamation, App.Title) intValue1 = 12 intValue2 = 0 intValue3 = intValue1 / intValue

谢谢。

--------------解决方案-------------

零的鸿沟将被列入与处理,它可能会在您的样品中环...

正确的做法是这样的

On Error GoTo ErrHandler1
If Not Exists(BaseDirectory + "\ARCHIVE") Then _
MkDir BaseDirectory + "\ARCHIVE"

On Error Goto 0 'this will un-hook you error handler

intValue1 = 12
intValue2 = 0
intValue3 = intValue1 / intValue 'this will be an un-managed error

Exit Sub 'this make sure that msgbox is shown only when the error happens

ErrHandler1:
Call MsgBox(Err.Number & vbCrLf & Err.Description, vbExclamation, App.Title)

除零如果MKDIR不导致抛出一个错误才处理。

这就是说它会循环到ErrHandler1标签和其他错误会从被零除再次将不会被处理,因为你不能嵌套错误其他错误处理程序中处理产生的。

该代码因此,因为它代表,错误处理程序应该下来代码进一步移动(下文退出子),以确保它只能被调用一次,是没有意义的:

On Error Goto ErrHandler1

'some code

exit sub
ErrHandler1:
msgbox "There was an error"

如果你想单独处理两种操作,你可以这样做:

On Error GoTo ErrHandler1
If Not Exists(BaseDirectory + "\ARCHIVE") Then _
MkDir BaseDirectory + "\ARCHIVE"

DoCalc:
On Error GoTo Errhandler2
intvalue1 = 12
intvalue2 = 0
intvalue3 = intvalue1 / intvalue

Exit Sub

ErrHandler1:
Call MsgBox("Error making directory - " & Err.Number & vbCrLf & Err.Description, vbExclamation, App.Title)
Resume DoCalc:

Errhandler2:
Call MsgBox("Error doing arithmetic - " & Err.Number & vbCrLf & Err.Description, vbExclamation, App.Title)

一个 goto错误处理程序是一个程序的顶部是良好的编程风格,应该是错误的处理大多数程序的最低金额。 但是它比行代码,可能导致错误后检查错误不太灵活。 当在一个相当简单的程序添加错误处理我用的是对错误转到 ...语句和一个包罗万象的错误处理程序在日常的底部。

On Error GoTo procErrorHandler

If Not Exists(BaseDirectory + "\ARCHIVE") Then
MkDir BaseDirectory + "\ARCHIVE"
End If

intvalue1 = 12
intvalue2 = 0
intvalue3 = intvalue1 / intvalue

ProcExit:
Exit Sub

procErrorHandler:
Call MsgBox("There was an error in the procedure. Error " & CStr(Err.Number) & ", " & Err.Description, vbExclamation, App.Title)
Resume ProcExit ' A chance to do any cleanup needed

我没有多goto语句的粉丝,因为它使代码难以阅读和遵守。 在过程中我在哪里执行几个步骤,我想回到更准确地描述了代码出了错,或者在一个情况下,我可能有机会从错误中恢复,并继续一个错误,我禁用了包罗万象的类型的错误处理和关键步骤后检查Err.Number的属性。 如果我修改马特的错误处理我编写程序代码这种方式。

On Error Resume Next

If Not Exists(BaseDirectory + "\ARCHIVE") Then
MkDir BaseDirectory + "\ARCHIVE"
End If
' check for errors making the directory
If Err.Number <> 0 Then
Call MsgBox("Error making directory - " & Err.Number & vbCrLf & Err.Description, vbExclamation, App.Title)
End If

intvalue1 = 12
intvalue2 = 0
intvalue3 = intvalue1 / intvalue
' check for errors getting intvalue3
If Err.Number <> 0 Then
Call MsgBox("Error doing arithmetic - " & Err.Number & vbCrLf & Err.Description, vbExclamation, App.Title)
End If

Exit Sub

分类:VB6 时间:2012-01-01 人气:2
本文关键词: VB6,错误处理
分享到:

相关文章

  • 如何实现全球VB6错误处理程序? 2014-11-01

    在以下链接中提到的全球VB6错误处理产品声称"安装一个小的回调勾入VBE6调试器": http://www.everythingaccess.com/simplyvba/globalerrorhandler/howitworks.htm 我想实现这个产品自己,因为我想在什么它做更多的控制. 怎么可能是上述产品中获得什么呢? --------------解决方案------------- 你正在寻找的产品是一个COM组件. 从可在网站上的文档,这听起来像COM组件实现特定组件类. 首先要

  • 有什么更好的方式来处理VB6错误 2012-07-17

    我有VB6应用程序,我想提出一些好的错误处理finction它可以告诉我什么是错误和详细的地方,当它发生了,任何人都可以提出好的办法做到这一点 --------------解决方案------------- ON ERROR GOTO 而 Err 目的. 看到这个讨论. 首先,去获得MZTools的Visual Basic 6,它的自由和宝贵. 二加在每个功能的自定义错误处理程序(是的,每一个功能). 我们使用的错误处理程序看起来是这样的: On Error GoTo {PROCEDURE_NA

  • VB6错误 - 无法加载.ocx文件 2013-09-20

    我一直在试图加载一个OCX文件到我的VB6项目最多的一天,今天之一. 我试着检查注册表中最好的,我知道该怎么COM注册,并使用REGSVR32上的文件都无济于事尝试几次. 所有我一直从VB6获得当我尝试加载组件(在项目 - >组件)是"文件路径\ FileName.ocx'无法加载. 有其他人看到此之前,如果是这样,任何想法如何解决呢? --------------解决方案------------- 这也可能是一个依赖问题 - 需要的OCX一些其它组件不存在. 的Dependency Wa

  • 隐藏在VB6错误信息 2013-10-21

    孤单是一种隐藏VB6的错误? 我有一个程序,提示出错,但一切顺利. 任何帮助将得到高度赞赏. 谢谢UPD的代码: Set WshShell = CreateObject("WScript.Shell") 'passing the values to program2 strCommand = """" & App.Path & "\Prog2.exe """ & strArgs(0)

  • VB6错误50003意外错误:是解决重新注册DLL文件? 2014-08-02

    如果一个VB6应用程序的执行过程中显示的上述错误,是解决重新注册,这可能是访问的时间的DLL? 或者,这是关于DLL的不是正确版本的问题? --------------解决方案------------- 我见过之前,控件(OCX)这个错​​误. 它通常可以通过重新编译了最新版本的程序解决. 如果这不是问题,我找到一个很好的穷举法来清理注册表,并检查您已经安装了正确的版本是简单地删除DLL的问题(或只是将其重命名),然后使用工具像CClean删除孤立的条目. 我承认这是一个大锤敲碎坚果. 您可能要

  • 用VB6错误sqlite3的ODBC驱动程序 2014-09-04

    我使用的是SQLite的ODBC驱动程序(从这里http://www.ch-werner.de/sqliteodbc/)与我的VB6应用程序. 一切工作正常,就检索和保存数据,但是,如果我试图让表列的列表中,通过以下命令: pragma table_info (myTableName) 在ADO调用失败,2错误(Connection.Errors属性中找到) 错误#1:说明:"多步OLE DB操作生成的错误检查每个OLE DB状态值,如果有没有工作已完成." :字符串:cMisData

  • VB6错误传播 2013-09-19

    我用我的主要调用过程的错误处理程序,并让其他程序只是卷起到错误处理程序. 我应该每次清除错误? 或者我应该退出让错误处理程序继续在End Sub子呢? 我这么问是因为我读过,我可以赶上第一个错误,然后其他错误将不会被处理. 很抱歉,如果这是不到清楚. 真的不知道我在说什么. 谢谢!! 编辑:像这样的东西. 这是必要的吗? Public Sub SubA() On Error Goto ProcError ' other code MsgBox FuncA() ProcExit: Exit Sub

  • 如何重新启用默认错误处理VB6 2013-01-24

    我有一些代码,各种"对错误转到"错误处理程序在一些地方处理一些破碎的第三方硬件. 我得到了一个溢出错误(从ERR变量读取)在例行的没有一个错误陷阱,但调用,做一个常规. 我一直以为错误陷阱只有在他们被宣布常规有效的,但它看起来像一个子程序的错误可能会导致它去调用函数的错误陷阱. 所以我关掉了调用函数的错误陷阱,发现我的溢出,一切都很好. 但在此之前我这样做,我花了一些时间,试图找到一种程序化的方式来获得VB返回到程序内其默认的错误处理(这样我就不必修改外部的代码调试),但我不能. 唯一

  • 如何从一个ATL ActiveX控件同时返回一个错误字符串和错误代码,VB6? 2013-09-18

    我试图返回使用CComCoClass ::错误的详细错误VB6,但似乎我只能返回错误代码/或/消息 - 但不能同时使用. return Error(_T("Not connected"), __uuidof(IMyInterface), HRESULT_FROM_WIN32(ERROR_CONNECTION_INVALID)); 结果在一个通用的"对象"IMyInterface的"方法​​"要求"失败"的错误消息Err.Des

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 3.229 (s). 10 q(s)