gpt4 book ai didi

vb.net - .Net 中的 Excel 互操作 - 捕获 VBA 错误?

转载 作者:行者123 更新时间:2023-12-03 08:00:03 31 4
gpt4 key购买 nike

类似于 Errors when calling certain Excel VBA macros from C# ,我想实现一个错误处理程序,它将捕获 VBA 错误并优雅地返回。

基本上,我在 Excel 中打开了一个任意宏工作簿,如果宏失败(即您收到带有“结束”和“调试”按钮的 VBA 错误对话框),我希望我的应用程序在内部处理它而不是使用VBA 的对话框。这主要是为了让有问题的书不会卡住处理(我正在使用各种队列来处理多个工作簿)。

我已经知道 DisplayAlerts=False 属性,并且 On Error Resume Next 插入到每个例程中,但我不想将其注入(inject)所有内容(特别是因为其中一些工作簿可能已经修改了提到的设置并在中间重置了它们-常规!)

到目前为止,我最好的想法是编写某种进程观察器来查找标题为“Microsoft Visual Basic”的窗口并发送键为“E”(单击结束按钮)。

我在一些地方读到有一个名为 Application.BreakOnVBAError 的属性可以设置为 False,但它似乎不存在于互操作程序集中。

最佳答案

在 pinvoke.net 和 MWinAPI 的帮助下,我已经能够枚举在 Excel 的进程 ID 下创建的所有窗口,然后我可以深入研究以发现对话框的元素(如果它是一个对话框,例如 Microsoft Visual Basic 对话框)。

因为它是一个自动化实例,所以主窗口是隐藏的,所以唯一应该显示的是消息框和 VBA 错误框,然后我可以在必要时将键盘输入消息发送到结束脚本。

当然,这种方法永远不会点击“调试”按钮,所以我永远不会看到 VBE 窗口,但以防万一我也处理它。

可根据要求提供源代码?

关于vb.net - .Net 中的 Excel 互操作 - 捕获 VBA 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25210321/

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