2014-05-14 3 views
0

Excuses d'avance si cela finit par être générique. J'ai fait des recherches à ce sujet et fait un blanc complet.Excel Ouvert Documents Historique Historique - Ajouter

Excel est génial, j'adore Excel. Tant et si bien que la section "Documents récents" ne me sert presque à rien car j'utilise autant de feuilles de calcul dans un nombre incroyable d'emplacements.

J'ai recherché un moyen de se connecter (en utilisant VBA comme un AddIn) documents quand ils sont ouverts. Même si c'est quelque chose d'aussi simple qu'un fichier texte avec la date, je n'arrive pas à comprendre comment le code VBA "sait" quand un fichier est ouvert (ce qui, avec un fichier texte, est tout ce que je veux à faire à ce stade).

Existe-t-il un moyen pour que le VBA recherche cette action à partir d'une instance d'Excel?

+1

Je pense que vous trouverez votre réponse lorsque vous regardez http://stackoverflow.com/q/8419728/1967396, et en particulier le lien vers http://www.cpearson.com/excel/AppEvent.aspx décrit comment faire cela. – Floris

+0

toutes ces feuilles de calcul sont-elles activées? Si ce n'est pas le cas, comment envisagez-vous d'exécuter un événement? –

+0

@mehow je comprends que si vous avez un complément qui exécute des événements d'application, et c'est celui qui surveille tous les événements "classeur ouvert" et les enregistre , les feuilles de calcul individuelles n'ont pas besoin d'être activées. – Floris

Répondre

2

Les étapes suivantes (adaptées de l'excellente publication à http://www.cpearson.com/excel/AppEvent.aspx) sont la manière "minimalement viable" de faire ce dont vous avez besoin.

  1. ouvrir un nouveau classeur
  2. ouvrir l'éditeur Visual Basic
  3. Insérez un module de classe; dans la fenêtre des propriétés, définir le nom de classe à CExcelEvents
  4. Ajoutez le code suivant dans le module de classe:
 
    Private WithEvents App As Application 

    Private Sub Class_Initialize() 
     Set App = Application 
     MsgBox "initialized the class!" 
    End Sub 

    Private Sub App_WorkbookOpen(ByVal Wb As Workbook) 
     MsgBox "New Workbook was opened: " & Wb.Name 
    End Sub 

  5.   Faites un clic droit sur l'élément « ThisWorkbook » dans l'explorateur de projet, et sélectionnez "Afficher le code"
  6.   Ajoutez le code suivant:

Private XLApp As CExcelEvents 

Private Sub Workbook_Open() 
    Set XLApp = New CExcelEvents 
End Sub 

Cela crée une instance de la classe CExcelEvents et "active la gestion des événements" lorsque l'addIn est chargé.

Enfin, enregistrez le fichier myEvents.xlam à l'endroit où sont stockés AddIns - cela varie en fonction de la machine ...

Si maintenant vous fermez le fichier, puis ajoutez le Addin (encore une fois, dépend de votre environnement que ce soit à partir du ruban de développement ou le menu Outils), vous devriez voir une boîte de dialogue qui dit "initialisé la classe!". Cela montre que l'addIn est correctement installé et fonctionne. Maintenant, lorsque vous ouvrez un classeur, une autre boîte de message apparaît: "Nouveau classeur a été ouvert:" avec le nom.

De toute évidence, vous voudrez vous débarrasser des boîtes de message, et mettre un code "utile" qui fait ce que vous voulez faire (par exemple, consigner le nom du classeur dans un fichier). J'ai l'impression que vous n'avez pas besoin d'aide pour ce dernier - si j'ai tort, faites-le moi savoir.

+0

C'est à peu près exactement ce que je cherchais, merci! A vérifié le site Web de Chip Pearson mais doit l'avoir manqué (ce site est vraiment une aubaine pour VBA!) – bmgh1985

+1

Oui - le site Web de Chip est une excellente ressource, mais peut être "riche". La réponse que j'avais reliée plus tôt vous met au bon endroit, mais même alors, il peut être difficile de transformer ces choses exactement en ce que vous voulez. J'ai pensé qu'un "petit morceau de code" pourrait être utile au-delà de ce dont vous avez besoin aujourd'hui, alors j'ai décidé de l'écrire. Et je pourrais l'utiliser moi-même un jour ... Content que ça vous soit utile. – Floris

+1

+1 pour cette réponse. Je pense que beaucoup de futurs lecteurs pourraient trouver cela utile –