【发布时间】:2019-06-24 11:56:33
【问题描述】:
我使用 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
我希望在任何时候关闭文档并关闭自动保存选项时提示确认保存。
【问题讨论】:
-
VBA 代码看起来好像可以做你想做的事。会发生什么?
-
什么都没有发生……我可以看到。如果我在 If Me.Auto... 上设置断点。它永远不会被击中。
-
所以今天早上我的代码似乎受到了打击。它给了我一个错误,所以我将 Me.AutoSaveOn 更改为 Doc.AutoSaveOn,这似乎有效! (但不是昨天,所以我会保持警惕。)