2013-02-25 2 views
1

J'ai un addin VBA que je veux exécuter chaque fois que quelqu'un ouvre un document. Cela fonctionne très bien pour ouvrir des documents existants (AutoOpen) et créer de nouveaux documents à partir du menu Fichier> Nouveau (AutoNew) mais quand je viens d'ouvrir Word pour la première fois, aucun de ces événements ne se déclenche. Le seul événement auquel je peux sembler se connecter est l'événement AutoExec et ce n'est pas génial car le document n'existe pas encore, alors ActiveWindow est null.Document_Nouveau événement lors du lancement de Word

Quelqu'un peut-il aider?

Sub AutoNew 
    MsgBox "New" 
End Sub 

Sub AutoOpen 
    MsgBox "Open" 
End Sub 

Sub AutoExec 
    MsgBox "Exec" 
End Sub 
+0

Voir [ici] (http:.. // mot. mvps.org/faqs/macrosvba/documentevents.htm) - votre question ne dit pas quand/comment vous essayez ces événements, mais il semble qu'ils ne peuvent pas être stockés dans un Addin – enderland

+1

Vous pouvez le faire en utilisant des gestionnaires d'événements. un exemple dans Excel: http://msdn.microsoft.com/en-us/library/office/hh211482(v=office.14).aspx.Méfiez-vous, cependant, Word n'est pas génial pour déclencher des événements de manière cohérente.Si vous doublez -Cliquez sur un fichier plutôt que de l'ouvrir à partir de Word, par exemple, certains événements Application ne se déclenchent pas, ce qui est correct pour moi (les actions que je veux déclencher ne sont pas indispensables) mais si vous avez besoin d'une garantie que les événements vont tirer cela ne vous aidera peut-être pas. Voici une liste des événements de l'application: http://msdn.microsoft.com/en-us/library/office/ff841714(v=office.14).aspx – Christina

+0

Merci pour les commentaires. Alors pouvez-vous m'aider avec quel événement se déclenchera lorsque je lancerai Word, ce qui me permettra de modifier une propriété sur ActiveWindow? – Mark

Répondre

0

Je commencerais par DocumentOpen et NewDocument. Un niveau de complexité supplémentaire existe si vous devez prendre en charge les documents ProtectedView; Word déclenche un événement différent. J'ai trouvé que si j'essaye de vérifier pour cet événement (et il ne se produit pas) cela soulève une erreur. Je n'ai pas eu beaucoup de chance et finalement ça ne valait pas le temps que je dépensais. J'ai posté un exemple ci-dessous d'un code qui ouvre le volet de style lorsqu'un document est ouvert ou un nouveau créé (en supposant que le complément est en cours de chargement) et étend la marge de style en mode brouillon s'il n'est pas déjà développé.

Dans mon module d'interface utilisateur:

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 

Ensuite, dans un module de classe I appelle 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 

autres que les mises en garde que je l'ai mentionné plus haut, le seul problème que j'ai eu est si un utilisateur a le code automatique dans son modèle normal aussi bien. Cela n'est apparu qu'une seule fois, donc je ne l'ai pas étudié.

Je voudrais pouvoir trouver le site où j'ai appris à ce sujet (et dont la Register_Event_Handler a été obtenu Si je trouve que je vais ajouter un commentaire

+0

Oh, évidemment j'utilise Word avec le ruban (2010 dans mon cas). J'aurais dû demander quelle version vous vouliez pour ça .... – Christina

Questions connexes