如何在c ++自动化中启动ms字时阻止自动宏的运行

时间:2016-03-18 10:54:02

标签: c++ visual-c++ ms-word

我正在使用c ++为office文件生成缩略图。我使用类似于此的自动化打开并保存文件:https://support.microsoft.com/en-us/kb/179494。由于文件很多,这需要花费很多时间,程序应该在整个晚上运行。

除非文件包含自动启动宏,否则一切正常。

Sub AutoOpen()
    Application.Run ("stupidMacroWhichDoesntExist")
End Sub

在这种情况下,循环停止,并显示一条错误消息,表明无法执行宏。

关闭课程,我已将信任中心的宏设置设置为 - >禁用所有宏而不通知

仍会显示错误消息

在Excel中,我可以通过以下方式阻止:

objExcelApp.SetEnableEvents(false);

不幸的是,c ++中的单词application没有SetEnableEvents方法。我搜索了很多,发现了很多VB代码来防止这种情况。大多数情况下它是这样的:

objWord.WordBasic.DisableAutoMacros 1

但我在c ++中找不到任何东西

我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

我相信你在寻找:

WordApplication.AutomationSecurity = msoAutomationSecurityForceDisable

信任中心设置不适用于使用自动化打开的文档。此属性及其MsoAutomationSecurity枚举对应于对象模型中的该设置。

FWIW使用C ++也可以实现WordBasic方法。我不知道C ++语法,但是使用C#我需要使用PInvoke(GetType()。InvokeMember)直接与IDispatch进行通信(我认为这是正确的术语)。

答案 1 :(得分:0)

我已经解决了。我正在备份实际的宏(word文件夹中的vbaData.xml和vbaProject.bin),将一个虚拟宏放入word文件中,通过自动化打开它并保存它以生成缩略图。之后,我将备份的宏放回到word文件中。 由于虚拟宏不执行任何操作,因此无论在原始宏中编程什么都不会执行任何操作,我都是安全的。

相关问题