gpt4 book ai didi

excel - VBA 错误处理 : Catch and Re-throw Not Propagating

转载 作者:行者123 更新时间:2023-12-03 07:44:21 26 4
gpt4 key购买 nike

我正在开发一个相当大的 VBA 应用程序,并希望确保我能够稳健地处理错误。

在我的调用子/函数中,我想捕获错误并将其传递给全局错误处理程序。

我的解决方案基于:
Dymeng - Rethrow Errors

ExcelMacroMastery

全局错误处理程序构建调用堆栈,然后重新引发错误。

我遇到的问题是在全局错误处理程序上重新引发错误不会将程序流返回到调用上下文,而是显示 VBA 错误模式。

在下面的示例中,SQL 查询尝试插入具有重复索引的行。这会触发违反 PRIMARY KEY 约束错误。

全局错误处理程序(在模块 UTIL_ErrorHandler 中):



Sub HandleError (ByVal p_Error As DO_Error)
' Manipulate the error data
'...
'Clear the error and re-raise
'REMOVED in response to Wayne's answer: On Error GoTo 0
Err.Raise p_Error.Number, p_Error.Source, p_Error.Description
End Sub

调用代码(在 UTIL_Database 类中)

Public Function Query (ByVal p_querySQL AS String) As ADODB.RecordSet
On Error GoTo ErrHandler
'connection code...
'query code...
ExitProc:
Exit Function
ErrHandler:
Dim myError as New DO_Error
myError.Construct(Err.Number, Err.Source, Err.Description, Erl,
"UTIL_Database.Query")
UTIL_ErrorHandler.HandleError myError
Resume ExitProc
Resume
End Function

调试时调试器在 Err.Raise 上停止

为什么控制没有返回到查询函数,我该如何解决?

谢谢。

最佳答案

对不起我的白痴!

我将错误捕获设置为 课间休息模块 .一旦我将其更改为 打破未经处理的错误 情况解决了。

关于excel - VBA 错误处理 : Catch and Re-throw Not Propagating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46254659/

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