【发布时间】:2010-08-02 14:54:12
【问题描述】:
我有两个程序 procA 和 procB。 procA 正在调用 procB。 procB 内发生异常。我可以在 procB 中处理异常,但我喜欢在 procA 中处理它,这是我没有开始工作的。我对 VB6 不是很熟悉,但我认为这应该是可能的,因为 MSDN 说:
如果在错误处理程序处于活动状态时发生错误(在错误发生与 Resume、Exit Sub、Exit Function 或 Exit Property 语句之间),则当前过程的错误处理程序无法处理该错误。控制返回调用过程。如果调用过程启用了错误处理程序,则激活它来处理错误。
我做错了什么?
现在是代码片段:
Private Sub procA()
On Error GoTo ErrHnd
...
procB obj
Exit Sub
ErrHnd:
MsgBox Err.Description, vbInformation, Me.caption
End Sub
Public Sub procB(ByRef rec As Object)
On Error GoTo ErrHnd
... Exception occurs within DAO Recordset Operation
Exit Sub
ErrHnd:
Select Case Err.Number
Case 3022
Err.Raise vbObjectError + 9999, Err.Source, "Error Text"
Case Else
...
End Select
End Sub
我还尝试关闭 procB 中的异常处理(On Error Goto 0),但似乎 procA 从未收到异常。
感谢您的帮助。
编辑:附加信息:
- 从 DAO.Recordset 对象引发异常。
- 我还尝试在 procB 中完成删除异常处理,但没有任何效果。
- procA 存在于另一个文件中,然后是 procB(data.cls、frmListArtikel.frm)。
解决方案:我不知道程序的执行方式会有所不同。如果我从 IDE 启动它,异常不会由 procA 处理。如果我从资源管理器中启动 EXE(之前是从 IDE 中创建的),异常会按照 procA 的要求进行处理。
【问题讨论】: