News & Tipps zu Microsoft Outlook

Lesen Sie hier einige der besten Beiträge aus SmartTools Outlook Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Outlook.

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.