Application.OnTime in Add-In Workbook_Open

J'ai construit un complément Excel personnalisé et je tente actuellement de find un moyen d'inciter les users via VBA lorsque de nouvelles versions de l'add-in sont disponibles.

J'ai essayé juste d'utiliser l'événement workbook_open pour vérifier la dernière version et ensuite requestr à l'user avec un formulaire d'user, mais j'ai découvert que lorsque Excel charge un add-in qui triggers une forme d'user, Excel cesse de charger le classur que l'user a réellement essayé d'ouvrir et recharge le complément. Donc, alors que la forme de l'user fonctionne comme je le voulais, l'user obtient un shell Excel vierge (lecture sans feuilles) avec un complément chargé.

J'ai donc envisagé d'utiliser Application.OnTime pour reporter le VBA jusqu'à ce que le file add-in et target soit ouvert. J'ai eu l'printing ici et ici que cela est possible, mais je ne peux que le faire fonctionner dans un file .xlsm et pas un file .xlam .

Voici le code avec lequel je teste:

 Sub Workbook_Open() Application.OnTime Now() + TimeValue("00:00:05"), "Test_Addin.xlam!Versioning.Notify_User" End Sub 

Et dans un module de code régulier:

 Sub Notify_User() MsgBox "Hello" End Sub 

Alors, ma question: Est-ce que je fais quelque chose de mal ici?

Je me request s'il y a quelque chose à propos de la façon dont un add-in est chargé / conçu qui l'empêche de réaliser ce type d'action.

Alternativement, existe-t-il un moyen différent de faire cela que vous pouvez penser?

J'ai lu une publication de blog intéressante (et des commentaires) de Dick Kusleika sur ce sujet, mais il semblait que certaines personnes mettent un contrôle de version dans chaque sous-procédure … J'ai beaucoup de procédures, donc ça ne semble pas être un bon alternative, même si je devrais peut-être y recourir.

Eh bien, le time est essentiel, donc j'ai eu recours à l'option la less souhaitable: un contrôle au début de chaque procédure.

Pour les parties intéressées, voici comment je l'ai fait:

Quelque part vers le début de chaque sous-procédure, je place cette ligne de code:

 If Version_Check Then Call Notify_User 

Et dans mon module de version, je place cette fonction et cette procédure:

 Function Version_Check() As Boolean Installed = FileDateTime(ThisWorkbook.FullName) Available = FileDateTime("\\NetworkDrive\Test_AddIn.xlam") If Installed < Available Then Version_Check = True End Function Sub Notify_User() Update_Check.Show End Sub 

Ainsi, chaque fois qu'une procédure est exécutée, ce code vérifie une version sur notre réseau d'entreprise avec un timeout de date modifié supérieur au jour de l'ajout installé.

Je suis toujours très ouvert à d'autres moyens de vérifier les nouvelles versions, alors n'hésitez pas à publier une réponse.