Word VBA - DocumentBeforeSave事件?

时间:2015-06-25 15:44:33

标签: vba ms-word word-vba savefiledialog before-save

我正在使用以下VBA代码在保存Word文档时显示一个消息框,

Public WithEvents appWord as Word.Application 

Private Sub appWord_DocumentBeforeSave _ 
 (ByVal Doc As Document, _ 
 SaveAsUI As Boolean, _ 
 Cancel As Boolean) 

 Dim intResponse As Integer 

 intResponse = MsgBox("Do you really want to " _ 
 & "save the document?", _ 
 vbYesNo) 

 If intResponse = vbNo Then Cancel = True 
End Sub

此代码是在Class中编写的。但这不起作用。保存时没有任何反应。这是什么问题?

3 个答案:

答案 0 :(得分:3)

我让它发挥作用。感谢AnalystCave.com的帮助。这就是我所做的:

我创建了一个名为 EventClassModule 的新类,并复制了以下代码,

Public WithEvents App As Word.Application

Private Sub App_DocumentBeforeSave _
 (ByVal Doc As Document, _
 SaveAsUI As Boolean, _
 Cancel As Boolean)

 Dim intResponse As Integer

 intResponse = MsgBox("Do you really want to " _
 & "save the document?", _
 vbYesNo)

 If intResponse = vbNo Then Cancel = True
End Sub

然后创建了一个名为 mdlEventConnect 的模块并复制了以下代码,

Dim X As New EventClassModule

Sub Register_Event_Handler()
 Set X.App = Word.Application
End Sub

此后在 ThisDocument 上复制了以下代码,

Private Sub Document_New()
    Register_Event_Handler
End Sub

Private Sub Document_Open()
    Register_Event_Handler
End Sub

保存文件并重新打开。现在,当我尝试保存文档时,它完美地执行了 DocumentBeforeSave 事件。

答案 1 :(得分:1)

将其放在Word中VBA项目的ThisDocument部分,而不是Class,因为它不会在那里工作。

这是一个例子: https://msdn.microsoft.com/en-us/library/office/ff838299.aspx

答案 2 :(得分:1)

使用Word 2016,我发现需要进行更改

Set X.App = Word.Application

应该是

Set X.appWord = Word.Application