In diesem Blogbeitrag werde ich einen Makro-Code für Microsoft Office vorstellen, der es ermöglichen soll, Serien-E-Mails mit individuellen Anhängen zu versenden. Was man dazu braucht, ist ein Word-Dokument, eine Excel-Liste und Outlook.
Update am 25.03.2025
Zeit für eine Frischzellenkur: Die vorher verschiedenen Code-Varianten wurden in eine Code-Datei zusammengeführt. Der Code wurde insgesamt modernisiert und entschlackt. Außerdem wurde der Code umfangreich kommentiert.
VBA-Makros sind kleine Programme, die man in Microsoft Office-Anwendungen wie Excel oder Word erstellen und ausführen kann. Mit VBA-Makros kann man automatisch wiederkehrende Aufgaben erledigen, komplexe Berechnungen durchführen oder interaktive Benutzeroberflächen gestalten. VBA-Makros sind nützlich, weil sie Zeit und Mühe sparen, Fehler vermeiden und die Produktivität steigern.
- Word benötigst du für den E-Mail-Inhalt. Schreibe dort wie gewohnt deine Nachricht mit Anrede, Inhalt und Abschiedsformel.
- Excel brauchst du, um die nötigen Daten für die Serien-E-Mails bereitzustellen. Man braucht also eine Spalte für Anrede, Vorname, Nachname, E-Mail-Adresse, Betreff und Anhang.
- Outlook wird benötigt, um die generierten E-Mails zu versenden.
1.
Als erstes brauchst du eine Excel-Liste, welche die nötigen Informationen enthält. Das Makro bezieht die nötigen Daten nämlich aus dieser Tabelle. Was dort enthalten sein kann, sind ein paar Spalten mit der Anrede, den Vor- und Nachnamen, die E-Mail-Adresse, CC- und BCC-Adressen, der E-Mail-Betreff und der Dateipfad zum Anhang.
Nicht alle Spalten müssen Daten enthalten.
Wem es zu anstrengend ist, den Dateipfad zu aufzuschreiben, kann auf einen kleinen Trick zurückgreifen. Gehe zu dem Reiter „Einfügen“ und wähle ganz rechts „Objekt“ (steht neben Kopf- und Fußzeile) aus. Im neuen Fenster klickst du dann auf „Aus Datei erstellen“ und dann auf „Durchsuchen“. Nun wählst du ganz einfach die gewünschte Datei aus. Klickt auf „Auswählen“. Danach wird dir in der Zeile neben „Durchsuchen“ der Pfad zur Datei angezeigt. Den kannst du kopieren und in die entsprechende Zelle legen.
Alternativ kannst du im Datei Explorer die Datei auswählen und dort, z. B. über das Kontextmenü, den Pfad kopieren. Denn Pfad kannst du in Excel einfügen.
Wenn die Anhänge zum Beispiel aus den Vor- und Nachnamen der jeweiligen Person in der Zeile bestehen, könntest du auch mit Hilfe einer Excel-Formel einen Dateipfad generieren lassen. Das ist dann nützlich, wenn dies bei den restlichen Datensätzen genau dasselbe Schema ist. Eine Formel könnte dann so aussehen:
=“D:\Dokumente\“&D2&“_““C2&“.pdf“
Diese könnte man dann auf die folgenden Zellen anwenden und so schnell kann man die Dateipfade erstellen. Sollte es ein generischer Dateiname sein, nur die Nummer ist jeweils fortlaufend, dann kann man den Dateipfad auch einmal in eine Zelle schreiben und die Zelle dann auf die anderen Zellen automatisch damit ausfüllen lassen.
Es ist auch möglich, mehrere Dateien an die E-Mail anzuhängen. Dafür sollten die Dokumentenpfade in einer Zelle hintereinander, getrennt durch ein Komma, folgen. Es sollte also bspw. so aussehen: D:/Dokumente/Test1.pdf,D:/Dokumente/Test2.pdf
Bei diesem Code müssen allerdings nicht zwingend mehrere Dateien angehängt werden. Auch ein Anhang wird berücksichtigt und versendet. Nach dem Komma als Trennzeichen kann auch ein Leerzeichen folgen. Die Pfade können auch in Anführungszeichen stehen (gerade, wenn man den Pfad aus dem Datei Explorer kopiert).
Ich empfehle, dass das Arbeitsblatt mit den Kontaktinformationen an erster Stelle kommt. Solltest du also eine Excel-Datei mit mehreren Arbeitsblättern haben, so verschiebe das Blatt mit den Daten an Position 1. Ansonsten wirst du im späteren Prozess auch gefragt, aus welchem Arbeitsblatt die Daten gezogen werden sollen.
2.
Danach kannst du deinen E-Mail-Text in Word schreiben. Wichtig zu beachten ist, dass wir nicht mit der Sendungs-Funktion in Word arbeiten. Seriendruckfelder bzw. Platzhalter werden also nicht über diese Funktion eingefügt, sondern als Text und zwar wie folgt: Nehmen wir an, wir wollen die Grußformel schreiben, dann schreiben wir folgendes:
%Anrede% %Titel% %Vorname% %Nachname%,
wir freuen uns, Ihnen bekannt geben zu dürfen …
Diese Platzhalter werden später durch das Makro für jede E-Mail individuell anhand der Excel-Liste ersetzt. Da hier davon ausgegangen wird, dass die geläufige Grußformel „Sehr geehrte/r Frau/Herr“ benutzt wird, wird diese Floskel im Feld %Anrede% mit eingefügt. Ob die weibliche oder männliche Form der formellen Anrede genutzt wird, richtet sich danach, ob im Feld „Anrede“ Herr oder Frau genutzt wird. Möchte man nicht mit der formellen Anrede arbeiten, kann in diesem Feld auch eine eigene Anredeform eingetragen werden. Später im Prozess des Codes wirst du gefragt, ob du standardmäßig die formelle Anrede oder eine eigene Anrede verwenden willst.
Es ist außerdem auch kein Problem, Zeichenketten fett, kursiv oder unterstrichen etc. zu setzen. Auch Hyperlinks werden übernommen. Die Schriftart und die Schriftgröße werden auch abgebildet, solange es im Dokument einheitlich ist. Bilder werden allerdings nicht übernommen!
3.
Lade dir meine Code-Datei bzw. Makro-Datei herunter, welche die notwendigen Funktionen bereitstellt. Diese Datei findest du auf meiner GitHub-Seite:
Hier geht es zum Code:
Auf meiner GitHub-Seite musst du zuerst auf die Code-Datei klicken (wenn du über den Button gehst, gelangst du direkt zum Code):
Hiernach musst du nur noch die Datei über den Download-Button rechts oben herunterladen (ggf. noch dem Browser bestätigen, dass du diese Datei wirklich herunterladen/behalten möchtest).
4.
Jetzt kommt der spannende Teil: Das Makro muss in die Word-Datei eingefügt und ausgeführt werden. Im Folgenden erkläre ich, wie man dies bewerkstelligt.
Um ein VBA-Makro in Word einzufügen, musst du zunächst den Reiter „Entwicklertools“ zum Menü hinzufügen. Das geht so:
- Klicke auf die Registerkarte „Datei“ und dann auf „Optionen“.
- Wähle im Dialogfeld „Word-Optionen“ die Kategorie „Menüband anpassen“ aus.
- Aktiviere im rechten Bereich unter „Hauptregisterkarten“ das Kontrollkästchen „Entwicklertools“.
- Klicke auf „OK“. Nun siehst du den Reiter „Entwicklertools“ im Menü.
Sodann kommen wir zum nächsten Schritt. Um ein VBA-Makro zu erstellen oder einzufügen, musst du den Visual Basic-Editor öffnen:
Klicke auf diese Schaltfläche und es müsste sich ein neues großes Fenster mit dem Titel „Microsoft Visual Basic for Applications“ öffnen. Gehe dann oben auf „Datei“ und wähle „Datei importieren“ aus.
Wähle in deinen Dateien die eben heruntergeladene Code-Datei mit der Dateiendung .bas aus.
Hiernach müsste nun links unter „Module“ die Datei „Serienmails“ erscheinen. Diese öffnest du, indem du hierauf doppelklickst.
Alternativ kannst du den Code bei GitHub auch kopieren und in ein neues Modul einfügen. Klicke dafür im VBA-Editor auf „Einfügen“ und dann auf Modul. Das müsste dann links erscheinen und müsste „Modul1“ heißen. Dies musst du öffnen und dann den kopierten Code auf GitHub dort einfügen. Ggf. musst du noch die erste Codezeile löschen, welche den Modulnamen „Serienmails“ festlegt.
Hast du den Code eingefügt, fehlt noch eine kleine Sache. Und zwar gehst du oben auf „Extras“ und dann zu „Verweise„. In der Liste muss auf jeden Fall „Microsoft Excel 16.0 Object Library“, „Microsoft Word 16.0 Object Library“ und „Microsoft Office 16.0 Object Library“ durch einen Haken aktiviert sein. Wenn nicht, durchsuche die Liste nach dem Verweis.
Ist das auch getan, bist du eigentlich soweit, um das Makro zu aktivieren. Dafür kannst du im VBA-Editor auf den grünen Abspiel-Button oben in der Leiste klicken. Sodann öffnet sich zunächst der Datei-Manager und dort musst du die Excel-Liste auswählen. Beantworte die Abfragefenster, die sich öffnen. Je nach dem, was du ausgewählt hast, werden sich die E-Mails nur generiert oder sofort versendet.
Es kann passieren, dass Fehler auftreten können. So kann bspw. ein Dateipfad nicht gültig sein. Das Programm sagt dir dann, an welcher Stelle dieser Fehler vorliegt, sodass du ihn berichtigen kannst. Das Programm beendet sich dann zunächst. Wenn die Fehler behoben sind, kannst du das Makro erneut beginnen lassen. Ich habe versucht, die Fehlermeldungen so genau wie möglich, aber auch nicht zu überfrachtet, zu schreiben.
Falls dir jedoch im VBA-Editor Fehler angezeigt werden, dann solltest du vielleicht einen Fachkundigen oder ChatGPT (in Kürze erläutert) fragen. Sollte jedoch bei der Stelle:
Set fd = Application.FileDialog(msoFileDialogFilePicker)
ein Fehler angezeigt werden, der sinngemäß lauten könnte „Objektverweis ungültig“, dann solltest du überprüfen, ob die Verweise, die ich oben genannt habe, aktiviert sind. Wenn dies so ist, dann sollte der PC neu gestartet werden. Das hat bei mir geholfen.
Ebenfalls kann es passieren, dass an der Stelle:
lastRow = xlWS.Cells(Rows.Count, 1).End(xlUp).Row
eine Fehlermeldung angezeigt wird. In dem Fall klickst du bei der Fehlermeldung auf „Beenden“ und drückst nochmal auf den Abspiel-Button. Dann sollte der Code richtig laufen.
Wichtig zu erwähnen ist, dass dieser Code für meinen Anwendungsfall funktioniert hat. Allerdings könnte es für deine Bedürfnisse eben nicht genau passen. Es gibt aber Tools, die dir bei sowas sehr gut helfen können. ChatGPT ist eine KI, die Spracheingaben höchst präzise verarbeiten kann und auf Befehle, Fragen etc. sehr gut antwortet. Auch Code-Anpassungen sind mit ihr möglich. Du könntest also dort den Code eingeben und dazu darum bitten, den Code an deine jeweiligen Wünsche anzupassen.
Wenn du dieses Makro in jedem deiner Dokumente verwenden willst, musst du im VBA-Editor links oben auf das Plus bei „Normal“ klicken, die dann ebenfalls bei dem darunter befindlichen Ordner und dann „This Document“ anklicken. Danach kannst du, wie oben beschrieben, über „Einfügen“ „Modul“ den Code einfügen.
Möchtest du nur dieses Dokument mit dem Makro abspeichern, dann musst du darauf achten, dass das Dokument als .docm-Datei (Word mit Makro-Datei) gespeichert wird.
Code zum Download:
Der Code befindet sich als Basic-Dateien in meiner Github-Bereich und können dort angesehen und heruntergeladen werden.
Die Dateien können dann im VBA-Editor von Word unter Datei -> Datei importieren geladen werden. Das Fenster zum Modul öffnet dann nicht automatisch. Man muss es durch Doppelklick selbst öffnen.