使用Word VBA检测用户在Office2007中选择的保存功能
我正在编写一个自定义Word模板,它在保存当前文档时进行一些处理 在Office2007中,要保存文档,可以使用save和save As函数,并使用FileSave和FileSaveAs宏处理事件 但是当用户将鼠标悬停在“另存为”选项上时,会显示其他子选项:另存为文档、另存为Word模板、另存为Word 97-2003文档等。这些子选项似乎没有自己的事件,但我想知道用户何时使用它们 因此,我想到了使用DocumentBeforeSave事件的想法,但是我仍然需要确定是使用标准的save/SaveAs选项还是子选项进行保存 我考虑在Save/SaveAs函数中将一个变量设置为True,DocumentBeforeSave事件将检查是否出现了一个正常的保存方法,然后将该变量设置回False 但是在尝试了不同的方法之后,我不知道如何在这个文档和具有BeforeSave事件的类模块之间传递变量的值 有什么想法吗?谢谢使用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
编辑:不起作用的示例代码: 此文档:
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来访问它。如果你认为这应该是可行的,并且有一些示例代码,请分享。谢谢如果您展示创建类变量/属性的代码部分,以及在模块中设置类引用的方式,就会容易得多。所有要审查的内容。。。