使用Word VBA检测用户在Office2007中选择的保存功能

使用Word VBA检测用户在Office2007中选择的保存功能,vba,ms-word,office-2007,word-2007,Vba,Ms Word,Office 2007,Word 2007,我正在编写一个自定义Word模板,它在保存当前文档时进行一些处理 在Office2007中,要保存文档,可以使用save和save As函数,并使用FileSave和FileSaveAs宏处理事件 但是当用户将鼠标悬停在“另存为”选项上时,会显示其他子选项:另存为文档、另存为Word模板、另存为Word 97-2003文档等。这些子选项似乎没有自己的事件,但我想知道用户何时使用它们 因此,我想到了使用DocumentBeforeSave事件的想法,但是我仍然需要确定是使用标准的save/Save

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

在Office2007中,要保存文档,可以使用save和save As函数,并使用FileSave和FileSaveAs宏处理事件

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

因此,我想到了使用DocumentBeforeSave事件的想法,但是我仍然需要确定是使用标准的save/SaveAs选项还是子选项进行保存

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

但是在尝试了不同的方法之后,我不知道如何在这个文档和具有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
课程模块:

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
类模块注册正确,我不会向她粘贴代码


显示的结果是真的,假的,真的,而理论上,它应该是真的,真的。

我仍然忽略了你逻辑中的一些东西。在评论中,我想到了不同的反向逻辑。下面的代码是我的方式和您介绍的代码的混合

课程模块

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
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
模块1

'class initialization
Public wrdAPP As New myClass
Sub set_References()
    Set wrdAPP.App = Application
End Sub
此文档模块

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
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属性,您可以在事件中检查该属性。
希望它能对你有所帮助。

我不确定你说的对不对。。。你真正的目标是什么?允许还是不允许保存?控制这个过程?或者简单地将值从对象传递到类。。。看来你们有些想法,但问题不清楚。您可以添加一些代码来更好地了解您的需求…我希望在用户使用子选项保存文档时(不使用标准的“保存”和“另存为”菜单项)检测它并运行一段代码。您可以在类中创建附加的
属性let\get
,并使用该属性将任何值传递给类。或者只需在类中添加额外的
公共变量
,它可以接受您传递的值这正是我试图做的。问题是,出于某种原因,类模块没有“看到”此文档中定义的变量的正确值,即使我试图通过属性let/get来访问它。如果你认为这应该是可行的,并且有一些示例代码,请分享。谢谢如果您展示创建类变量/属性的代码部分,以及在模块中设置类引用的方式,就会容易得多。所有要审查的内容。。。