我正在编写一个自定义Word模板,在保存当前文档时会执行一些处理。
在Office2007中,要保存文档,可以使用“保存”和“另存为”功能,并使用FileSave和FileSaveAs宏处理事件。
但是当用户将鼠标悬停在SaveAs选项上时,会显示其他子选项:另存为文档,Word模板,Word 97-2003文档等。这些子选项似乎没有自己的事件,但我想知道用户何时使用它们。
所以我提出了使用DocumentBeforeSave事件的想法,但是我仍然需要弄清楚是否使用标准的Save / SaveAs选项或子选项进行了保存。
我考虑过在Save / SaveAs函数中将变量设置为True,DocumentBeforeSave事件会检查是否发生了一个正常的保存方法,然后将变量设置为False。
但是在尝试了不同的方法之后,我无法弄清楚如何在ThisDocument和具有BeforeSave事件的类模块之间传递变量的值。
有什么想法吗?谢谢!
编辑:不起作用的示例代码:
的ThisDocument:
Public pSSave As Boolean
Public Property Get SSave() As Boolean
SSave = pSSave
End Property
Public Property Let SSave(Value As Boolean)
pSSave = Value
End Property
Sub FileSave()
Me.SSave = True
If SSave = True Then
MsgBox "True"
End If
Application.ActiveDocument.Save
If SSave = True Then
MsgBox "True"
End If
End Sub
课程模块:
Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
If Application.ActiveDocument.SSave = False Then
MsgBox "False"
End If
End Sub
类模块注册正确完成,我不会将代码粘贴到她身上。
显示的结果为True,False,True,理论上,它应为True,True。
答案 0 :(得分:1)
我仍然怀念你的逻辑。在评论中,我想到了不同的反向逻辑,这将是这样的。下面的代码是我的方式和您提供的代码的混合。
课程模块
Public WithEvents App As Word.Application
Public pSSave As Boolean 'your class variable/property
Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
If pSSave = False Then
MsgBox pSSave
Else
MsgBox pSSave
End If
End Sub
<强>模块1 强>
'class initialization
Public wrdAPP As New myClass
Sub set_References()
Set wrdAPP.App = Application
End Sub
此文档模块
Private Sub Document_Open()
'to initialize public variable when open
Call Module1.set_References
End Sub
Sub FileSave()
wrdAPP.pSSave = True
Application.ActiveDocument.Save
If wrdAPP.pSSave = True Then
MsgBox "True"
End If
End Sub
我不知道您将以哪种方式运行FileSave
sub。但是在运行之后,它会将值传递给class属性,您可以在事件中检查它。
希望无论如何它会帮助你。