Tutorial: Automatisierter E-Mail-Versand aus Excel mit Anhängen via VBA
Melden
Dieses Tutorial zeigt dir Schritt für Schritt, wie du mithilfe von VBA (Visual Basic for Applications) den Versand von E-Mails direkt aus einer Excel-Tabelle automatisierst – inklusive individueller Anhänge aus einem lokalen Ordner.
Voraussetzungen
- Microsoft Outlook muss auf deinem Rechner installiert sein.
- Die Excel-Datei muss als Excel-Arbeitsmappe mit Makros (.xlsm) gespeichert werden.
Schritt 1: Die Excel-Tabelle vorbereiten
Zuerst legen wir die Struktur deiner Daten fest. Erstelle eine Tabelle mit den folgenden Spaltenköpfen (Zeile 1):
| Spalte A | Spalte B | Spalte C | Spalte D | Spalte E |
|---|---|---|---|---|
| Name | E-Mail-Adresse | Betreff | Nachricht | Dateipfad (Anhang) |
In Spalte E muss der vollständige Pfad zur Datei stehen, z.B.: C:\Rechnungen\Rechnung_123.pdf.
Schritt 2: Den VBA-Editor öffnen
- Drücke in Excel
ALT+F11, um den VBA-Editor zu öffnen. - Gehe im Menü auf Einfügen -> Modul.
- Ein leeres weißes Fenster erscheint. Hier kopieren wir gleich den Code hinein.
Schritt 3: Der VBA-Code
Kopiere den folgenden Code in das neue Modul:
Sub EmailsSendenMitAnhang()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim i As Long
Dim LetzteZeile As Long
Dim Pfad As String
' Outlook Instanz erstellen
Set OutlookApp = CreateObject("Outlook.Application")
' Letzte beschriebene Zeile in Spalte B (E-Mail) finden
LetzteZeile = Cells(Rows.Count, 2).End(xlUp).Row
' Schleife von Zeile 2 bis zur letzten Zeile
For i = 2 To LetzteZeile
' Prüfen, ob eine E-Mail-Adresse vorhanden ist
If Cells(i, 2).Value <> "" Then
Set OutlookMail = OutlookApp.CreateItem(0)
Pfad = Cells(i, 5).Value ' Pfad aus Spalte E
With OutlookMail
.To = Cells(i, 2).Value ' Empfänger
.Subject = Cells(i, 3).Value ' Betreff
.Body = "Hallo " & Cells(i, 1).Value & "," & vbCrLf & vbCrLf & _
Cells(i, 4).Value ' Name + Nachricht
' Prüfen, ob ein Anhang-Pfad angegeben wurde und ob die Datei existiert
If Pfad <> "" Then
If Dir(Pfad) <> "" Then
.Attachments.Add Pfad
Else
MsgBox "Datei nicht gefunden: " & Pfad, vbExclamation
End If
End If
' Option: .Display (zeigt die Mail an) oder .Send (sendet sofort)
.Display ' Empfohlen zum Testen
'.Send ' Aktivieren, wenn alles funktioniert
End With
Set OutlookMail = Nothing
End If
Next i
MsgBox "Versand abgeschlossen!", vbInformation
' Aufräumen
Set OutlookApp = Nothing
End Sub
Schritt 4: Den Code anpassen
- .Display vs. .Send: Standardmäßig ist
.Displayeingestellt. Das bedeutet, jede E-Mail öffnet sich in einem Fenster. Wenn du hunderte Mails sendest, ändere dies in.Send, damit sie sofort im Hintergrund verschickt werden. - Anreden: Im Code habe ich eine einfache Anrede eingebaut:
"Hallo " & Cells(i, 1).Value. Das kannst du nach Belieben anpassen.
Schritt 5: Das Makro ausführen
Es gibt zwei Möglichkeiten, das Makro zu starten:
- Direkt im Editor: Klicke irgendwo in den Code und drücke
F5. - Über eine Schaltfläche (Empfohlen):
- Gehe in Excel auf das Register Einfügen -> Illustrationen -> Formen.
- Zeichne ein Rechteck.
- Rechtsklick auf das Rechteck -> Makro zuweisen.
- Wähle
EmailsSendenMitAnhangaus und bestätige mit OK. - Jetzt wird das Makro per Klick auf die Schaltfläche gestartet.
Sicherheitshinweise & Tipps
- Outlook-Sicherheitswarnung: Wenn du
.Sendverwendest, zeigt Outlook manchmal eine Sicherheitswarnung an. Dies kann in den Outlook-Optionen (Trust Center) oder durch die Verwendung einer "Library" (Early Binding) umgangen werden, erfordert aber oft Administratorrechte. - Dateipfade prüfen: Achte darauf, dass der Dateipfad in Spalte E wirklich existiert und die Dateiendung (z.B.
.pdf,.xlsx) korrekt ist. - HTML-Mails: Wenn du fettgedruckten Text oder Bilder in der Mail möchtest, verwende
.HTMLBodyanstatt.Body.
Beispiel für HTML:
.HTMLBody = "Guten Tag <b>" & Cells(i, 1).Value & "</b>,<br><br>" & Cells(i, 4).Value