Zum Hauptinhalt springen

Word-Makros für Seriendruck: Massendokumente automatisieren

Lesedauer: 7 Min. • Datum: 18. April 2026 • Kategorie: Word & Dokumente

Der Seriendruck in Word ist leistungsfähig, stoßt aber schnell an Grenzen: individuelle Dateinamen, bedingte Absätze, unterschiedliche Anhänge oder automatischer PDF-Export – all das erfordert VBA-Makros. In diesem Beitrag zeigen wir, wie Sie den Seriendruck mit VBA auf ein professionelles Niveau heben und hunderte Dokumente vollautomatisch erzeugen.

1. Seriendruck-Grundlagen per VBA steuern

Bevor wir individuelle Lösungen bauen, hier die Basis: So öffnen Sie eine Datenquelle und starten den Seriendruck per Code:

Sub SeriendruckStarten()
    Dim doc As Document
    Set doc = ActiveDocument

    ' Datenquelle verbinden (Excel-Tabelle)
    doc.MailMerge.OpenDataSource _
        Name:="C:\Daten\Kundenliste.xlsx", _
        SQLStatement:="SELECT * FROM [Tabelle1$]"

    ' Seriendruck in neues Dokument ausfuehren
    With doc.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        .Execute
    End With

    MsgBox "Seriendruck abgeschlossen: " & _
        doc.MailMerge.DataSource.RecordCount & " Dokumente erstellt."
End Sub

2. Einzelne PDFs pro Datensatz erzeugen

Der häufigste Wunsch: Jeder Empfänger soll ein eigenes PDF mit individuellem Dateinamen erhalten. Das folgende Makro iteriert durch alle Datensätze und speichert jedes Dokument einzeln:

Sub SeriendruckAlsEinzelPDFs()
    Dim doc As Document
    Dim mm As MailMerge
    Dim i As Long
    Dim pdfPfad As String
    Dim kundenName As String

    Set doc = ActiveDocument
    Set mm = doc.MailMerge

    ' Datenquelle oeffnen
    mm.OpenDataSource _
        Name:="C:\Daten\Kundenliste.xlsx", _
        SQLStatement:="SELECT * FROM [Tabelle1$]"

    Dim anzahl As Long
    anzahl = mm.DataSource.RecordCount

    For i = 1 To anzahl
        mm.DataSource.ActiveRecord = i
        kundenName = mm.DataSource.DataFields("Firmenname").Value

        ' Seriendruck fuer einzelnen Datensatz
        With mm
            .Destination = wdSendToNewDocument
            .DataSource.FirstRecord = i
            .DataSource.LastRecord = i
            .Execute
        End With

        ' Dateinamen bereinigen und PDF speichern
        kundenName = BereinigeDateiname(kundenName)
        pdfPfad = "C:\Ausgabe\Angebot_" & kundenName & "_" & _
            Format(Date, "YYYY-MM-DD") & ".pdf"

        ActiveDocument.ExportAsFixedFormat _
            OutputFileName:=pdfPfad, _
            ExportFormat:=wdExportFormatPDF, _
            OptimizeFor:=wdExportOptimizeForPrint

        ActiveDocument.Close SaveChanges:=False
    Next i

    MsgBox anzahl & " PDFs wurden erfolgreich erstellt."
End Sub

