VBA for Word:在事件

时间:2015-04-27 16:14:11

标签: vba ms-word

我想在我的Word .docm文件中将此代码添加到ThisDocument

Sub AutoClose()
ActiveDocument.Saved = False
End Sub

代码会阻止"您要保存吗?"出现对话框。我只是想在文档中的某个点击事件之后添加它,因为我也禁用了Save AsSave,如果我添加所有三个,那么我就不能自己保存文件。 (事实上​​,由于这个原因,我无法添加所有三个。)

如果我将上面的代码添加到文档中的最后一次点击事件后才能激活,但它应该没问题,因为那时我仍然可以保存我所做的更改,只要我没有点击该触发器结束了。防止人们关闭并获得"你想保存吗?"最后的对话对我来说是最重要的。

当另一个点击事件触发时,有没有办法将上述代码写入ThisDocument?或换句话说,有没有办法让点击事件使上述代码生效?

这里是最后一个我想要触发上述代码的子(激活?被写入?被启用?被取消注释?)

Private Sub formatSaveB_Click()
ActiveDocument.Bookmarks("mark3").Select
    Selection.Delete
ActiveDocument.InlineShapes(1).Delete

With Dialogs(wdDialogFileSaveAs)
        .Format = wdFormatFilteredHTML
        .Show
End With

End Sub

事件发生后,我想要

Sub AutoClose()
    ActiveDocument.Saved = False
    End Sub

在ThisDocument中处于活动状态 - 但之前

4 个答案:

答案 0 :(得分:1)

如果尚未启用VBA项目的编程访问权限。但是,要在其他代码运行后添加您描述的子代码,请将此代码添加到您的子代码中:

ThisDocument.VBProject.VBComponents("ThisDocument").CodeModule.AddFromString "Sub AutoClose(): ActiveDocument.Saved = False: End Sub"

这应该可以解决问题。您可能需要修改一下,我无法完全测试,因为我在禁用VBA项目的编程访问的环境中,但这应该是您想要做的事情。

轻微编辑:如果您想阻止"是否要保存您所做的更改..."关闭单词时,您需要执行以下操作:

ThisDocument.VBProject.VBComponents("ThisDocument").CodeModule.AddFromString "Private Sub Document_Close(): ActiveDocument.Saved = True: End Sub"

关闭文档时会阻止显示该消息。

答案 1 :(得分:0)

我不能完全遵循你的逻辑,但我认为你所问的是这样的:

ThisDocument模块

Public event1 As Boolean
Public event2 As Boolean

Sub AutoOpen()

event1 = False
event2 = False

End Sub

活动程序

Private Sub formatSaveB_Click()
    '// Event code here...
    event1 = True
End Sub

Private Sub otherEvent_Click()
    '// Event code here...
    event2 = True
End Sub

然后在你的最后一个

Sub AutoClose()
 '// Saved state only set to true if previous 2 events have been executed.   
    ActiveDocument.Saved = (event1 And event2)

End Sub

答案 2 :(得分:0)

在要禁用对话框的事件处理程序中设置一个标志,然后在退出时对其进行测试。请注意,如果文档已经保存,则必须检查标记 ,以避免在文档实际已保存但未触发formatSaveB_Click时提示)。假设formatSaveB_Click()在ThisDocument中。

在ThisDocument中:

Private clicked As Boolean

Sub AutoClose()
    ActiveDocument.Saved = clicked Or ActiveDocument.Saved
End Sub

Private Sub formatSaveB_Click()
    ActiveDocument.Bookmarks("mark3").Select
    Selection.Delete
    ActiveDocument.InlineShapes(1).Delete

    With Dialogs(wdDialogFileSaveAs)
            .Format = wdFormatFilteredHTML
            .Show
    End With
    'Set your flag here.
    clicked = True
End Sub

答案 3 :(得分:0)

好吧,在我发现他的建议有一个拼写错误之后,从MattB添加这条线就行了,我删除了额外的字母:)

ThisDocument.VBProject.VBCompontents("ThisDocument").CodeModule.AddFromString "Private Sub Document_Close(): ActiveDocument.Saved = True: End Sub"

我只是像其他人一样粘贴它来尝试它,并且它有VBCompontents我直到现在再次查看它才发现,一旦我删除了额外的t,答对了。

正是我需要的。非常感谢。