Word Serienbriefe mit Daten aus 2 Excel-Dateien

Ich erhalte regelmäßig Word-Dokumente welche ich für verschiedene Geschäfte anpassen soll.
Es ist noch relativ leicht mittels Makro einen Serienbrief zu erstellen, welcher sich geschäftsspezifische Daten aus einer Exceldatei holt.
Ich scheitere aber daran, diese „angepasste“ Datei dann als Word Dokumentvorlage zu speichern, welche auf eine andere Datenquelle der Geschäfte zugreift.
Ich suche nun eine Möglichkeit Datenfelder mittels Makro in ein Word einzufügen und sie dann von der Ursprungsdatei loszulösen ohne dass die Inhalte wieder verschwinden.
oder noch besser
Eine Dokumentvorlage welche sich Daten aus deffinierten Feldern einer oder mehrerer Excel Dateien als Variable im Makro behält

Hallo,

weise doch den Dateinamen und Pfad der Exceldatei auf dem Zielrechner einer Variablen zu, etwa so:

Option Explicit
Sub Zuordnen\_Datenquelle()
 'Deklarationen
 Dim strLaufwerk As String
 Dim strPfad As String
 Dim strDateiname As String
 'Zuweisungen
 strLaufwerk = "C"
 strPfad = "\BSP\"
 strDateiname = "Adressen.xls"
 'Anweisungen
 ActiveDocument.MailMerge.OpenDataSource \_
 Name:=strLaufwerk & ":" & strPfad & strDateiname, \_
 ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, \_
 AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", \_
 WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, \_
 Format:=wdOpenFormatAuto, Connection:="Gesamtes Tabellenblatt", \_
 SQLStatement:="", SQLStatement1:=""
End Sub

Gruß, Bernd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Bernd,
danke für deinen Makrovorschlag,…
leider hilft er mir noch nicht wirklich weiter, den Dateinamen zuweisen ist nicht das Problem. Ich scheiter aber daran, dass die Feldinhalte der ersten Datei verschwinden sobald ich eine neue Datenquelle deffiniere.

Das Makro sollte in etwa so aussehen:

Datenquelle1 (ActiveDocument.MailMerge.OpenDataSource,… ) auswählen
Wert von Datei1.xls/Tabelle1/Feld B3 an eine Variable übergeben
SerienDokument von Datenquelle1 lösen
Datenquelle 2(ActiveDocument.MailMerge.OpenDataSource,…) auswählen
Wert von Datei2.xls/Tabelle1/Feld x4 an Variable übergeben

Bei deiner und auch meinen bisherigen Lösungsversuchen werden die Feldinhalte aus Datenquelle1 gelöscht sobald ich eine 2. Datenquelle als Datenquelle deffiniere
Meine bisherige sehr unbefriedigende Lösung war:

Sub StartDOT()


ActiveDocument.MailMerge.OpenDataSource Name:= _
„D:\PÜF TEST\Programme\RGS Daten.csv“, _
ConfirmConversions:=False, _
ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="",WritePasswordTemplate:="", _
Revert:=False, Format:=wdOpenFormatAuto, _
Connection:="", SQLStatement:="", SQLStatement1:="", _
SubType:=wdMergeSubTypeOther

ActiveDocument.Fields.Add Range:=Selection.Range, _
Type:=wdFieldMergeField, Text:=„RGSStrasse“

ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Copy
Selection.PasteAndFormat (wdFormatPlainText)
ActiveDocument.MailMerge.DataSource.Close


End Sub

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Bernd,
danke für deinen Makrovorschlag,…
leider hilft er mir noch nicht wirklich weiter, den Dateinamen
zuweisen ist nicht das Problem. Ich scheiter aber daran, dass
die Feldinhalte der ersten Datei verschwinden sobald ich eine
neue Datenquelle deffiniere.

Hallo Chris,

wie wär es wenn du die beiden Datenquellen in eine temporäre Datei zusammenfährst, um diese dann als Serienbriefdatenquelle zu nutzen?

Falls die 1. Datenquelle „nur“ dazu dient einmalig den Briefkörper mit Daten zu füllen, der dann identisch ist für alle Empfänger aus der Datenquelle2, dann wäre evtl. folgendes möglich:

Du legst den Briefkörper als Formular an mit einem TextFeld für jedes Datenfeld aus der 1. Exceldatei. Für die Datenfelder der 2. Datei legst du ganz normle Seriendruckfelder an.
Nach dem Öffnen der Dokumentvorlage holst du per Makro die benötigten Informationen aus der 1. Exceldatei und weist die Inhalte den entsprechenden Textfeldern zu. Anschließend startest du die Erstellung des Serienbriefes.
Ich hab schon erfolgreich Wordformulare von Excel aus mit Excel-Daten gefüttert. Ich denke, dass es genauso möglich ist, dass Word sich per Makro die Daten aus einer Exceldatei holen kann. Kleines Handicap: In Formular-Geschützten Worddateien kann man keine Makros starten. Deshalb muss man ggf. das Ganze von einer extern Worddatei aus steuern, die dann den gesamten Ablauf steuert.

Gruß
Franz

Hier noch ein Code-Beispiel für das Ausfüllen eines Wordformulars von Excel aus

Sub Daten\_nach\_Word\_Formular\_uebertragen()
 'Fügt Daten aus Excel im aktiven Worddokument in Formularfelder ein
 Dim doc As Document, wks As Worksheet
 Set wks = ActiveWorkbook.Worksheets("Tabelle2") 'Tabelle mit zu exportierenden Daten
 Application.ActivateMicrosoftApp xlMicrosoftWord
 Set doc = ActiveDocument 'Dokument kann natürlich auch anders gesetzt werden
 With doc
 'Daten in Worddokument einfügen
 .Application.WindowState = wdWindowStateMinimize
 .FormFields("Text1").Result = wks.Cells(1, 1).Value
 .FormFields("Text2").Result = wks.Cells(1, 2).Value
 End With
 MsgBox "Daten sind übertragen"
End Sub

Hallo Franz,
habe mittlerweilen per Mail eine recht brauchbar Methode bekommen Excelfelder direkt in Variablen im Word Makro abzulegen.

Hier der Teil des Makros zum Weiterverwenden für alle:


xlsApp.Workbooks.Open Datendatei
'Variablen laden
Strasse = xlsApp.ActiveWorkbook.Sheets(„RG“).Range(„B2“)
PLZ = xlsApp.ActiveWorkbook.Sheets(„RG“).Range(„C2“)
Stadt = xlsApp.ActiveWorkbook.Sheets(„RG“).Range(„D2“)
Telefon = xlsApp.ActiveWorkbook.Sheets(„RG“).Range(„E2“)
Fax = xlsApp.ActiveWorkbook.Sheets(„RG“).Range(„F2“)
Mail = xlsApp.ActiveWorkbook.Sheets(„RG“).Range(„G2“)
DV = xlsApp.ActiveWorkbook.Sheets(„RG“).Range(„H2“)
Knt = xlsApp.ActiveWorkbook.Sheets(„RG“).Range(„I2“)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]