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
- Microsoft Outlook muss auf deinem Rechner installiert und eingerichtet sein.
- Die Datei muss als Excel Arbeitsmappe mit Makros (.xlsm) gespeichert sein.
- 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.
- Drücke
ALT + F11, um den VBA-Editor zu öffnen. - Gehe im Menü auf Extras -> Verweise....
- 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).
- Setze einen Haken und klicke auf OK.
Schritt 2: Ein neues Modul erstellen
- Klicke im VBA-Editor auf Einfügen -> Modul.
- 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.vbCrLferzeugt einen Zeilenumbruch..Displayvs..Send: Nutze erst.Display, um die Mail zu prüfen. Wenn alles perfekt läuft, kannst du es durch.Sendersetzen, damit die Mail sofort ohne Rückfrage verschickt wird.
Schritt 4: Einen Button erstellen
Damit du nicht jedes Mal den VBA-Editor öffnen musst:
- Gehe zurück zu deinem Excel-Sheet.
- Gehe auf Einfügen -> Illustrationen -> Formen und wähle ein Rechteck.
- Zeichne den Button und beschrifte ihn (z. B. "Rechnung senden").
- Mache einen Rechtsklick auf die Form und wähle Makro zuweisen....
- Wähle
RechnungAlsPDFSendenaus 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.Pathspeichert 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
.Sendverwendest, 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!