【问题标题】:Auto Run Macro when saving does not work Word VBA保存时自动运行宏不起作用 Word VBA
【发布时间】:2017-11-10 20:35:27
【问题描述】:

我在 word 文档中有一个 VBA 代码。每次用户单击保存时,代码都会运行。当文档类型是启用宏的 Word 文档时,代码可以正常工作,但是当我将文档转换为启用宏的 Word 模板时,代码停止工作,有什么建议可以解决这个问题吗? 注意:代码在文档本身中

Private WithEvents App As Word.Application
Private Sub Document_Open()
Set App = Word.Application
End Sub
Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
do stuff....

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    您的类在打开docm 文档时被初始化。转换为 dotm 后,仍然是文档的 opening 触发 On_Open 事件,这意味着您必须打开模板。当然,拥有模板的全部意义在于您不想打开它。因此 App 类永远不会被初始化,因此 App 事件永远不会触发。您可能希望在 New 事件上初始化 App 类。

    话虽如此,我怀疑您的代码仍然可以正常工作,但您可能以错误的方式进行了测试。当您创建一个新文档时,App 类将不会被初始化,并且当您保存新文档时不会发生任何事情。但是,在您关闭新文档然后再次打开它之后,将触发 On_Open 事件,然后触发 App 事件。正如我所说,如果您同时初始化 App 类 On_New 和 On_Open 它应该按照您的意愿执行。

    【讨论】:

    • 感谢您的回答;当我关闭并重新打开文档时,它确实有效。但是当我第一次从模板创建文档时,它不起作用。不是除了上面添加的代码是 Private Sub Document_Close() Set App = Word.Application End Sub
    • Document_Close 过程是做什么的?您的问题是 App 类中的所有 proc 都不起作用,因为该类没有被初始化。正是这段代码完成了这项工作:-Private Sub Document_Open() Set App = Word.Application End Sub。它必须在ThisDocument 模块中。我建议在同一位置添加另一个类似的程序:-Private Sub Document_New() Set App = Word.Application End SubPublic WithEvents App As Word.Application 必须在类模块中(可能是WdApp),但它必须是公共的,而不是私有的。应用事件过程也在类模块中。
    最近更新 更多