如何在每次保存文档之前使Microsoft Word运行VBA宏?可以在不将宏添加到文档本身的情况下完成吗?
答案 0 :(得分:9)
您可以使用Document_Open
变量和传统方法名称(WithEvents
)订阅VariableName_EventName
中的应用程序事件。也适用于模板。
您可以将此代码放入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
答案 1 :(得分:-1)
尝试将文件保存在.xlsm
中,然后关闭,再次打开并保存。它应该工作正常。
答案 2 :(得分:-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