c# - 如何以编程方式强制中断 VBE 编辑器

标签 c# vba vbe

我正在编写一个可打开多个 PI ProcessBook 显示文件的 C# 应用程序。 PI Processbook 是一个嵌入了 Visual Basic for Applications 支持的程序,包括一个 VBE 环境。

我遇到的问题是,我想打开的许多显示器中都有宏,这些宏会在打开显示器时自动运行。我已将宏保护设置为最大(这应该完全禁用宏!),但不幸的是,我正在使用的 TypeLibrary 中有一些东西意味着当以编程方式打开文件时,它会绕过宏安全并且宏仍然运行。去图....

因此,我正试图找到一种方法来以编程方式杀死这些宏,即使它们已经启动。我尝试使用 SendKeys.Wait("^{BREAK}") 强制进入中断模式。这“有效”,但有点碰运气:我发现如果宏在某个时候没有暂停,SetForegroundWindow 不能强制 VB 编辑器到前台接受 sendkeys 输入。因此,我尝试使用 sendmessage。我使用 SPY++ 看到 CTRL+BREAK 似乎向窗口发送了 WM_CANCELMODE 消息。显然,这与字面上的 ALT+Tabbing 或用鼠标单击窗口并按 CTRL+Break 键的处理方式有所不同,因为消息会排队,但在宏完成执行之前似乎不会处理。

有没有人有任何其他尝试的建议?

最佳答案

I am therefore trying to find a way to programatically kill these macros, even if they have started.

打开电子表格时按住 Shift 键,宏不会运行。

否则,您可以尝试在运行时停止代码:Ctrl + Alt + PauseBreak

编辑:

I have set the macro protection to maximum (which should disable macros completely!)

尝试禁用它们:

enter image description here

关于c# - 如何以编程方式强制中断 VBE 编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17310174/

相关文章:

c# - ASP.NET MVC : populate (bind data) in listbox

vba - 我可以使用 IsEmpty 来引用不同的工作表并隐藏列吗?

Excel VBA : Protect/Unprotect macro breaks during saves due to not ready

vba - 我可以得到 VBA 代码中的注释文本吗

excel - VBA 调试器仅显示集合的 256 个元素

c# - 使用 Microsoft Kinect 跟踪 Blob

c# - volatile 用法的可重现示例

c# - 在用 C# 编写的 AWS Lambda 函数中读取 SNS 消息

excel - 如何在 Excel VBA 中存储文件夹路径

vba - Application.Cells VS Application.ActiveSheet.Cells