OptionExplicit Private m_Continue AsBoolean Private m_MessageString AsString Private m_DisplayDetailErrInfo AsBoolean PublicEvent onError() '解析错误对象 'DefaultMessageString:显示的提示消息,如果为空则显示缺省消息 'frm:处理卸载窗体,可选 PublicFunction Parse()Function Parse(Optional DefaultMessageString AsString, Optional frm As Form) SelectCase Err.Number Case0 m_Continue =False CaseElse If IsMissing(DefaultMessageString) OrLen(DefaultMessageString) =0Then If m_DisplayDetailErrInfo Then MsgBox MergeMessage(DefaultMessage), vbCritical, "提示" Else MsgBox DefaultMessage, vbCritical, "提示" EndIf Else If m_DisplayDetailErrInfo Then MsgBox MergeMessage(DefaultMessageString), vbCritical, "提示" Else MsgBox DefaultMessageString, vbCritical, "提示" EndIf EndIf IfNot IsMissing(frm) Then ExitForm frm EndIf m_Continue =True RaiseEvent onError EndSelect Err.Clear End Function '处理完错误后是否进行其他处理 PublicProperty Get()PropertyGet Continue() AsBoolean Continue = m_Continue End Property '缺省消息 PublicProperty Get()PropertyGet DefaultMessage() AsString DefaultMessage = m_MessageString End Property PublicProperty Let()Property Let DefaultMessage(ByVal MessageString AsString) m_MessageString = MessageString End Property '卸载窗口 PublicSub ExitForm()Sub ExitForm(frm As Form) IfNot frm IsNothingThen Unload frm End Sub '是否显示错误消息 PublicProperty Get()PropertyGet DisplayDetailErrInfo() AsBoolean DisplayDetailErrInfo = m_DisplayDetailErrInfo End Property PublicProperty Let()Property Let DisplayDetailErrInfo(ByVal Display AsBoolean) m_DisplayDetailErrInfo = Display End Property '合并消息 PrivateFunction MergeMessage()Function MergeMessage(Message AsString) AsString MergeMessage = MergeString("消息:"& Message, vbCrLf, "编号:", Err.Number, vbCrLf, "说明:", Err.Description) End Function '合并字符串 PrivateFunction MergeString()Function MergeString(ParamArray arg()) AsString Dim i AsInteger For i =0ToUBound(arg()) MergeString = MergeString & arg(i) Next End Function PrivateSub Class_Initialize()Sub Class_Initialize() Me.DefaultMessage ="数据产生冲突,请重新进入该功能." Me.DisplayDetailErrInfo =False End Sub '退出整个系统 PublicSub ExitSystem()Sub ExitSystem() MsgBox"产生致命错误,系统即将关闭.", vbCritical, "提示" End End Sub
测试代码:
DimWithEvents eh As ErrorHelper PrivateSub Command1_Click()Sub Command1_Click() #If ErrorOnOff =0Then OnErrorGoTo onErrors #EndIf Err.Raise 100 MsgBox"OK" onErrors: eh.Parse 'If eh.Continue Then eh.ExitSystem 'If eh.Continue Then Resume Next End Sub PrivateSub eh_onError()Sub eh_onError() Unload Me End Sub PrivateSub Form_Load()Sub Form_Load() Set eh =New ErrorHelper End Sub
今天还是修改原先VB6处理的程序,在错误处理方面需要一些改进,弄了一个ErrorHelper的类,还是有点用处的,存到这里吧.Option ExplicitPrivate m_Continue As BooleanPrivate m_MessageString As StringPrivate m_DisplayDetailErrInfo As BooleanPublic Event onEr...