Private Sub Label11_Click()
On Error GoTo Sub1Err
'将卡中数据删除
    Dim Mgr As Card
    Set Mgr = New Card
          
    Exit Sub
Sub1Err:
    MsgBox Err.Description
End Sub以上的关于错误的处理方式,几乎在每个SUB中都要写一遍,有没有比较省心的方式。谢谢大家。

解决方案 »

  1.   

    复制>粘贴 即可
    也可以用一句代替那种结构
    on error resume next
      

  2.   

    再好在on error resume next的下面加上On Error GoTo 0
    这样不容易死机
      

  3.   

    我的function/sub 都有个 头和尾巴,仅供参考。头
    Private Function LoadGeoDisplay() As Boolean'***********************************************************************************************
    'Purpose    : name
    'Inputs     :
    'Outputs    : None.
    'Version: $SSSVersion:
    'Created on : 13/03/2001
    'Created by : Patrick
    '***********************************************************************************************'-------------------------------
    '*** Generic Procedure Code
    '-------------------------------
        On Error GoTo errHandler
        Dim sModuleAndProcName As String
        sModuleAndProcName = "frmGeoAccessMgr - LoadGeoDisplay Procedure"
        
    '-------------------------------
    '*** Specific Procedure Code
    '-------------------------------尾巴
    Exit Function
    '------------------------------------------------------------
    '*** Generic Error Handling Code (ensure Exit Proc is above)
    '------------------------------------------------------------
    errHandler:    If Err.Number = 0 Then Exit Function
        LoadGeoDisplay = False
        Dim lErrNum As Long, sErrDesc As String, sErrSource As String
        lErrNum = Err.Number
        sErrDesc = Err.Description
        sErrSource = "[" & App.Title & " - " & sModuleAndProcName & " - Build " & App.Major & "." & App.Minor & "." & App.Revision
        If Erl > 0 Then sErrSource = sErrSource & " - Line No " & CStr(Erl)
        If InStr(1, Err.Source, "-->") > 0 Then
            '*** This error has already been handled by our code
            sErrSource = sErrSource & "]" & vbNewLine & "  --> " & Err.Source
        Else
            '*** Newly generated error, log it here.
            sErrSource = sErrSource & "]" & vbNewLine & "  --> [Source: " & Err.Source & "]"
            On Error Resume Next
            LogError lErrNum, sErrSource, sErrDesc
        End If
        '(ALWAYS comment out two of the three options below)
        '*** EITHER display the error here
        DisplayError lErrNum, sErrSource, sErrDesc
        '*** OR raise the error to the calling procedure
    '    Err.Raise lErrNum, sErrSource, sErrDesc
        '*** OR ignore the error and continue
        'Resume Next
    end function
      

  4.   

    每个函数都有
    if bChk then on error goto err
    ...
    err:
      

  5.   

    我一般只在事件中加on error goto (养成习惯),自定义的方法或函数不加
      

  6.   

    装一个 Mz-tools,专门有个 Error Handle 的模板,点一下按钮就加上去了(即使函数中已经有代码了)。
    这是我的模板
        On Error GoTo ErrHandler {PROCEDURE_BODY}ExitEntry:
        Exit {PROCEDURE_TYPE}
    ErrHandler:
        ErrProc STR_MODULE_NAME & ".{PROCEDURE_NAME}()"
        Resume ExitEntry
    {PROCEDURE_BODY} 就是函数中已有的代码
    {PROCEDURE_TYPE} 为当前函数的类型 Function/Sub
    {PROCEDURE_NAME} 为当前函数名称,这样通用过程 ErrProc 中就可以将发生错误的函数显示出来。
      

  7.   

    把出错的可能降到最低就可以不用写on error了,
    反正你的出错处理和VB默认的一样要弹出对话框等人工干预。
      

  8.   

    有!你可以什么都不管,使用On Error Resume Next
    不过不建议。
      

  9.   

    不很对。
    使用外部资源不一定总是正确的(比如数据库无法连接、文件不存在等),但是这些错误能设法避免,就是事先判断它们的连通性和存在性(比如数据库无法连接可使用winsck先试连服务器、文件不存在可使用dir函数先判断等)。但是确实存在一些无法预知(那就谈不上判断了)的情况存在,比如存在这样的逻辑:某控制因子无法将它列举完全,那我们也没有办法对每个因子进行判断识别了,那就可能要用到on error语句了。或者有时,为了简化过程,我们也可以只针对我们感兴趣的因子进行判断,然后其余的统统地将它抛到错误处理里