调用过程中的VB6异常处理

时间:2010-08-02 14:54:13

标签: vb6 exception-handling

我有两个程序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将根据需要处理异常。

2 个答案:

答案 0 :(得分:4)

一次只能有一个活动的错误处理程序。如果你在procb中激活,procb将处理。

您可能还需要检查编辑器设置。选择“工具>选项>常规选项卡”“中断模块”选项

代码示例1.您将在procA中收到错误6:

Private Sub Form_Load()
    Call procA
End Sub

Private Sub procA()
    On Error GoTo errhan
    procB
    Exit Sub
errhan:
    Debug.Print "proca handle"
End Sub

Private Sub procB()
    Err.Raise 6
End Sub

代码示例2.您将在procA中收到错误7:

Private Sub Form_Load()
    Call procA
End Sub

Private Sub procA()
    On Error GoTo errhan
    procB
    Exit Sub
errhan:
    Debug.Print "proca handle"
End Sub

Private Sub procB()
    On Error GoTo errhan
    Err.Raise 6
errhan:
    Err.Raise 7
End Sub

答案 1 :(得分:1)

检查您的编辑器设置,然后选择“工具>选项>常规标签”选项“打破未处理的错误”

点击此链接:http://www.fmsinc.com/tpapers/vbacode/debug.asp