Function BereinigeDateiname(ByVal name As String) As String
    Dim ungueltig As Variant
    Dim zeichen As Variant
    ungueltig = Array("\", "/", ":", "*", "?", """", "<", ">", "|")
    For Each zeichen In ungueltig
        name = Replace(name, CStr(zeichen), "_")
    Next zeichen
    BereinigeDateiname = Trim(name)
End Function

3. Bedingte Inhalte per VBA einfügen

Word-Seriendruckfelder mit IF-Bedingungen sind begrenzt. Per VBA können Sie komplexe Logik abbilden – zum Beispiel unterschiedliche Textbausteine je nach Kundenkategorie:

Sub BedingteAbsaetzeEinfuegen()
    Dim mm As MailMerge
    Dim doc As Document
    Dim kategorie As String

    Set doc = ActiveDocument
    Set mm = doc.MailMerge

    mm.DataSource.ActiveRecord = wdFirstRecord

    Do While mm.DataSource.ActiveRecord <> wdLastRecord
        kategorie = mm.DataSource.DataFields("Kategorie").Value

        ' Textmarke im Dokument suchen und bedingten Text einsetzen
        If doc.Bookmarks.Exists("Anrede_Block") Then
            Select Case kategorie
                Case "Premium"
                    doc.Bookmarks("Anrede_Block").Range.Text = _
                        "Als geschaetzter Premium-Kunde erhalten Sie " & _
                        "exklusive Konditionen."
                Case "Standard"
                    doc.Bookmarks("Anrede_Block").Range.Text = _
                        "Gerne unterbreiten wir Ihnen folgendes Angebot."
                Case Else
                    doc.Bookmarks("Anrede_Block").Range.Text = _
                        "Vielen Dank fuer Ihr Interesse an unseren Leistungen."
            End Select
        End If

        mm.DataSource.ActiveRecord = wdNextRecord
    Loop
End Sub

4. Serienbriefe direkt per Outlook versenden

Die Kombination aus Seriendruck und Outlook-Automatisierung ermöglicht den vollautomatischen Versand:

Sub SeriendruckPerMailVersenden()
    Dim olApp As Object
    Dim olMail As Object
    Dim mm As MailMerge
    Dim i As Long
    Dim empfaenger As String
    Dim pdfPfad As String

    Set olApp = CreateObject("Outlook.Application")
    Set mm = ActiveDocument.MailMerge

    mm.OpenDataSource Name:="C:\Daten\Kundenliste.xlsx", _
        SQLStatement:="SELECT * FROM [Tabelle1$]"

    For i = 1 To mm.DataSource.RecordCount
        mm.DataSource.ActiveRecord = i
        empfaenger = mm.DataSource.DataFields("Email").Value

        ' PDF erzeugen (wie oben)
        pdfPfad = ErzeugePDFFuerDatensatz(mm, i)

        ' E-Mail erstellen und versenden
        Set olMail = olApp.CreateItem(0)
        With olMail
            .To = empfaenger
            .Subject = "Ihr individuelles Angebot - " & _
                mm.DataSource.DataFields("Firmenname").Value
            .Body = "Sehr geehrte Damen und Herren," & vbCrLf & vbCrLf & _
                "anbei erhalten Sie Ihr Angebot als PDF." & vbCrLf & _
                "Bei Fragen stehen wir Ihnen gerne zur Verfuegung."
            .Attachments.Add pdfPfad
            .Send
        End With
    Next i

    Set olMail = Nothing
    Set olApp = Nothing
    MsgBox "Alle E-Mails wurden versendet."
End Sub

5. Tipps für den produktiven Einsatz

  • Testlauf mit wenigen Datensätzen – Filtern Sie die SQL-Abfrage mit WHERE, bevor Sie 500 PDFs erzeugen
  • Fortschrittsanzeige – Nutzen Sie Application.StatusBar, um den aktuellen Datensatz anzuzeigen
  • Fehlerprotokoll – Schreiben Sie fehlgeschlagene Datensätze in eine Log-Datei statt den Prozess abzubrechen
  • Vorlagenmanagement – Speichern Sie die Word-Vorlage als .dotm mit integriertem VBA-Code
  • Dateinamen-Konvention – Verwenden Sie immer die BereinigeDateiname-Funktion, um ungültige Zeichen zu entfernen

Fazit

Word-Seriendruck und VBA sind ein starkes Team. Während die grafische Oberfläche für einfache Serienbriefe ausreicht, ermöglichen Makros individuelle PDFs, bedingte Inhalte und den automatischen Mailversand. Für Unternehmen, die regelmäßig Angebote, Rechnungen oder Verträge in großen Stückzahlen erstellen, ist die VBA-Automatisierung eine Investition, die sich schnell amortisiert.


Das könnte Sie auch interessieren:

Unsere Services

Projekt anfragen