AW: aus Excel heraus Word Dokument zusammenstellen
12.06.2015 16:01:31
fcs
Hallo Harald,
nachfolgen eine Kombination von Makros.
Durch die Prüfung der Dateinamen und eine Option bezüglich Kopf-/Fusszeilen ist etwas mehr Code geworden.
Gruß
Franz
'Erstellt unter Word 2010/Excel 2010
Sub CompileWordDocument()
' CompileDocument Makro
Dim wdApp As Object 'Word.Application
Dim wdDoc As Object 'Word.Document
Dim arrVorlagen, strFile As Variant, strPfad As String, strMsg As String
'Anzufügende Vorlagedateien
strPfad = "D:\Test\Harald\"
arrVorlagen = Array(strPfad & "Vorlage01.docx", _
strPfad & "Vorlage02.docx", _
strPfad & "Vorlage03.docx")
'prüfen, ob Dateien vorhanden
For Each strFile In arrVorlagen
If Dir(strFile) = "" Then
strMsg = strMsg & vbLf & strFile
End If
Next
'1. zu öffnende Datei
strPfad = "D:\Test\Harald\"
strFile = strPfad & "MasterDoc2.docx"
'prüfen, ob Datei vorhanden
If Dir(strFile) = "" Then
strMsg = strFile & vbLf & strMsg
End If
If strMsg "" Then
MsgBox "Datei(en) " & strMsg & vbLf & "nicht gefunden!", vbOKOnly, _
"Makro: CompileWordDocument"
Exit Sub 'Makro beenden
End If
Set wdApp = VBA.CreateObject("Word.Application")
wdApp.Visible = True
'1. Datei schreibgeschützt öffnen
Set wdDoc = wdApp.Documents.Open(Filename:=strFile, ConfirmConversions:=False, _
ReadOnly:=True, Format:=0) 'Format: 0 = wdOpenFormatAuto
'Vorlagen anfügen
For Each strFile In arrVorlagen
Call prcVorlageEinfuegen(wdZiel:=wdDoc, strVorlage:=strFile, _
bolKopfFusszeile:=False)
Next
wdDoc.Activate
Set wdApp = Nothing
ActiveCell.Copy 'räumt Zwischenablage leer
Application.CutCopyMode = False
End Sub
Sub prcVorlageEinfuegen(wdZiel As Object, ByVal strVorlage As String, _
Optional bolKopfFusszeile As Boolean)
'wdZiel = Word-Dokument in das die weiteren Dokumente/Vorlagen am Ende eingefügt _
werden sollen
'strVorlage = Pfad\Dateiname der einzufügenden Worddatei
'bolKopfFusszeile = False : Seitenwechsel werden eingefügt und Kopf/Fusszeile _
der Vorlage werden nicht mit kopiert
'= True : Abschnittswechsel werden eingefügt und Kopf/Fusszeile _
der Vorlage werden mit kopiert
Dim wdApp As Object 'Word.Application
Dim wdVorlage As Object 'Word.Document
Set wdApp = wdZiel.Application
'Cursor am Dokumentende positionieren
wdZiel.Activate
wdApp.Selection.EndKey Unit:=6 '6 = wdStory
'Abschnittswechsel oder Seitenwechsel einfügen
If bolKopfFusszeile = True Then
wdApp.Selection.InsertBreak Type:=2 ' 7 = wdSectionBreakNextPage
wdZiel.Sections.Last.Headers(1).LinkToPrevious = False '1 = wdHeaderFooterPrimary
wdZiel.Sections.Last.Footers(1).LinkToPrevious = False '1 = wdHeaderFooterPrimary
Else
wdApp.Selection.InsertBreak Type:=7 ' 7 = wdPageBreak
End If
'Vorlagedatei schreibgeschützt öffnen
Set wdVorlage = wdApp.Documents.Open(Filename:=strVorlage, _
ConfirmConversions:=False, ReadOnly:=True, Format:=0) '0 = wdOpenFormatAuto
'Inhalt der Vorlage markieren
wdApp.Selection.WholeStory
If bolKopfFusszeile = False Then
'letztes Absatzzeichen nicht mit markieren
wdApp.Selection.MoveLeft Unit:=1, Count:=1, Extend:=1 ' Unit: 1 = wdCharacter _
Extend: 1 = wdExtend
End If
'Kopieren und in Masterdatei einfügen
wdApp.Selection.Copy
wdZiel.Activate
wdApp.Selection.PasteAndFormat (16) '16 = wdFormatOriginalFormatting
'Vorlagedatei wieder schliessen
wdVorlage.Close savechanges:=False
End Sub