gpt4 book ai didi

vba - VBA 错误消息框不一致?

转载 作者:行者123 更新时间:2023-12-02 01:58:12 24 4
gpt4 key购买 nike

当发生未处理的异常时,VBA 弹出的消息框的行为似乎有所不同,具体取决于...某些东西?要明白我的意思,请创建一个新的 .xlsm,然后创建一个标准模块 Module1;粘贴到此代码中,然后粘贴到 Sheet1 Worksheet 对象中,输入以下代码:

Public Sub TestErrMsgBox()
Debug.Print "Hello!"
Call Err.Raise(Number:=vbObjectError, Source:="VBAProject.Sheet1", Description:="Lorem Ipsum")
End Sub

在我的 Excel 2010 Professional Plus 上,调用 VBE 的“立即”(Ctrl+G) 窗口中的子例程:

<删除> 调用Module1.TestErrMsgBox
Call Sheet1.TestErrMsgBox

将显示错误消息自动化错误/无效的 OLEVERB 结构

现在,如果从“立即”窗口中直接调用 Raise 方法:

Call Err.Raise(Number:=vbObjectError, Source:="VBAProject.Sheet1",  Description:="Lorem Ipsum")

它将显示(预期的)错误消息Lorem Ipsum

从第一种情况到最后一种情况,错误处理或 Err 对象到底发生了什么变化?以及如何操纵它?我发现在第一种情况下,消息仅取决于 Raise 调用中的 Number 参数,但仍然无法解释...

我觉得这有点烦人,因为我希望显示我的消息,而不是其他内容。总是有可用的 Pokemon 方法(捕获所有异常并显示基于 Err 属性的自定义消息框),但我想了解会发生什么。 :-)

稍后编辑:

当“错误捕获”设置为“未处理错误时中断”时,会发生上述行为。一旦我输入“Break on All Errors”,它就会显示正确的消息,并且“调试”按钮可用;然而,这不是一个好主意,在每个错误上都中断执行......

另外,感谢Alex K.的反馈, roryapDoug Glancy我发现当从 Worksheet 对象中调用 TestErrMsgBox 子例程时会发生这种情况,而不是像我第一次错误报告的那样从标准模块中调用。发帖是固定的;然而,问题仍然存在。 :-)

最佳答案

当您的 Sub 位于 Sheet 模块中并且您已将 VBE 设置为“因未处理的错误而中断”时,会发生这种情况,这与 Sheet 模块是类模块这一事实有关。在类模块中将错误捕获设置为 Break,它将正常运行。

无论如何,我总是使用此设置,因此我可以在用户窗体和类中进行调试。

搜索“VBA err.raise 类模块中无效的 oleverb 结构中断”似乎支持它与类模块相关的事实。

关于vba - VBA 错误消息框不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23700167/

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