2013-02-25 4 views
1

У меня есть добавление VBA, которое я хочу запускать каждый раз, когда кто-то открывает документ. Он отлично работает для открытия существующих документов (AutoOpen) и создания новых документов из меню «Файл»> «Новое» (AutoNew), но когда я просто открываю Word в первый раз, ни одно из этих событий не срабатывает. Единственное событие, с которым я могу подключиться, - это событие AutoExec, и это не очень хорошо, поскольку документ еще не существует, поэтому ActiveWindow имеет значение null.Document_New событие при запуске Word

Может ли кто-нибудь помочь?

Sub AutoNew 
    MsgBox "New" 
End Sub 

Sub AutoOpen 
    MsgBox "Open" 
End Sub 

Sub AutoExec 
    MsgBox "Exec" 
End Sub 
+0

См [здесь] (HTTP:.. // Слово. mvps.org/faqs/macrosvba/documentevents.htm) - ваш вопрос не говорит, когда/как вы пытаетесь эти события, но кажется, что они не могут быть сохранены в Addin. – enderland

+1

Вы можете сделать это с помощью обработчиков событий. пример в Excel: http://msdn.microsoft.com/en-us/library/office/hh211482(v=office.14).aspx. Остерегайтесь, однако, Word не очень хорош при последовательном запуске событий. Если вы удвоите -click файл, а не открывать его из Word, например, некоторые события приложения не срабатывают. Для моих целей это нормально (действия, которые я хочу вызвать, не являются существенными), но если вам нужна гарантия что события будут срабатывать, это может вам не помочь. Вот список событий приложения: http://msdn.microsoft.com/en-us/library/office/ff841714(v=office.14).aspx – Christina

+0

Спасибо за комментарии. Так вы можете помочь мне, с каким событием будет срабатывать при запуске Word, что позволит мне изменить свойство ActiveWindow? – Mark

ответ

0

Я бы начал с DocumentOpen и NewDocument. Дополнительный уровень сложности существует, если вам необходимо поддерживать документы ProtectedView; Слово запускает другое событие. Я обнаружил, что если я попытаюсь проверить это событие (и это не происходит), он вызывает ошибку. Мне не повезло, и в конечном итоге это не стоило того времени, когда я тратил. Я привел пример ниже некоторого кода, который открывает панель стилей при открытии документа или создании нового (при условии, что надстройка загружается) и расширяет маркер стиля в черновом представлении, если он еще не расширен.

В моем модуле 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 

Кроме предостережений я отметил выше, одна проблема, у меня было если пользователь имеет автокоды в своем обычном шаблоне. Это произошло только однажды, поэтому я не исследовал его.

Я хотел бы найти место, где я узнал об этом (и из которого Register_Event_Handler была получена Если я найду его, я добавлю комментарий

+0

О, очевидно, я использую Word с лентой (2010 в моем случае). Я должен был спросить, какую версию вы хотели для этого ... – Christina

Смежные вопросы