Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Aus Excelmakro Word Serienbrief starten

Aus Excelmakro Word Serienbrief starten
gega
Hallo zusammen,
wer kann mir helfen – komme nicht weiter!
Mit folgendem Makro1 filtere ich eine Exceltabelle die ich als Quelldatei für die Serienbriefdatei Word nutze und rufe damit die Word Serienbriefdatei (Vorlage.doc) auf. Die Serienbriefdatei ist mit dieser Quelle (Time Serienbrief.xls) über DDE verbunden.
Leider funktioniert es nicht richtig.
Makro 1:

Sub Serienbrief()
z = Cells(Rows.Count, 3).End(xlUp).Row
Range("A1: AI" & z & "").Select
Selection.Copy
Workbooks.Open Filename:= _
"D:\Time Serienbrief.xls"
Cells.Select
ActiveSheet.Paste
Call Serienb
End Sub



Sub Serienb()
Dim WinWord, WinDoc
Dim sFile As String
sFile = "D:\Vorlage.doc"
Set WinWord = CreateObject("Word.Application")
With WinWord
.Visible = True
Set WinDoc = .Documents.Open(sFile)
End With
Set WinWord = Nothing
Set WinDoc = Nothing
End Sub


Gruß Gerhard

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Aus Excelmakro Word Serienbrief starten
15.12.2008 13:45:22
fcs
Hallo Gerhard,
nach etwas Fummelarbeit rund um die Daten-Verbindung scheint folgendes von Excel aus zu funktionieren.
Bitte nicht vergessen im Excel-VBA-Editor für die datei mit dem Makro den Verweis auf die Microsoft Word X.Y Object Libray zu aktivieren.
Wie weit du dann bei der Serienbrieferstellung das Makro laufen läßt muss du halt selber sehen.
Gruß
Franz

Private Const strDatenQuelle As String = "C:\Lokale Daten\Serienbrief.xls"
'Private Const strDatenQuelle As String = "D:\Time Serienbrief.xls"
Private Const strWOrdvorlage As String = "C:\Lokale Daten\Test\Vorlage.doc"
'Private Const strWOrdvorlage As String = "D:\Vorlage.doc"
Sub Serienbrief()
Dim Bereich As Range, wb As Workbook
z = Cells(Rows.Count, 3).End(xlUp).Row
Set Bereich = Range("A1: AI" & z & "") 'Bereich mit Serienbrief-Daten
Set wb = Workbooks.Open(Filename:=strDatenQuelle)
'    Workbooks.Open Filename:= _
"D:\Time Serienbrief.xls"
'Altdatenlöschen
Cells.ClearContents
'neue Daten reinkopieren
Bereich.Copy Destination:=Cells(1, 1)
'Datei Speichern und schliessen
wb.Save
wb.Close
Call Serienb
End Sub
Sub Serienb()
'Im Excel VBA-Editor für die Datei mit diesem Makro unter Extras-Verweise _
den Verweis auf die Microsoft Word x.y Object Library aktivieren!!
Dim WinWord, WinDoc As Word.Document, docSerienbrief As Word.Document
Dim sFile As String, strCon As String
sFile = strWOrdvorlage
Set WinWord = CreateObject("Word.Application")
With WinWord
.Visible = True
'Vorlagedatei öffnen
Set WinDoc = .Documents.Open(sFile)
With WinDoc
With .MailMerge
'Datenquelle öffnen
.OpenDataSource Name:=strDatenQuelle, _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:="", _
Revert:=False, Format:=wdOpenFormatAuto, _
Connection:="Provider=Microsoft.Jet.OLEDB.4.0;Password="""";" _
& "User ID=Admin;" _
& "Data Source=" & strDatenQuelle & ";" _
& "Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";" _
& "Jet OLEDB:System database="""";" & "Jet OLEDB:Registry Path="""";" _
& "Jet OLEDB:Database Password="""";" _
& "Jet OLEDB:Engine ", _
SQLStatement:="SELECT * FROM `Tabelle1$`", SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
'Serienbrief mit allen Daten in neuem Dokument erstellen
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
Set docSerienbrief = WinWord.ActiveDocument
'Datenquelle wieder schliessen
.DataSource.Close
End With
'Vorlagedatei wieder schliessen
.Close Savechanges:=False
End With
'Serienbrief - Drucken - Seitenvorschau
docSerienbrief.Application.WindowState = wdWindowStateMinimize
If MsgBox("Serienbrief Drucken ?", vbYesNo + vbQuestion, _
"Serienbrief-Erstellung - Drucken - Seitenvorschau") = vbYes Then
docSerienbrief.Application.WindowState = wdWindowStateMaximize
docSerienbrief.PrintPreview
'            docSerienbrief.PrintOut
End If
'Serienbrief - Speichern
docSerienbrief.Application.WindowState = wdWindowStateMinimize
If MsgBox("Serienbrief Speichern ?", vbYesNo + vbQuestion, _
"Serienbrief-Erstellung-Speicehrn") = vbYes Then
docSerienbrief.Application.WindowState = wdWindowStateMaximize
docSerienbrief.Application.Dialogs(wdDialogFileSaveAs).Show
End If
docSerienbrief.Application.WindowState = wdWindowStateMaximize
End With
Set docSerienbrief=nothing
Set WinWord = Nothing
Set WinDoc = Nothing
End Sub


