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

  1. Drücke in Excel ALT + F11, um den VBA-Editor zu öffnen.
  2. Gehe im Menü auf Einfügen -> Modul.
  3. 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 .Display eingestellt. 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:

  1. Direkt im Editor: Klicke irgendwo in den Code und drücke F5.
  2. Ü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 EmailsSendenMitAnhang aus und bestätige mit OK.
    • Jetzt wird das Makro per Klick auf die Schaltfläche gestartet.

Sicherheitshinweise & Tipps

  • Outlook-Sicherheitswarnung: Wenn du .Send verwendest, 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 .HTMLBody anstatt .Body.

Beispiel für HTML:

.HTMLBody = "Guten Tag <b>" & Cells(i, 1).Value & "</b>,<br><br>" & Cells(i, 4).Value
0