如何在保存前在Word中运行宏?

时间:2014-07-11 16:33:13

标签: vba ms-word word-vba

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

3 个答案:

答案 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

List of all application events

答案 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