1

我有一个 VBA 插件,每次有人打开文档时我都想运行它。打开现有文档(AutoOpen)和从“文件”>“新建”菜单(AutoNew)创建新文档都很好,但是当我第一次打开 Word 时,这些事件都没有触发。我似乎可以挂钩的唯一事件是 AutoExec 事件,这不是很好,因为文档还不存在,所以 ActiveWindow 为空。

任何人都可以帮忙吗?

Sub AutoNew
    MsgBox "New"
End Sub

Sub AutoOpen
    MsgBox "Open"
End Sub

Sub AutoExec
    MsgBox "Exec"
End Sub
4

1 回答 1

1

我将从 DocumentOpen 和 NewDocument 开始。如果您需要支持 ProtectedView 文档,则存在额外的复杂性;Word 触发了不同的事件。我发现如果我尝试检查该事件(并且它没有发生),它会引发错误。我没有太多的运气,最终我花费的时间是不值得的。我在下面发布了一些代码示例,这些代码在打开文档或创建新文档(假设加载项正在加载)时打开样式窗格,并在草稿视图中展开样式边距(如果尚未展开)。

在我的 UI 模块中:

Dim X As New clsAppEvent 'This is in the declarations

Public Sub OnRibbonLoad(objRibbon As IRibbonUI)
    Do While Documents.Count = 0
      DoEvents
    Loop ' I find this useful as sometimes it seems my ribbon loads before the document. 
    Call Register_Event_Handler
    ' Other stuff
End Sub

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

然后,在一个类模块中,我调用 clsAppEvent:

Option Explicit

Public WithEvents App As Word.Application

Private Sub App_DocumentOpen(ByVal Doc As Document)
    App.TaskPanes(wdTaskPaneFormatting).visible = True
End Sub

Private Sub App_NewDocument(ByVal Doc As Document)
    App.TaskPanes(wdTaskPaneFormatting).visible = True
End Sub

Private Sub App_WindowActivate(ByVal Doc As Document, ByVal Wn As Window)
    If Wn.StyleAreaWidth <= 0 Then
      Wn.StyleAreaWidth = 60
    End If
End Sub

除了我上面提到的警告之外,我遇到的一个问题是,如果用户的 Normal 模板中也有 Auto 代码。这只出现过一次,所以我没有调查它。

我希望我能找到我了解这一点的网站(以及从中派生 Register_Event_Handler 的网站。如果我找到它,我会添加评论。

于 2013-02-26T17:32:49.347 回答