VBA Tutorial: Rechnung als PDF speichern – In Zielordner mit dynamischem Dateinamen

Melden

Dieses Tutorial zeigt dir Schritt für Schritt, wie du ein Excel-Arbeitsblatt (z. B. eine Rechnung) automatisch als PDF exportierst, in einem bestimmten Ordner speicherst und den Dateinamen aus einer Zelle (z. B. der Rechnungsnummer) generierst.

Voraussetzungen

  1. Deine Excel-Datei muss als Excel-Arbeitsmappe mit Makros (.xlsm) gespeichert sein.
  2. Die Registerkarte Entwicklertools muss im Menüband sichtbar sein (falls nicht: Rechtsklick auf das Menüband -> Menüband anpassen -> Häkchen bei Entwicklertools setzen).

Schritt 1: Den VBA-Editor öffnen

  1. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke im Menü auf Einfügen -> Modul.
  3. Ein leeres weißes Fenster erscheint. Hier kopieren wir gleich den Code hinein.

Schritt 2: Der VBA-Code

Kopiere den folgenden Code und füge ihn in das neue Modul ein:

Sub RechnungAlsPDFSpeichern()
    Dim SpeicherPfad As String
    Dim DateiName As String
    Dim GesamtPfad As String
    Dim ws As Worksheet

    ' 1. Arbeitsblatt festlegen (Hier: Das aktive Blatt)
    Set ws = ActiveSheet

    ' 2. Speicherpfad definieren (WICHTIG: Backslash am Ende nicht vergessen!)
    ' Beispiel: "C:\Benutzer\Name\Documents\Rechnungen\"
    SpeicherPfad = "C:\Dein\Pfad\Hier\"

    ' 3. Dateiname aus einer Zelle holen (z.B. Zelle B5 für Rechnungsnummer)
    ' Wir fügen noch ein "Rechnung_" davor und das aktuelle Datum hinzu
    DateiName = "Rechnung_" & ws.Range("B5").Value

    ' 4. Den vollen Pfad zusammensetzen
    GesamtPfad = SpeicherPfad & DateiName & ".pdf"

    ' 5. Fehlerprüfung: Ist die Zelle leer?
    If ws.Range("B5").Value = "" Then
        MsgBox "Fehler: Die Rechnungsnummer in Zelle B5 fehlt!", vbCritical
        Exit Sub
    End If

    ' 6. Export als PDF
    On Error Resume Next
    ws.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=GesamtPfad, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True ' Ändere zu False, wenn das PDF nicht sofort öffnen soll

    ' 7. Abschlussmeldung
    If Err.Number = 0 Then
        MsgBox "PDF wurde erfolgreich gespeichert unter: " & vbCrLf & GesamtPfad, vbInformation, "Fertig!"
    Else
        MsgBox "Fehler: PDF konnte nicht gespeichert werden. Prüfe den Pfad!", vbCritical
    End If
    On Error GoTo 0

End Sub

Schritt 3: Anpassungen vornehmen

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

  1. Der Pfad: Ersetze C:\Dein\Pfad\Hier\ durch den Ordner, in dem die PDFs landen sollen. Tipp: Kopiere den Pfad aus dem Windows-Explorer und stelle sicher, dass am Ende ein \ steht.
  2. Die Zelle: Ändere Range("B5") in die Zelle, in der deine Rechnungsnummer oder der gewünschte Dateiname steht.

Schritt 4: Eine Schaltfläche (Button) erstellen

Damit du nicht jedes Mal den Code öffnen musst, erstellen wir einen Button in Excel:

  1. Gehe zurück zu deinem Excel-Arbeitsblatt.
  2. Gehe auf Entwicklertools -> Einfügen -> Schaltfläche (Formularsteuerelement).
  3. Ziehe mit der Maus ein Rechteck auf dem Blatt auf.
  4. Ein Fenster öffnet sich: Wähle RechnungAlsPDFSpeichern aus und klicke auf OK.
  5. Du kannst den Text auf dem Button nun umbenennen (z. B. "PDF erstellen").

Bonus-Tipps:

  • Pfad dynamisch machen: Wenn das PDF immer im gleichen Ordner wie die Excel-Datei liegen soll, ändere die Zeile für den SpeicherPfad so ab:
    SpeicherPfad = ThisWorkbook.Path & "\"
  • Nur bestimmten Druckbereich speichern: Das Makro speichert standardmäßig das gesamte Blatt. Wenn du einen Druckbereich in Excel festgelegt hast, wird nur dieser exportiert (IgnorePrintAreas:=False).
  • Sonderzeichen vermeiden: Achte darauf, dass in der Zelle für den Dateinamen keine Zeichen wie / \ : * ? " < > | stehen, da Windows diese nicht als Dateinamen erlaubt.

Zusammenfassung

Du hast nun ein System, das mit einem Klick deine Rechnung ausliest, sie professionell als PDF benennt und in deinem gewünschten Archivordner ablegt. Das spart Zeit und verhindert Tippfehler!

0