Hallo Buki,
ich hab zwar leider kein Outlook und kann dir daher nur bedingt helfen. Aber ich kann dir ein bisschen was über die korrekte Verwendung von VBA erzählen. Hier mal ein paar Gedanken, die mir beim Lesen deiner Frage im Kopf rumschwirrten.
Die Schleife Do While bFolderFound wird nur ausgeführt wenn bFolderFound zuvor auf True gesetzt wurde. Ich vermute mal, das passiert in dem hier nicht gezeigten Codeausschnitt [...]
Outlook.ActiveExplorer.Selection gibt zunächst erstmal ein Selection-Objekt zurück. Ob dieses überhaupt eine Auflistung enthält, kannst du dann mit dessen Count-Eigenschaft ermitteln. Ist der Wert >1 ist alles in Ordnung. Bei 0 wird die For Each-Schleife nicht durchlaufen. Als nächstes ist die Art der zurückgegebenen Objekte interessant. Ob es sich um Objekte vom Typ AppointmentItem, MailItem, MeetingItem, oder TaskItem handelt kannst du mit der Location-Eigenschaft bestimmen. Oder du gibst einfach das erstbeste Item der Auswahl zurück und verwendest die Typename-Funktion um zu ermitteln was du da vor dir hast. So weißt du zumindest schonmal, ob du überhaupt die richtigen Objekte zurückgibst.
In 99,5% aller Fälle, kann man Auflistungsobjekte mit For Each durchlaufen. Das ist richtig. Manchmal gibt es aber auch Auflistungen, die nicht auf For Each reagieren. (z.B. im Scripting.Filesystem-Objekt). Solche Objekte kannst du dann leider nur mit einer normalen For-To-Next-Schleife von 1 bis .Count durchlaufen und das gewünschte Objekt über dessen Itemindex anwählen. Ob Das Selection-Objekt in Outlook For Each unterstützt weiß ich nicht. Kannst du nur probieren. In den Beispielen der Microsoft-Docs wird immer nur die For-To-Next-Variante verwendet.
Dass dein Beispiel im Einzelschritt funktioniert kann ich mir nicht vorstellen. Denn spätestens bei DoWhatMustBeDone sollte ein Laufzeitfehler aufpoppen. Hier hast du schlicht eine falsche Schreibweise gewählt. Richtig wäre entweder Call DoWhatMustBeDone(oCurItem) oder DoWhatMustBeDone oCurItem Falls du dann noch immer einen Fehler erhältst, solltest du den Parameter oCurItem in deiner Sub mit dem Schlüsselwort ByVal definieren. Diese Fehler kommen natürlich nicht, wenn du mit OnError arbeitest. Dann merkst du evtl. gar nicht, wenn etwas falsch ist.
Was stört dich genau an CurrentFolder.Items.Item(i) ? Das sollte theoretisch genauso arbeiten, wie man es erwartet. Bei der Zuweisung zu Variablen, darfst du natürlich nicht das Set vergessen.
Mehr fällt mir zu dem Thema erstmal nicht ein. Vielleicht findet sich ja hier doch noch jemand, der deinen Code im Outlook testen kann und uns verrät woran es nun wirklich hakt.
Gruß Mr. K.
|