Automatisch Serienbriefe aus Excel
erstellen mit Filter
Dieses Beispiel
zeigt, wie man mit wenig Aufwand aus Excel Serienbriefe in Word erstellen kann.
Dabei sind die Roh-Adressdaten
in Excel gespeichert. Die Daten werden über ein kleinen Pivot gefiltert und per
Taste werden dann die gefilterten Serienbriefe erstellt.
Code :vba
Betrifft: Excel, Pivot Word Serienbrief MailMerge
Dateien im Anhang
zum Download
Adressdaten
Die Daten werden
als Rohdaten in einer Exceldatei gesammelt.
Hier im Excel-Blatt:
Rohdaten ab Zelle A1 bis G10000
Serienbrief_Adressen
Im Tabellenblatt:
Serienbrief_Adressen sind die Rohdaten mit einer klassischen Pivot-Tabelle zusammengefasst.
Dabei schaltet man
die Pivottabelle auf Pivot-Eigenschaften:klassische Ansicht und alle Teilsummen
und Gesamtsummen aus.
Daten Filtern und Auswählen:
in Pivot-Tabelle
kann man jetzt über die Dropdown-Felder in den Tabellen-Kopf Zellen die Ausgabe
filtern und anpassen.
Diese Änderungen
werden dann in der Serienbrief-Ausgabe automatisch gefiltert übernommen.
Serienbrief starten
Mit dem Button:
Word Serienbrief erstellen wird dann ein Makro gestartet, welches die Word-Datei
öffnet und daraus Serienbrief in der Vorschau erstellt.
Word Ausgabe
Wenn man auf das
geöffnete Word-Dokument Serienbrief1 geht, dann findet man zu jeder Adresse
eine Seite als Serienbrief.
Wichtig: die Ausgabe
sollte nun nur die Adressen enthalten, welche in der Excel-Datei gefiltert
wurden.
Das
Word-Ausgabedokument enthällt dann zu allen Adressen eine Ausgabeseite.
Serienbrief-Vorlage
Die Original-Serienbrief
Word-Datei wird dabei nur beim Beginn des vba Makros geöffnet und die
Adressfelder werden automatisch an die öffnende Excel-Datei angebunden.
Dateien:
Beide Dateien, die
Excel Datei mit den Adressen und dem Start-Button, sowie die Serienbrief-Master
Datei liegen im gleichen Verzeichnis.
Vba Makro Code
Mit Alt-F11 kommt man in der Excel-Datei auf
den angebundenen Makro-Code.
Der eigentliche vba Code steht in dem
Ordner: von Module->Modul1
Hierbei kann man im Kopfbereich den Word-Dateinamen
anpassen und den Namen der Pivot-Tabelle
Private Const sWord_Document_Name As String = "Serienbriefe_aus_Excel.docx"
Private Const Table_with_Adresses As String = "Serienbrief_Adressen"
|
Vba Code
'------< SETUP >------
Private Const sWord_Document_Name As String = "Serienbriefe_aus_Excel.docx"
Private Const Table_with_Adresses As String = "Serienbrief_Adressen"
'------< SETUP >------
Sub Erstelle_Word_Serienbrief_als_Vorschau()
'--------------------< Word_oeffnen() >--------------------
'< Path >
Dim sCurrent_Path As String
sCurrent_Path = ActiveWorkbook.Path
Dim sFull_Path_of_Word_File
sFull_Path_of_Word_File = sCurrent_Path & "\" & sWord_Document_Name
'</ Path >
'< Word starten >
'< with word_refernece >
'Dim app As Word.Application '*Verweis Word-dll
'Set app = New Word.Application '*Verweis Word-dll
'</ with word_refernece >
'< with late-binding >
Dim app As Object '*late-binding
Set app = CreateObject("Word.Application") '*late-binding
'</ with late-binding >
app.Visible = True
app.Activate
'</ Word starten >
'</ Word Document oeffnen >
'Dim doc As Object '*late-binding
Dim doc As Word.Document 'word-dll
Set doc = CreateObject("Word.Document")
Set doc = app.Documents.Open(sFull_Path_of_Word_File, ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False)
'</ Word Document oeffnen >
Dim wb As Workbook
Set wb = ThisWorkbook
Dim sExcel_Filename As String
sExcel_Filename = ThisWorkbook.FullName
'< Datenquelle einstellen >
'*versions 2007+
'*Datenquelle für den Seriendruck
doc.MailMerge.MainDocumentType = wdFormLetters
doc.MailMerge.OpenDataSource Name:="" & sExcel_Filename & "",
ReadOnly:=False, LinkToSource:=True,
Format:=wdOpenFormatAuto,
Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & sExcel_Filename & ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;" _
, SQLStatement:="SELECT * FROM `" & Table_with_Adresses & "$`",
SubType:=wdMergeSubTypeAccess
'</ Datenquelle einstellen >
'< output >
doc.MailMerge.Destination = wdSendToNewDocument
doc.MailMerge.Execute Pause:=False
'</ output >
doc.Close SaveChanges:=False
Set doc = Nothing
Set app = Nothing
'--------------------</ Word_oeffnen() >--------------------
End Sub
|