我使用2种不同的键盘布局(qwerty和azerty),并且不断使用Alt-Shift在这两种键盘之间切换。有时,当我到达Ctrl-Z来撤消时,我得到了Ctrl-W来关闭文档。一般来说,在这种情况下,我会得到“保存提示”,这将使我警惕自己的错误。但是,我现在使用的是OneDrive,对正在处理的文档进行自动保存。结果,永远不会出现此保存提示。该文档会立即关闭,更糟糕的是,重新打开该文档时,我尝试执行的撤消操作不再存在。
我想使用附加到普通模板的VBA,这样,在关闭使用VBA模板创建的任何文档时,我将检查是否打开了自动保存功能,如果已打开,请在关闭消息框之前进行确认。 显然,如果用户不确认(例如选择“取消”),则不应关闭该文档。
最初,我将代码放在Document_Close上,但很快意识到在这里取消取消为时已晚。这对我不好。 然后,基于一些在线代码,我将代码放在一个类模块(EventClassModule)中。在ThisDocument模块中,我初始化类并激活事件处理程序。 我的代码似乎从未运行过,或者在任何情况下都没有断点。
我不确定Normal的停止位置和我的普通文档的开始位置...
在普通模板的ThisDocument中,我有这个VBA
Dim X As New EventClassModule
Sub Register_Event_Handler()
Set X.App = Word.Application
End Sub
Private Sub Document_Open()
Register_Event_Handler
End Sub
我有一个名为EventClassModule的类模块,其中包含以下内容
Public WithEvents App As Word.Application
Private Sub App_DocumentBeforeClose(ByVal Doc As Document, Cancel As Boolean)
Dim res As VbMsgBoxResult
If Me.AutoSaveOn Then
res = MsgBox("OK to Confirm", vbOKCancel, "Closing Document")
If res = vbCancel Then
Cancel = True
End If
End If
End Sub
无论何时关闭文档并关闭自动保存选项,我都会提示您确认保存。
答案 0 :(得分:1)
仅通过文件|打开普通模板时,才会触发Document_Open事件处理程序。打开。若要使代码在启动Word时响应,您需要使用AutoExec例程。只需如下重命名您的例程。您可以找到有关自动宏here
的更多信息Public Sub AutoExec()
Register_Event_Handler
End Sub
答案 1 :(得分:0)
这是一种简单的方法,包括这样的方法:
Public Sub DocClose()
' Disables Ctrl + W (but not other close methods, e.g. Alt + F4, menus, [X])
' Your code here:
ActiveDocument.Close
End Sub
基本上,MS-Word在内部使用一些方法名称,如果将它们包含在代码中,它们将阻止默认操作。如果将子级留空,则会有效地禁用 Ctrl + W 。
有关更多信息,请参见此处:Reserved method names in MS Word VBA
如果您使用Public WithEvents App As Word.Application
且您的项目由于任何原因被重置,但无法重新启动... App
将为Nothing
,并且所有事件均不会触发。
在您实际上想要关闭文档的情况下……使用这种技术,您不会被(很快成为)烦人的确认消息所困扰-只需说一句;-)