Beitrag aus SmartTools Outlook Weekly
Alle E-Mail-Adressen aus einem Outlook-Ordner mit Unterordnern auslesen
Outlook 365 2021 2019 2016 2013 2010
Vor einiger Zeit haben wir einen Tipp veröffentlicht, in dem es um die Ausgabe aller E-Mail-Adressen in einem bestimmten Outlook-Ordner ging. Die VBA-Lösung listete jeweils die Adressen aus dem per Dialogfenster ausgewählten Ordner auf. Wir haben zu dem Tipp mehrere Erweiterungswünsche: Das VBA-Makro soll so erweitert werden, dass gleichzeitig alle Adressen aus den Unterordnern des ausgewählten Ordners ausgegeben werden. Mit VBA ist viel möglich, so auch eine Erweiterung unseres Makros, mit der Sie bei der Adressenausgabe nicht nur einen einzigen Ordner, sondern auch alle Unterordner einbeziehen.
Zu diesem Zweck müssen Sie die Ordnerstruktur rekursiv abarbeiten. Das heißt, dass Sie eine Funktion schreiben müssen, die sich immer wieder selbst aufruft, solange es weitere Unterordner gibt.
Ersetzen Sie den Makrocode aus unserem früheren Tipp dazu durch folgende VBA-Anweisungen:
Sub ReadAdrFromFolder()
Dim olNameSpace As NameSpace
Dim olFolder As MAPIFolder
Dim olItem As Object
On Error Resume Next
Set olNameSpace = Application.GetNamespace("MAPI")
Set olFolder = olNameSpace.PickFolder
'Abbrechen geklickt
If olFolder Is Nothing Then Exit Sub
ReadAdrFromSubFolders olFolder
Set olFolder = Nothing
Set olNameSpace = Nothing
End Sub
Private Sub ReadAdrFromSubFolders(ParentFolder As MAPIFolder)
Dim olItem As Object
Dim olSubFolder As MAPIFolder
Dim strFolderName As String
On Error Resume Next
Debug.Print "--- " & ParentFolder.Name & " ---"
For Each olItem In ParentFolder.Items
Debug.Print olItem.SenderName & _
" <" & olItem.SenderEmailAddress & ">"
Next olItem
For Each olSubFolder In ParentFolder.Folders
ReadAdrFromSubFolders olSubFolder
Next olSubFolder
Set olSubFolder = Nothing
Set olItem = Nothing
End Sub
Die Hauptprozedur "ReadAdrFromFolder" öffnet wie gehabt per "PickFolder" das Dialogfenster für die Ordnerauswahl. Dann aber führt sie keine For Each-Schleife aus, sondern ruft die Prozedur "ReadAdrFromSubFolders" auf, der sie den aktuell ausgewählten Ordner als Parameter übergibt.
Die Hilfsprozedur listet zunächst in gewohnter Weise die E-Mail-Adressen aus dem Ordner im Direktbereich der Entwicklungsumgebung auf. Hinzugefügt wurde lediglich eine Zeile, die vorher noch den Ordnernamen ausgibt.
Danach beginnt der rekursive Teil: In einer For Each-Schleife arbeitet "ReadAdrFromSubFolders" alle Unterordner des aktuellen Ordners ab und ruft sich immer wieder selbst auf. Dieses Mal wird dabei der jeweilige Unterordner als Parameter übergeben.
So beginnt das Spiel von vorn, indem zuerst der Ordnername sowie die E-Mail-Adressen ausgegeben werden und dann erneut alle eventuell vorhandenen Unterordner abgearbeitet werden.
Auf diese Weise decken Sie die gesamte Hierarchie des eingangs ausgewählten Outlook-Ordners ab.