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
|