Events sind dafür perfekt.
Ereignisse werden von der Anwendung ausgelöst, wenn Schlüsseländerungen vorgenommen werden. Dies ermöglicht es Ihnen, eine zeitgesteuerte Schleife zu vermeiden.
Mit der Anweisung WithEvents können Sie eine Variable erstellen, die Ereignisaufrufe verarbeiten kann.
In diesem Beispiel zeigt die Variable f auf den Posteingang. Wenn ein Element aus diesem Ordner gelöscht wird, wird die Prozedur f_BeforeItemMove
aufgerufen. Es zeigt die Anzahl der verbleibenden Elemente minus eins an. Wir subtrahieren eins, weil das Ereignis vor dem Löschen ausgelöst wird (dies gibt Ihnen die Möglichkeit, es zu löschen, wenn Sie es wünschen).
Da wir ein object variable verwenden, müssen wir es erstellen und zerstören. Dies tritt auf, wenn die App gestartet wird & beendet.
Private WithEvents f As Folder ' Inbox folder, used to monitor events.
Private Sub Application_Startup()
' Register for events.
Set f = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
End Sub
Private Sub Application_Quit()
' Unregister.
Set f = Nothing
End Sub
Private Sub f_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As MAPIFolder, Cancel As Boolean)
' Called when an item is moved out of the inbox.
' Display the number of items left, after delete.
MsgBox (f.Items.Count - 1)
End Sub
Dieser Code muss zur Klasse ThisOutlookSession hinzugefügt werden. Die Start- und Beendigungs-Ereignisse werden nicht ausgelöst, wenn sie in ein anderes Modul eingefügt werden.
EDIT
Die ursprüngliche Lösung war oben, Trigger, kurz bevor ein Artikel aus dem Posteingang gelöscht. Der OP wollte Code, der gleich danach gefeuert wurde. Diese neue Lösung macht das.
Private WithEvents f As Folder ' Inbox folder, used to monitor events.
Private WithEvents i As Items ' Items within folder above
Private Sub Application_Startup()
' Register for events.
Set f = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set i = f.Items
End Sub
Private Sub Application_Quit()
' Unregister.
Set i = Nothing
Set f = Nothing
End Sub
Private Sub i_ItemRemove()
' Called each time an item is moved out of the inbox.
' This can be triggered by moving an item to another folder
' or deleting it.
' Display the new inbox item count.
MsgBox i.Count
End Sub
Wie zuvor; Dieser Code sollte innerhalb ThisOutlookSession
platziert werden. Sie müssen Outlook neu starten oder Application_Startup
manuell ausführen.
Danke für deine Antwort. Ich habe das versucht und leider feuert es nichts. Ich habe den Code in ThisOutlookSession platziert und auf den Ordner gerichtet, den ich überwachen möchte, aber er tut nichts, wenn ich E-Mails aus dem Posteingang lösche oder verschiebe. –
Entschuldigung, ich hätte hinzufügen sollen; Damit dieser Code funktioniert, müssen Sie entweder 'Application_Startup' manuell ausführen oder Outlook schließen und erneut öffnen. Um manuell zu starten, klicken Sie einfach in den Sub und drücken Sie F5. Warum? Weil die f-Objektvariable über die SET-Anweisung erstellt werden muss. Sobald dies erledigt ist, wird es auf Ereignisse reagieren. –
Das funktioniert jetzt gut, dass ich Outlook neu gestartet habe. Vielen Dank. Eine Frage allerdings. Ich brauche das, um zu laufen, nachdem das Poststück verschoben worden ist, nicht gerade vorher, da mein folgender Code die Zahl der Postfächer überprüft und nur dann ausgeführt wird, wenn es 0 entspricht. Da das vorher läuft, denkt es, dass noch eine E-Mail in dem Feld ist und mein nächster Teil läuft nicht. –