2015-04-27 29 views
1

我想在我的Word .docm文件中将此代码添加到ThisDocumentVBA for Word:添加子事件

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 - 但不是之前该事件。

+0

使用公共布尔变量并使用它来设置文档保存状态。 –

+0

请写一个答案,而不是编辑你的问题 –

+0

好吧,我没有答案,只是对我的问题中的一个单词稍作修改。在下面的评论中解释,我想我会留下它。 – user3762977

回答

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" 

这将阻止该消息在关闭文档时显示。

+0

谢谢,这似乎是将它写入ThisDocument,添加您的代码后,单击事件后,现在我看到'Sub AutoClose():ActiveDocument.Saved = False:End Sub'。然而这并不妨碍“你想保存吗?”对话框 - 可能是因为代码没有保存?我知道有时它会立即生效,而其他时候您必须关闭并打开文档才能正常工作。 – user3762977

+0

代码保存是否应该无关紧要 - 您确定此代码会抑制该消息吗?如果要在关闭文档时阻止该消息,则需要使用Private Sub Document_Close(),然后使用“ActiveDocument.Saved = True”来避免该消息。但然后文档将关闭而不保存或提示用户保存,所以我希望这是你的意图。 – MattB

+0

当我在上面的文章中添加了AutoClose()代码时,就像我在那里那样,然后当我单击关闭文档时,即使编辑了文档,文档刚刚关闭,未保存的文档也没有变化“你想保存”提示。我认为你的/ SOofWXLS的另一个想法也更好,只是没有得到它的工作。我现在必须去约会,但今天晚些时候会搞砸了。 Thx – user3762977

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 
+0

谢谢,尝试这个,但我没有得到它的工作。我想你明白我的意思,除了我只需要一个事件程序,而不是两个。 'formatSaveB_Click()'是我需要改变的时候。如果我包含除了event1之外的所有内容,而不是event2 - 它似乎并未将“ActiveDocument.Saved = False”生效。将继续与它搞乱。 – user3762977

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 
0

好加入这一行从MattB的伎俩后,我发现,他的建议有一个错字,我删除了额外的信:)

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

我只是将它粘贴到其他人尝试它,它有VBCompontents,直到现在再次审查,我没有发现,一旦我删除额外的t,宾果。

正是我所需要的。谢谢一堆。

+0

没有问题。乐于帮助。 – MattB

相关问题