【问题标题】:How to run a macro in Word before save?如何在保存之前在 Word 中运行宏?
【发布时间】:2019-01-11 21:42:22
【问题描述】:

如何使 Microsoft Word 每次在保存任何文档之前都运行 VBA 宏?是否可以在不向文档本身添加宏的情况下完成?

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    您可以使用 WithEvents 变量和常规方法名称 (VariableName_EventName) 订阅 Document_Open 中的应用程序事件。也适用于模板。

    您可以将此代码放入ThisDocument 对象中,或者按照here 的描述创建一个单独的类模块。

    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)
    MsgBox("BeforeSave")
    End Sub
    

    List of all application events.

    【讨论】:

    • 我已尝试将此代码放入 ThisDocument 对象,但仍然无法正常工作。
    【解决方案2】:

    您必须在正确的位置添加代码位。

    这必须在您的公共变量或常量声明中的代码页顶部

     Private WithEvents App As Word.Application 
    

    然后将其添加为打开文档事件。

    Private Sub Document_Open()
    Set App = Word.Application
    End Sub
    

    这是在保存命令 Ctrl+s 或保存图标时触发的事件。我添加了我自己的保存格式并打印,这在人们填写表格并且您不希望他们覆盖初始模板的情况下最有用。

    Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
    ''save file with the saveas2 command.
    ActiveDocument.SaveAs2 FileName:="YourDocumentNameORVariable" + _
    " Date_" + Format(Now(), "yy-mm-dd"), _
    FileFormat:=wdFormatDocumentDefault, _
    SaveFormsData:=True
    ''addition to print file upon save
    ActiveDocument.PrintOut Background:=True, Range:=wdPrintAllDocument, Copies:=1, Collate:=True
    End Sub
    

    阅读有关打印输出方法的更多信息:Microsoft VBA - PrintOut

    阅读有关 SaveAs2 的更多信息:Microsoft VBA - SaveAs2

    阅读更多关于保存文件格式的信息:Microsoft VBA - FileFormat for Saving

    【讨论】:

      【解决方案3】:

      尝试将您的文件保存在.xlsm,然后关闭、打开并再次保存。它应该可以正常工作。

      【讨论】:

      • 你的意思是 .docm ,他说的是一个 word 文档 :)
      最近更新 更多