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中都要写一遍,有没有比较省心的方式。谢谢大家。
On Error GoTo Sub1Err
'将卡中数据删除
Dim Mgr As Card
Set Mgr = New Card
Exit Sub
Sub1Err:
MsgBox Err.Description
End Sub以上的关于错误的处理方式,几乎在每个SUB中都要写一遍,有没有比较省心的方式。谢谢大家。
也可以用一句代替那种结构
on error resume next
这样不容易死机
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
if bChk then on error goto err
...
err:
这是我的模板
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 中就可以将发生错误的函数显示出来。
反正你的出错处理和VB默认的一样要弹出对话框等人工干预。
不过不建议。
使用外部资源不一定总是正确的(比如数据库无法连接、文件不存在等),但是这些错误能设法避免,就是事先判断它们的连通性和存在性(比如数据库无法连接可使用winsck先试连服务器、文件不存在可使用dir函数先判断等)。但是确实存在一些无法预知(那就谈不上判断了)的情况存在,比如存在这样的逻辑:某控制因子无法将它列举完全,那我们也没有办法对每个因子进行判断识别了,那就可能要用到on error语句了。或者有时,为了简化过程,我们也可以只针对我们感兴趣的因子进行判断,然后其余的统统地将它抛到错误处理里