Word 07: Seriendruck, Etikette per VBA auswählen

Hallo zusammen

Ich arbeite momentan an einem Seriendruck (Word + Excel 2007), der per VBA ausgeführt werden soll. Die Daten kommen von einer Excel-Tabelle. Das Script ist recht simpel:
-Auswahl der Etikette
-Verknüpfen der Tabelle
-erste 2 Datensätze abwählen (dort sind Titel usw. vorhanden)
-einzelne Felder richtig anordnen und drucken

Mit dem Makroeditor konnte ich schon recht viel erledigen:

_ActiveDocument.MailMerge.MainDocumentType = wdMailingLabels
ActiveDocument.MailMerge.OpenDataSource Name:= _
„E:\Musik\MGD\Neue_TN_Liste.xls“, ConfirmConversions:=False, _
ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
Connection:= _
„Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=E:\Musik\MGD\Neue_TN_Liste.xls;Mode=Read;Extended Properties=“„HDR=YES;IMEX=1;“";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=35;Jet OLEDB:smiley:atabase Locking M" _
, SQLStatement:=„SELECT * FROM Funktion$„, SQLStatement1:=““, SubType:= _
wdMergeSubTypeAccess
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:= _
„Adressen_der_Eltern“

WordBasic.MailMergePropagateLabel
ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0_

Nun habe ich noch folgende Probleme:
-Die Auswahl der Etikette (Seriendruck starten…Etiketten) wurde leider nicht mitaufgezeichnet. Kennt jemand den Befehl dafür? (z.B. Avery Zweckform 3422)
-Kann der Pfad des Excel-Files so gewählt werden, dass er das Excel-File im selben Ordner wie das Word-File sucht?
-Das Abwählen der ersten 2 Datensätze (Empfängerliste bearbeiten) wurde auch nicht mit aufgezeichnet. Gibt dafür einen Befehl oder muss ich das Excel-File verändern?

Besten Dank für die Unterstützung.
Grüsse
Christof

Hi,

zum Einstieg habe ich das aufgezeichnet. Allerdings gilt das für Word2003. Ob sich das in 2007 geändert hat, weiß ich leider nicht.

 With ActiveDocument.MailMerge
**.Destination = wdSendToNewDocument**
 .MailAsAttachment = False
 .MailAddressFieldName = ""
 .MailSubject = ""
 .SuppressBlankLines = True
 With .DataSource
**.FirstRecord = wdDefaultFirstRecord  
 .LastRecord = wdDefaultLastRecord**  
 End With
**.Execute Pause:=True**
 End With

Mir kam nämlich der Befehl WordBasic.MailMerge… ein wenig merkwürdig vor.

Bitte schließe Code in die Tags

YourCodeGoesHere *

ein, dann ist er leichter lesbar.

HTH.

Markus
_____________
* ohne Leerzeichen

Hallo Christof,

gibt es einen Grund, warum du per VBA das gesamte Ettiketten-Layout erstellen und steuern willst?

Einfacher ist es eine Dokumenten-Vorlage zu erstellen in der das komplette Layout einschliesslich Vorgabetext, Datenfelder und Quelldatenverknüpfung definiert ist.

Per VBA brauchst du dann „nur“ noch auf Basis der Vorlage ein neues Dokument erstellen und die Verbindung zur Datenquelle aktualisieren und ggf. Filter etc. setzen.

Es ist aber ggf. einfacher, die Daten in Excel für den Serienbrief per VBA aufzubereiten und in eine Datei mit einem Tabellenblatt (1.Zeile Feldnamen, dann alle Daten) als Quelle für den Serienbrief auszulagern.

Word-Ettiketten-Vorlage/Dokument und Datenquelle im gleichen Verzeichnis/Ordner speichern sollte gehen. Im Code kommst du aber nicht darum herum die Quelle inklusive Pfad zu definieren.
Außerdem sollten der String für Connection und SQL in Variablen erstellt werden; das ist übersichtlicher und vermeidet Ärger, wenn diese Strings sehr lang sind.
Beispiel:

Sub aatest()
 Dim sDataSource As String, sCon As String, sSQL As String
 ActiveDocument.MailMerge.MainDocumentType = wdMailingLabels
 'Datenquelle Serienbrief
 sDataSource = ActiveDocument.Path & "\Neue\_TN\_Liste.xls"
 'Datenconnection String
 sCon = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & sDataSource
 sCon = sCon & ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";"
 sCon = sCon & "Jet OLEDB:System database="""";"
 sCon = sCon & "Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=35;"
 sCon = sCon & "Jet OLEDB:smiley:atabase Locking M"
 'SQL-String für Datenquelle
 sSQL = "SELECT \* FROM `Funktion$`"

 ActiveDocument.MailMerge.OpenDataSource Name:=sDataSource, \_
 ConfirmConversions:=False, \_
 ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, \_
 PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", \_
 WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, \_
 Connection:=sCon, SQLStatement:=sSQL, SQLStatement1:="", \_
 SubType:=wdMergeSubTypeAccess
End Sub

Gruß
Franz