0

我正在编写一个自定义 Word 模板,该模板在保存当前文档时进行一些处理。

在 Office2007 中,要保存文档,您可以使用 Save 和 Save As 功能,并使用 FileSave 和 FileSaveAs 宏处理事件。

但是当用户将鼠标悬停在 SaveAs 选项上时,会显示其他子选项:另存为文档、作为 Word 模板、作为 Word 97-2003 文档等。这些子选项似乎没有自己的事件,但我想知道用户何时使用它们。

所以我想出了使用 DocumentBeforeSave 事件的想法,但是我仍然需要弄清楚是使用标准 Save/SaveAs 选项还是使用子选项进行了保存。

我考虑在 Save/SaveAs 函数中将变量设置为 True,DocumentBeforeSave 事件将检查该函数以查看是否发生了正常的保存方法之一,然后将变量设置回 False。

但是在尝试了不同的方法之后,我无法弄清楚如何在 ThisDocument 和具有 BeforeSave 事件的类模块之间传递变量的值。

有任何想法吗?谢谢!


编辑:不起作用的示例代码:

这个文件:

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。

4

1 回答 1

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

我不知道你打算用哪种方式运行FileSavesub。但是在它运行之后,它会将值传递给你可以检查你的事件的类属性。希望它无论如何都会对你有所帮助。

于 2013-04-11T13:50:28.863 回答