Ich wollte VBA-Code entwickeln, der:
Der Code funktioniert perfekt AUSSER; Zum Beispiel
Problem: Nach dem Ausführen des Codes soll es alle Dateien verarbeiten und löscht sie alle nicht die Hälfte von ihnen in jedem Lauf. Ich möchte, dass alle Artikel in einem einzigen Durchlauf verarbeitet werden.
Übrigens, dieser Code wird jedes Mal ausgeführt, wenn ich das Outlook öffne.
%Vor% Wahrscheinliche Ursache: Wenn Sie InboxMsg.Move
ausführen, werden alle Nachrichten in Ihrem Posteingang nach dem verschobenen um eine Position in der Liste erhöht. Also überspringst du einige von ihnen. Dies ist ein großes Ärgernis mit VBAs For Each
-Konstrukt (und es scheint auch nicht konsistent zu sein).
Wahrscheinliche Lösung: Ersetzen Sie
%Vor%mit
%Vor%Auf diese Weise iteriert man vom Ende der Liste rückwärts. Wenn Sie eine Nachricht an gelöschte Objekte verschieben, spielt es keine Rolle, wenn die folgenden Elemente in der Liste um eins erhöht werden, weil Sie sie ohnehin bereits verarbeitet haben.
Es ist oft keine gute Idee, den Inhalt eines (Teil-) Satzes von Elementen zu ändern, während Sie über sie hinweggehen. Sie könnten Ihren Code so ändern, dass er zuerst alle Elemente identifiziert, die verarbeitet werden müssen, und sie zu Collection
hinzufügt. Verarbeiten Sie dann alle Elemente in dieser Sammlung.
Grundsätzlich sollten Sie keine Objekte aus dem Posteingang entfernen, während Sie den Inhalt durchlaufen. Sammeln Sie zuerst alle Elemente, die Sie verarbeiten möchten (in Ihrer Inbox-Schleife). Wenn Sie mit dem Schleifen fertig sind, verarbeiten Sie diese Sammlung von Elementen.
Hier ist ein Pseudocode, der das demonstriert:
%Vor%Tags und Links vba outlook outlook-vba for-loop