Anzeige
AW: Aus Exlmakro Word Serienbrief starten
19.12.2008 13:39:00
gega
Hallo Franz,
bin jetzt erst wieder zurück. Herzlichen Dank für deinen Beitrag.
Viele Grüße
Gerhard
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Serienbrief aus Excel und Word erstellen


Schritt-für-Schritt-Anleitung

Um einen Serienbrief aus Excel zu starten und diesen in Word zu erstellen, kannst Du die folgenden Schritte befolgen:

  1. Daten vorbereiten: Stelle sicher, dass Deine Excel-Tabelle alle benötigten Daten für den Serienbrief enthält. Achte darauf, dass die Spaltenüberschriften klar definiert sind.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  3. Modul erstellen: Klicke auf Einfügen -> Modul, um ein neues Modul zu erstellen.

  4. Makro einfügen: Füge den folgenden Code in das Modul ein:

    Private Const strDatenQuelle As String = "C:\Pfad\zu\deiner\Excel_Tabelle.xlsx"
    Private Const strWOrdvorlage As String = "C:\Pfad\zu\deiner\Vorlage.doc"
    
    Sub Serienbrief()
        Dim Bereich As Range
        Dim wb As Workbook
        Dim z As Long
    
        z = Cells(Rows.Count, 1).End(xlUp).Row
        Set Bereich = Range("A1:D" & z) ' Anpassung an Deine Daten
    
        Set wb = Workbooks.Open(Filename:=strDatenQuelle)
        Cells.ClearContents
        Bereich.Copy Destination:=Cells(1, 1)
        wb.Save
        wb.Close
    
        Call Serienb
    End Sub
    
    Sub Serienb()
        Dim WinWord As Object
        Dim WinDoc As Object
        Dim docSerienbrief As Object
        Dim sFile As String
    
        sFile = strWOrdvorlage
        Set WinWord = CreateObject("Word.Application")
        With WinWord
            .Visible = True
            Set WinDoc = .Documents.Open(sFile)
            With WinDoc.MailMerge
                .OpenDataSource Name:=strDatenQuelle, LinkToSource:=True
                .Destination = 0 ' Neuer Dokument
                .Execute Pause:=False
            End With
        End With
    End Sub
  5. Verweis aktivieren: Stelle sicher, dass der Verweis auf die Microsoft Word Object Library im VBA-Editor aktiviert ist (Extras -> Verweise).

  6. Makro ausführen: Du kannst das Makro nun ausführen, um den Serienbrief zu erstellen.


Häufige Fehler und Lösungen

  • Fehler: "Datenquelle nicht gefunden"
    Lösung: Überprüfe den Pfad der Excel-Tabelle in Deinem VBA-Code und stelle sicher, dass die Datei existiert.

  • Fehler: Word-Dokument öffnet sich nicht
    Lösung: Stelle sicher, dass der Pfad zur Word-Vorlage korrekt ist und dass Word installiert ist.

  • Fehler: Seriendruck funktioniert nicht
    Lösung: Überprüfe, ob die Excel-Tabelle die richtigen Daten enthält und dass die Spaltenüberschriften übereinstimmen.


Alternative Methoden

  1. Seriendruck über Word starten: Du kannst auch direkt in Word den Seriendruck starten, indem Du die Excel-Tabelle als Datenquelle auswählst. Gehe dazu auf Sendungen -> Seriendruck starten und wähle Empfänger auswählen -> Vorhandene Liste.

  2. Verwendung von Power Query: Wenn Du regelmäßig Serienbriefe erstellst, kannst Du auch Power Query in Excel nutzen, um Daten effizienter zu filtern und aufzubereiten.


Praktische Beispiele

  • Serienbrief mit personalisierten Anreden: In Deiner Excel-Tabelle kannst Du eine Spalte für Anreden (z.B. Herr/Frau) hinzufügen und diese in Deinem Word-Dokument verwenden.

  • Serienbrief für Einladungen: Erstelle eine Excel-Tabelle mit den Kontaktdaten Deiner Gäste und verwende die oben genannten Schritte, um Einladungen zu drucken.


Tipps für Profis

  • Makros optimieren: Du kannst Deine Makros optimieren, indem Du Fehlerbehandlungsroutinen hinzufügst, um Probleme während der Ausführung zu erkennen und zu beheben.

  • Daten validieren: Stelle sicher, dass Deine Daten in der Excel-Tabelle validiert sind, um Fehler während des Seriendrucks zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich einen Serienbrief drucken?
Du kannst den Serienbrief drucken, indem Du nach der Erstellung den Befehl PrintOut im Code hinzufügst oder die Druckvorschau in Word nutzt.

2. Brauche ich eine spezielle Excel-Version für den Seriendruck?
Nein, der Seriendruck sollte in den meisten aktuellen Excel-Versionen funktionieren. Stelle sicher, dass Deine Office-Installation auf dem neuesten Stand ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige