gpt4 book ai didi

调用过程中的 VB6 异常处理

转载 作者:行者123 更新时间:2023-12-03 16:03:19 27 4
gpt4 key购买 nike

我有两个过程 procA 和 procB。 procA 正在调用 procB。 procB 中发生异常。我可以在 procB 中处理异常,但我喜欢在 procA 中处理它,这是我没有开始工作的。我对 VB6 不是很熟悉,但我认为这应该是可能的,因为 MSDN 说:

If an error occurs while an error handler is active (between the occurrence of the error and a Resume, Exit Sub, Exit Function, or Exit Property statement), the current procedure's error handler can't handle the error. Control returns to the calling procedure. If the calling procedure has an enabled error handler, it is activated to handle the error.

我做错了什么?

现在是代码片段:

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 处理。如果我从 Explorer 启动 EXE(之前是从 IDE 生成的),则 procA 会根据需要处理异常。

最佳答案

您一次只能有一个事件的错误处理程序。如果您在 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

关于调用过程中的 VB6 异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388920/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com