我有一个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
答案 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的派生地。如果我发现它,我会添加评论。