gpt4 book ai didi

vba - 关闭 Word 文档时是否触发了 VBA 事件?

转载 作者:行者123 更新时间:2023-12-01 14:16:10 25 4
gpt4 key购买 nike

我正在尝试使用 Normal.dotm 作为类似于 Excel 中的 Personal.xlsb 对象的宏存储对象。

内置 Document_Close() event似乎无法触发它,除非它包含在特定文档的 ThisDocument 对象中。

我也尝试过使用这个 Application_Quit()像这样的事件但无济于事:

Private Sub Application_Quit()
Msgbox "closing word"
End Sub

是否可以像在 excel 中那样使用 Auto_Close() 等监听单词应用程序的关闭?


基于this documentation 尝试@BigBen

类模块“事件类模块”

Public WithEvents App As Word.Application

普通模块“模块 1”

Dim X As New Class1

Sub Register_Event_Handler()
Set X.App = Word.Application
End Sub

Private Sub App_Quit()
MsgBox "closing word"
End Sub

最佳答案

有两种基本方法可以在任何 Word 文档关闭时进行捕获:

  1. 在 Normal.dotm 的任何模块(或作为加载项加载的任何模板)中使用名为 AutoClose 的宏。这是来自 WordBasic(Word 2.0 和 6.0)时代的“老式”方式。

请注意,如果任何其他文档(或模板)具有 AutoClose,这将覆盖运行“更一般”级别的宏。换句话说,文档(或模板)特定代码优先。

Sub AutoClose()
MsgBox "The document " & ActiveDocument.FullName & " is closing."
End Sub
  1. 处理应用程序级事件。这需要一个类模块和一个“普通”模块。事件代码在类模块中;初始化类的代码必须在“普通”模块中。

此事件的名称是 DocumentBeforeClose 并且可以被用户和代码取消(请参阅事件签名中的 Cancel 参数).

AutoClose 相比,如果有多个文档或模板正在运行该事件,所有 都会触发 - 没有优先级或“覆盖”。

名为 clsEvents 的类模块

Public WithEvents app As Word.Application

Private Sub app_DocumentBeforeClose(ByVal Doc As Document, Cancel As Boolean)
MsgBox "The document " & Doc.FullName & " is being closed."
End Sub

模块

Public myEvents As New clsEvents

Public Sub StartEvents()
Set myEvents.app = Word.Application
End Sub

Public Sub EndEvents()
Set myEvents.app = Nothing
End Sub

请注意,如果两种类型的事件都存在,AutoClose 将在 DocumentBeforeClose 之后触发。

另请注意,有一个特定于文档的事件只会针对该文档触发:Document_Close。此事件必须位于该文档的ThisDocument 类模块中。

Private Sub Document_Close()

End Sub

关于vba - 关闭 Word 文档时是否触发了 VBA 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57467191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com