Document_关于启动Word的新事件

时间:2013-02-25 15:31:23

标签: vba word-vba

我有一个VBA插件,我想在每次有人打开文档时运行它。它可以正常打开现有文档(AutoOpen)并从File>创建新文档。新菜单(AutoNew),但是当我第一次打开Word时,这些事件都没有被触发。我可以看到的唯一事件是AutoExec事件,这不是很好,因为文档不存在,所以ActiveWindow为null。

有人可以帮忙吗?

Sub AutoNew
    MsgBox "New"
End Sub

Sub AutoOpen
    MsgBox "Open"
End Sub

Sub AutoExec
    MsgBox "Exec"
End Sub

1 个答案:

答案 0 :(得分:0)

我将从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模板中是否还有自动代码。这只是一次,所以我没有调查过。

我希望我能找到我所了解的网站(以及Register_Event_Handler的派生地。如果我发现它,我会添加评论。