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
.dotmmit 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:
- Word-Serienbrief mit VBA: Grundlagen
- Word-Makros für Einsteiger
- Word-Formatvorlagen: Der Master-Guide