【发布时间】:2019-01-11 21:42:22
【问题描述】:
如何使 Microsoft Word 每次在保存任何文档之前都运行 VBA 宏?是否可以在不向文档本身添加宏的情况下完成?
【问题讨论】:
如何使 Microsoft Word 每次在保存任何文档之前都运行 VBA 宏?是否可以在不向文档本身添加宏的情况下完成?
【问题讨论】:
您可以使用 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
【讨论】:
您必须在正确的位置添加代码位。
这必须在您的公共变量或常量声明中的代码页顶部
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
【讨论】:
尝试将您的文件保存在.xlsm,然后关闭、打开并再次保存。它应该可以正常工作。
【讨论】: