Excel VBA Tutorial: PDF-Rechnung automatisch erstellen & per E-Mail versenden

Melden

Hier ist ein ausführliches Tutorial, wie du mit Excel VBA eine Rechnung als PDF exportierst und diese automatisch an eine E-Mail-Adresse versendest, die in einer Zelle hinterlegt ist.

Dieses Tutorial zeigt dir, wie du den Prozess vom fertigen Excel-Sheet bis zur versendeten E-Mail automatisierst.


Voraussetzungen

  1. Microsoft Outlook muss auf deinem Rechner installiert und eingerichtet sein.
  2. Die Datei muss als Excel Arbeitsmappe mit Makros (.xlsm) gespeichert sein.
  3. Du benötigst die aktivierte Entwicklerregisterkarte in Excel.

Schritt 1: Den VBA-Editor öffnen und Verweise setzen

Damit Excel mit Outlook kommunizieren kann, müssen wir eine Bibliothek aktivieren.

  1. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Gehe im Menü auf Extras -> Verweise....
  3. Suche in der Liste nach "Microsoft Outlook 16.0 Object Library" (die Zahl kann je nach Office-Version variieren, z. B. 15.0 oder 14.0).
  4. Setze einen Haken und klicke auf OK.

Schritt 2: Ein neues Modul erstellen

  1. Klicke im VBA-Editor auf Einfügen -> Modul.
  2. Kopiere den folgenden Code in das leere Fenster:
Sub RechnungAlsPDFSenden()
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim RechnungSheet As Worksheet
    Dim DateiPfad As String
    Dim DateiName As String
    Dim Empfaenger As String

    ' --- EINSTELLUNGEN ---
    Set RechnungSheet = ThisWorkbook.Sheets("Rechnung") ' Name deines Tabellenblatts
    Empfaenger = RechnungSheet.Range("B10").Value      ' Zelle, in der die E-Mail-Adresse steht

    ' Pfad und Dateiname definieren (Speichert im gleichen Ordner wie die Excel-Datei)
    DateiPfad = ThisWorkbook.Path & "\"
    DateiName = "Rechnung_" & RechnungSheet.Range("B11").Value & ".pdf" ' B11 = z.B. Rechnungsnummer

    ' 1. PDF ERSTELLEN
    On Error Resume Next
    RechnungSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=DateiPfad & DateiName, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False

    If Err.Number <> 0 Then
        MsgBox "Fehler beim Erstellen der PDF. Sicherstellen, dass die Datei nicht geöffnet ist.", vbCritical
        Exit Sub
    End If
    On Error GoTo 0

    ' 2. OUTLOOK INSTANZ ERSTELLEN
    Set OutlookApp = CreateObject("Outlook.Application")
    Set OutlookMail = OutlookApp.CreateItem(0)

    ' 3. E-MAIL ERSTELLEN UND VERSENDEN
    On Error Resume Next
    With OutlookMail
        .To = Empfaenger
        .Subject = "Ihre Rechnung: " & RechnungSheet.Range("B11").Value
        .Body = "Sehr geehrte Damen und Herren," & vbCrLf & vbCrLf & _
                "anbei erhalten Sie Ihre Rechnung als PDF-Dokument." & vbCrLf & vbCrLf & _
                "Mit freundlichen Grüßen," & vbCrLf & _
                "Ihr Buchhaltungs-Team"
        .Attachments.Add DateiPfad & DateiName

        ' .Display öffnet die Mail zur Ansicht, .Send sendet sie sofort
        .Display 
    End With
    On Error GoTo 0

    ' 4. AUFRÄUMEN
    ' Optional: Die erstellte PDF-Datei nach dem Versenden wieder löschen
    ' Kill DateiPfad & DateiName

    Set OutlookMail = Nothing
    Set OutlookApp = Nothing

    MsgBox "E-Mail für " & Empfaenger & " wurde erfolgreich erstellt!", vbInformation
End Sub

Schritt 3: Den Code anpassen

Damit das Makro bei dir funktioniert, musst du diese Stellen im Code anpassen:

  • Sheets("Rechnung"): Ersetze "Rechnung" durch den Namen deines Tabellenblatts.
  • Range("B10"): Hier muss die Zelle stehen, in der die E-Mail-Adresse des Kunden eingetragen ist.
  • Range("B11"): Hier kannst du z. B. die Rechnungsnummer auslesen lassen, um den Dateinamen zu generieren.
  • .Body: Hier kannst du den Text der E-Mail verändern. vbCrLf erzeugt einen Zeilenumbruch.
  • .Display vs. .Send: Nutze erst .Display, um die Mail zu prüfen. Wenn alles perfekt läuft, kannst du es durch .Send ersetzen, damit die Mail sofort ohne Rückfrage verschickt wird.

Schritt 4: Einen Button erstellen

Damit du nicht jedes Mal den VBA-Editor öffnen musst:

  1. Gehe zurück zu deinem Excel-Sheet.
  2. Gehe auf Einfügen -> Illustrationen -> Formen und wähle ein Rechteck.
  3. Zeichne den Button und beschrifte ihn (z. B. "Rechnung senden").
  4. Mache einen Rechtsklick auf die Form und wähle Makro zuweisen....
  5. Wähle RechnungAlsPDFSenden aus und klicke auf OK.

Tipps für die Praxis

  • Druckbereich festlegen: Das Makro exportiert das gesamte Blatt. Markiere in Excel deinen Rechnungsbereich und gehe auf Seitenlayout -> Druckbereich -> Druckbereich festlegen, damit nur die Rechnung in der PDF erscheint.
  • Dateipfad: ThisWorkbook.Path speichert die PDF im selben Ordner wie deine Excel-Datei. Achte darauf, dass die Excel-Datei bereits einmal gespeichert wurde, sonst gibt es eine Fehlermeldung.
  • Sicherheit: Wenn du .Send verwendest, zeigt Outlook manchmal eine Sicherheitswarnung an. Dies kann man umgehen, indem man ein Tool wie "ClickYes" nutzt oder die Outlook-Sicherheitseinstellungen (auf eigene Gefahr) anpasst.

Viel Erfolg bei der Automatisierung deiner Rechnungen!

0