【问题标题】:How to ask for confirmation before allowing a Word document to close?如何在允许 Word 文档关闭之前要求确认?
【发布时间】: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,这似乎有效! (但不是昨天,所以我会保持警惕。)

标签: vba ms-word


【解决方案1】:

仅当通过 File | 打开 Normal 模板时才会触发 Document_Open 事件处理程序。打开。要在启动 Word 时让代码响应,您需要使用 AutoExec 例程。只需将您的例程重命名如下。你可以找到更多关于自动宏的信息here

Public Sub AutoExec()
  Register_Event_Handler
End Sub

【讨论】:

  • 感谢您提供此提示和链接。我最初的解决方案现在似乎正在运行......但如果我遇到任何困难,我会尝试一下。
【解决方案2】:

这是一个简单的方法,包括这样的方法:

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 内部使用了一些方法名称,如果将它们包含在代码中,它们将阻止默认操作。如果您将 sub 留空,它将有效地禁用 Ctrl + W。

更多信息请看这里:Reserved method names in MS Word VBA


这种技术的优势1

如果您使用 Public WithEvents App As Word.Application 并且您的项目因任何原因被重置,并且无法重新启动...App 将是 Nothing,并且不会触发任何事件。

这种技术的优势2

在您真正想要关闭文档的情况下......使用这种技术,您不会被(很快成为)烦人的确认消息所困扰 - 只是说;-)

【讨论】:

  • 我从未听说过这些 Word 内部方法。这很棒!如果我的技术失败了,我肯定会在此之前给出。如果它像宣传的那样工作就简单多了。
  • @davidmckinney 是的-我自己几天前才发现这些,是的……这基本上是免费的午餐。适用于 Word 2016(64 位)。保持简单也有好处,请参阅编辑。干杯,
  • 你说的很对。这是我的问题的完美解决方案。我已经更换了旧的,它确实很快就会变得烦人。
  • 不用担心 - 很高兴它有帮助:-)
猜你喜欢
  • 1970-01-01
  • 2020-12-16
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2011-02-20
相关资源
最近更新 更多