Outlook: Mitglieder von mehreren Kontaktlisten exportieren

Ich gebe DSGVO Kurse und hebe mir die Mailadressen der TeilnehmerInnen für jeden Kurs ein einer Outlook-Verteilerliste auf. Genauer gesagt, in einer Kontaktgruppe.
Bei Office 365 gibt es noch eine ganze Reihe anderer Gruppen-Typen, aber von denen rede ich hier nicht. Und natürlich habe ich eine Einwilligung dafür :)

Nun würde ich aus diesen vielen Kontaktgruppen eine Liste bei einem Newsletterprovider machen. In diesem Fall Mailchimp, aber das würde mit anderen Providern genauso funktionieren, wenn ich die Kontakte aus den Gruppen in eine CSV Datei exportieren kann.

Die Frage ist nur, wie?
In Outlook kann man nur eine Mail an eine Gruppe beginnen (nicht abschicken), dann kann man die einzelnen Adressen aus der Mail in eine Textdatei kopieren. Sehr unpraktisch, man muss jede Gruppe einzeln anfassen.

Also habe ich nach einer eleganteren Lösung gesucht und habe folgendes Outlook Makro geschrieben. In diesem Fall nimmt es alle Kontaktgruppen aus einem bestimmten Ordner und exportiert sie in eine CSV Datei.

Um das Makro zu nutzen, muss man erst einmal das Entwickler-Menü in Outlook aktivieren. Rechts-Klick in das Menüband, Menüband anpassen, dann auf der rechten Seite “Entwicklermenü” aktivieren:

Nun das Entwicklermenü aufrufen und Visual Basic starten:

Das folgende Skript gehört in das “Modul1”. Falls es das noch nicht gibt, im Menü Einfügen / Modul benutzen. Dann sollte das so aussehen:

Der folgende Code gehört dann in der rechte Fenster, die makierten Stellen im Code müssen angepasst werden. Die fetten Kommentare müssen natürlich raus.
Hier werden jetzt nur Kontaktgruppen im Ordner “Ein Ordner” exportiert.

Public Sub getcontacts()
Dim objOL As Outlook.Application
Set objOL = New Outlook.Application
Set objNS = objOL.GetNamespace("MAPI")
Set objFolder = objNS.GetDefaultFolder(olFolderContacts)

Open "C:\contacts.csv" For Output As 1    <= Pfad anpassen

Print #1, "Liste,Name,EMail"

Set ContactFolders = objFolder.Folders
For Each Folder In ContactFolders
Rem Debug.Print Folder.AddressBookName
If (Folder.AddressBookName = "Ein Ordner") Then    <= Ein Ordner ist der Kontaktordner, in dem die Kontaktgruppen untergebracht sind
Set Contacts = Folder.Items
End If
Next

For Each myItem In Contacts
If (myItem.Class = olDistributionList) Then
Rem Debug.Print myItem.DLName
For i = 1 To myItem.MemberCount
Set contact = myItem.GetMember(i)
Rem Debug.Print contact.Name & " - "; contact.Address
Print #1, myItem.DLName & "," & contact.Name & "," & contact.Address
Next
End If
Next

Close #1

End Sub

Das Makro startet man mit dem grünen Pfeil. Übrigens gibt es einen Fehler, wenn die Datei schon existiert. Wenn das Verhalten nicht gewünscht ist, kann man “For Output” in “For Append” ändern.

Die auskommentierten Ausgaben (“Rem Debug.Print…”) sieht man, wenn mit Ansicht / Direktfenster die Konsole öffnet. Und natürlich das “Rem” entfernt…

Lass andere teilhaben...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.