0
votes

Rerun Outlook VBA Script 'Application_STARTUP' régulièrement

J'ai (en utilisant des informations de SO) implémenté une macro VBA qui fonctionne pour traiter de nouveaux courriels après que les options "Exécuter un script" ont été supprimées des règles d'Outlook. Je fais cela comme suit: xxx

Cependant, l'écouteur de la boîte de réception semble arrêter de fonctionner et que je devais redémarrer Outlook ou réorganiser la macro "Startup 'manuellement pour le ramener dans la vie - Cela semble être un problème commun sans solution.

question - Je ne suis pas un expert VBA et je me demandais si je peux simplement réorganiser le "Application_Startup" Macro pour redémarrer l'auditeur à la fin de l'élément 'items_ItemADD (item byval comme objet)' macro?


3 commentaires

Cela ne vous fera aucun bien - vous savez que l'auditeur d'événements fonctionne lorsque des articles d'événement.Itemadd. Et si ce n'est pas le cas, itacadd ne tirera pas de toute façon.


@Dmittrystrebleblechenko Eh bien, je ne sais pas que comme je suis nouveau à Outlook VBA 😀 mais je sais que cela cesse de travailler et je sais que le redémarrage des perspectives semble le faire fonctionner à nouveau, alors je me demande comment le garder en marche quand tout Ma recherche a révélé que cela serait un problème connu sans solution. Espérons que la solution postée comme une réponse fera l'affaire.


Exécutez un code chaque demi d'heure Stackoverflow.com/Questtions/12257985/...


3 Réponses :


0
votes

Vous pouvez ajouter une nouvelle macro qui effectue les actions présentes à l'origine dans l'événement Application_Startup CODE>. Ensuite, vous pourriez ensuite faire référence à ce sous à la fin de votre items_Itemadd code> macro.

Private WithEvents Items As Outlook.Items

Public Sub Application_Startup()
   Call startupevents
End Sub

Sub startupevents()

' Add an inbox event listener
  Dim olApp As Outlook.Application
  Dim objNS As Outlook.NameSpace
  Set olApp = Outlook.Application
  Set objNS = olApp.GetNamespace("MAPI")
  ' default local Inbox
  Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
  MsgBox "Startup macro run"

End Sub

Private Sub Items_ItemAdd(ByVal item As Object)
  'Do something on new email arrival
'
'
'
Call startupevents
End Sub


4 commentaires

Je ne vois pas comment cela peut fonctionner - si ItemAjouter l'événement incendie, vous savez que tout est bon et qu'il n'est pas nécessaire de réinitialiser le gestionnaire d'événements. Et si ItemAjouter l'événement ne tire pas, votre code réinitialisant le gestionnaire d'événements ne fonctionnera de toute façon pas.


@DMITRYSSTREBLECHENKO Cela dépend du moment et de la raison pour laquelle le gestionnaire d'événements s'arrête. itemAjouter semble fonctionner un ou deux fois avant d'arrêter de travailler. S'il est désactivé après avoir exécuté quelques fois une fois initialement mis en place, puis la réinitialiser de startupevents chaque fois que cela devrait le garder fonctionner.


@Tim - Il suffit de confirmer que cela ne fonctionne pas. Je peux réexécuter manuellement le StarTutuPEvents et qui obtenez-le de fonctionner à nouveau, de sorte que l'auditeur de la boîte de réception échoue à un autre point et items_Itemadd ne s'appelle pas du tout.


Merci pour l'entrée. J'ai fait ma routine pour définir la catégorie sur la base de mots dans le sujet, un sous public, donc si cela cesse de fonctionner, je peux le courir manuellement et redémarrer également l'auditeur de la boîte de réception manuellement.



1
votes

Si vous avez besoin de réinitialiser le gestionnaire d'événements itemAjouter, je ne pense pas à utiliser itemAjouter pour le faire.

Vous pouvez soit utiliser une minuterie (qui n'existe pas dans VBA), soit vous pouvez utiliser un autre événement qui incendie plus ou moins fréquemment, tel que l'événement Explorer.SelectionChange ( Explorer peut être récupéré à partir de application.activeExplorer ).


5 commentaires

Je suppose que la question sous-jacente de "Pourquoi le gestionnaire d'événements d'ItemAjouter cesse-t-il" reste-t-il sans réponse? J'ai cherché mais j'ai trouvé aucune réponse. juste des suggestions telles que définir toutes les variables pour "rien" et "ajouter un applicatif_quit () '


Il peut arrêter de tirer si une connexion avec le service est perdue, mais qui ne s'applique qu'au mode en ligne (par opposition au mode mis en cache).


Merci pour l'entrée. J'ai fait ma routine pour définir la catégorie sur la base de mots dans le sujet, un sous public, donc si cela cesse de fonctionner, je peux le courir manuellement et redémarrer également l'auditeur de la boîte de réception manuellement.


J'ai remarqué l'erreur occasionnelle de Additem - "Mismachatch de type 13", j'ai donc élargi la routine du gestionnaire d'erreur pour imprimer également le sujet. Peut-être que cette erreur est la cause de l'additillems arrêter de travailler ou peut-être que c'est un symptôme d'être cassé,


Vous devez vraiment montrer les extraits pertinents du code de votre yeurt. Gardez à l'esprit que la boîte de réception peut contenir des articles autres que MailItem, tels que MeetingItem, ReportItem, etc.



0
votes

Le code plus simple peut avoir un impact.

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Application_Startup
End Sub


0 commentaires