我有两个程序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永远不会得到异常。
感谢您的帮助。
修改:其他信息:
解决方案:我不知道程序的执行方式会有所不同。如果我从IDE启动它,则procA不会处理异常。如果我从资源管理器启动EXE(以前从IDE创建),则procA将根据需要处理异常。
答案 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)
检查您的编辑器设置,然后选择“工具>选项>常规标签”选项“打破未处理的错误”