使用OLE调试从另一个应用程序调用的MS Word宏

时间:2014-05-12 20:39:35

标签: vba debugging ole

我有一个C ++应用程序,它在.docm文件中的字宏中调用邮件合并。该宏适用于Windows XP但不适用于Windows 7.我想首先在Windows XP中调试宏,然后将其移至Windows 7,而不是Windows 7。

我在宏中设置了一个断点来进行调试,但是当我从我的应用程序调用时,我无法让调试器参与进来。多年前我曾经这样做过(以及WORD的版本)。是否仍然可以这样做,我在最后一天半用谷歌详尽地搜索了这一点,而且我什么都没有。

1 个答案:

答案 0 :(得分:0)

如果您的c ++应用程序使用CoCreateInstance将Word加载为本地服务器,则不会触发您在Word VBA IDE宏中设置的断点,因为CoCreateInstance正在为Word启动新进程。

仅打开我的单词实例,在宏中设置断点,然后在c ++应用程序中使用GetActiveObject(而不是CoCreateInstance)来获取对Word本地服务器的引用。这应该会导致断点触发。

例如,我创建了一个名为TestMacro的Word宏,它只显示了一个消息框。我在MsgBox" ..."上放了一个断点。在我的宏。然后我从.vbs脚本调用我的宏:

dim wdApp
set wdApp = GetObject(, "Word.Application")
'set wdApp = CreateObject("Word.Application")

wdApp.Run "TestMacro"

当我使用GetObject时,我的断点被触发了。当我使用CreateObject时,我的断点没有触发。