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

Serienbrief mit verschiedenen Tabellenblättern

Forumthread: Serienbrief mit verschiedenen Tabellenblättern

Serienbrief mit verschiedenen Tabellenblättern
26.02.2019 11:21:07
serienbrief-ahnungslos
Hallo Zusammen,
ich habe eine Frage zum Export von Daten in einen Serienbrief. Die Daten liegen in verschiedenen Tabellenblättern. Ca 500 Teilnehmende nehmen jeweils an ca. 20 Veranstaltungen teil - aus einem Gesamtangebot von etwa 300 Veranstaltungen, die 28 feststehenden Modulen zugeordnet sind. Diese Veranstaltungen sind fortlaufend nummeriert (M1, M2, ...).
Tabellenblatt 1 enthält die Personendaten und - in Spalten angeordnet - die ca 20 Module (M1, M7, M45, ...), die der jeweilige Teilnehmende besucht hat.
Tabellenblatt 2 listet die Veranstaltungen auf inklusive Datum, Veranstaltungstitel und dem offiziellen Modulnamen, dem die Veranstaltung zugeordnet ist. Tabellenblatt 3 enthält die 28 offiziellen Module.
Jeder Teilnehmende soll ein Zertifikat erhalten, auf dem die Teilnahme an den ca. 20 Veranstaltungen bescheinigt wird. Aber nicht nur mit "M1, M2, M3, ...", sondern mit den Angaben aus Tabellenblatt 2 (Datum, Veranstaltungsname/ Inhalt, offizieller Modultitel).
Eine Beispieldatei habe ich angehängt: https://www.herber.de/bbs/user/127938.xlsx
Ist das möglich per Serienbrief?
Ich sehe gerade den Wald vor lauter Bäumen nicht und wäre für Anregungen dankbar. Ich hoffe allerdings ohne VBA, da ich absolut ahnungslos bin!
Danke und einen schönen Tag!
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Serienbrief mit verschiedenen Tabellenblättern
27.02.2019 10:02:47
Rob
Hi, möchtest Du das Zertifikat als ein Worddokument haben oder als pdf, etc?
AW: Serienbrief mit verschiedenen Tabellenblättern
28.02.2019 17:28:25
Serienbrief--ahnungslos
Als Word wäre praktisch, PDF aber auch möglich!
AW: Serienbrief mit verschiedenen Tabellenblättern
01.03.2019 23:24:10
Rob
Ich könnte Dir ein Makro programmieren, das auf ein Word-Template mit Textmarken zugreift, die dann die Inhalte aus der Excel-Tabelle übernehmen. Du müsstest Dir lediglich das Word-Template mit den Textmarken selber stricken, weil hier ein Upload von diesem Format nicht möglich ist.
Anzeige
AW: Serienbrief mit verschiedenen Tabellenblättern
01.03.2019 23:40:12
Rob
Die Textmarken im Word-Dokument müssen genauso heißen wie in dem Code, also z.B. .Bookmarks("Vorname") etc. Zudem musst Du noch den Speicherpfad von dem Word-Dokument anpassen. Müsste man natürlich noch alles dynamisch gestalten aber schau mal, ob Dir das so ungefähr vorgestellt hast:

Option Explicit
Sub Serienbrief()
'Dim WordApp As Word.Application
'Dim Template As Word.Document
Dim WordApp As Object 'LATE BINDING
Dim Template As Object 'LATE BINDING
'Set WordApp = New Word.Application
Set WordApp = CreateObject("Word.Application") 'LATE BINDING
WordApp.Documents.Open "C:\Users\admin\Documents\VBA\Serienbrief-Ahnungslos.docx"
WordApp.Visible = True
Set Template = WordApp.Documents("Serienbrief-Ahnungslos.docx")
'TEXTMARKEN INHALT AUS DER EXCEL-DATEI ZUWEISEN
With Template
.Bookmarks("Vorname").Range.Text = Sheets(1).Range("B2").Value
.Bookmarks("Datum").Range.Text = CDate(Sheets(2).Range("D2"))
.Bookmarks("Name").Range.Text = Sheets(1).Range("A2").Value
.Bookmarks("Modultitel").Range.Text = Sheets(2).Range("B2").Value
.Bookmarks("Modulinhalt").Range.Text = Sheets(2).Range("C2").Value
End With
'Template.Close SaveChanges:=False
'WordApp.Visible = False
End Sub

Anzeige
AW: Serienbrief mit verschiedenen Tabellenblättern
02.03.2019 00:41:05
Rob
Hier nochmal in dynamisch. Hatte gerade Bock drauf. Du musst nur noch die Speicherpfade anpassen.

Option Explicit
Sub Serienbrief()
'Dim WordApp As Word.Application
'Dim Template As Word.Document
Dim WordApp As Object 'LATE BINDING
Dim Template As Object 'LATE BINDING
Dim lastRow, i, x, findRow As Integer
Dim r, findModul, findRange As Range
Set findRange = Sheets(2).Range("A:A")
'FÜR DIE FORTLAUFENDE NUMMERIERUNG DER SERIENBRIEFE
x = 1
lastRow = Sheets(1).Cells(Sheets(1).Rows.Count, 1).End(xlUp).Row
'Set WordApp = New Word.Application
Set WordApp = CreateObject("Word.Application") 'LATE BINDING
For i = 2 To lastRow
For Each r In Range(Sheets(1).Cells(i, 7), Sheets(1).Cells(i, Sheets(1).UsedRange.Columns. _
Count - 6))
If IsEmpty(r) = False Then
WordApp.Documents.Open "C:\Users\admin\Documents\VBA\Serienbrief-Ahnungslos.docx"
WordApp.Visible = True
Set Template = WordApp.Documents("Serienbrief-Ahnungslos.docx")
findRow = findRange.find(r, LookAt:=xlWhole).Row
'TEXTMARKEN INHALT AUS DER EXCEL-DATEI ZUWEISEN
With Template
.Bookmarks("Vorname").Range.Text = Sheets(1).Cells(i, 2).Value
.Bookmarks("Datum").Range.Text = CDate(Sheets(2).Cells(findRow, 4).Value)
.Bookmarks("Name").Range.Text = Sheets(1).Cells(i, 1).Value
.Bookmarks("Modultitel").Range.Text = Sheets(2).Cells(findRow, 2).Value
.Bookmarks("Modulinhalt").Range.Text = Sheets(2).Cells(findRow, 3).Value
End With
Template.SaveAs2 "C:\Users\admin\Desktop\" & "Serienbrief" & x & ".docx"
x = x + 1
Template.Close SaveChanges:=False
WordApp.Visible = False
End If
Next r
Next i
End Sub

Anzeige
AW: Serienbrief mit verschiedenen Tabellenblättern
02.03.2019 00:45:28
Rob
Mir ist gerade noch ein Fehler aufgefallen. In dieser Zeile "-6" bitte löschen:
For Each r In Range(Sheets(1).Cells(i, 7), Sheets(1).Cells(i, Sheets(1).UsedRange.Columns. _
Count - 6))

AW: Serienbrief mit verschiedenen Tabellenblättern
02.03.2019 07:59:30
Serienbrief--ahnungslos
Wow, danke!!!! Ich schaue es mir in Ruhe an und melde mich. Aber schon Mal vielen vielen Dank!
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Serienbrief mit mehreren Tabellenblättern in Excel


Schritt-für-Schritt-Anleitung

Um einen Serienbrief in Excel zu erstellen, der Daten aus mehreren Tabellenblättern nutzt, folge diesen Schritten:

  1. Daten vorbereiten: Stelle sicher, dass deine Excel-Datei die notwendigen Daten in verschiedenen Tabellenblättern enthält. Beispielsweise:

    • Tabellenblatt 1: Personendaten und besuchte Module
    • Tabellenblatt 2: Veranstaltungsdetails
    • Tabellenblatt 3: Offizielle Module
  2. Word-Dokument erstellen: Erstelle ein Word-Dokument mit Textmarken (z.B. <b>Vorname</b>, <b>Datum</b>), wo die Daten aus Excel eingefügt werden sollen.

  3. VBA-Code einfügen: Öffne den VBA-Editor in Excel (ALT + F11) und füge den folgenden Code ein:

    Option Explicit
    Sub Serienbrief()
       Dim WordApp As Object 'LATE BINDING
       Dim Template As Object 'LATE BINDING
       Dim lastRow, i, x, findRow As Integer
       Dim r, findRange As Range
       Set findRange = Sheets(2).Range("A:A")
       x = 1
       lastRow = Sheets(1).Cells(Sheets(1).Rows.Count, 1).End(xlUp).Row
       Set WordApp = CreateObject("Word.Application")
       For i = 2 To lastRow
           For Each r In Range(Sheets(1).Cells(i, 7), Sheets(1).Cells(i, Sheets(1).UsedRange.Columns.Count - 6))
               If Not IsEmpty(r) Then
                   WordApp.Documents.Open "C:\Pfad\Zu\Deinem\Template.docx"
                   Set Template = WordApp.ActiveDocument
                   findRow = findRange.Find(r, LookAt:=xlWhole).Row
                   With Template
                       .Bookmarks("Vorname").Range.Text = Sheets(1).Cells(i, 2).Value
                       .Bookmarks("Datum").Range.Text = CDate(Sheets(2).Cells(findRow, 4).Value)
                       .Bookmarks("Name").Range.Text = Sheets(1).Cells(i, 1).Value
                       .Bookmarks("Modultitel").Range.Text = Sheets(2).Cells(findRow, 2).Value
                       .Bookmarks("Modulinhalt").Range.Text = Sheets(2).Cells(findRow, 3).Value
                   End With
                   Template.SaveAs2 "C:\Pfad\Zu\Speichern\Serienbrief" & x & ".docx"
                   Template.Close SaveChanges:=False
                   x = x + 1
               End If
           Next r
       Next i
       WordApp.Visible = False
    End Sub
  4. Code anpassen: Passe die Pfade in dem Code an deine Verzeichnisstruktur an.

  5. Makro ausführen: Führe das Makro aus, um die Serienbriefe zu erstellen.


Häufige Fehler und Lösungen

  • Fehler bei der Textmarke: Überprüfe, ob die Textmarken im Word-Dokument exakt mit den Namen im Code übereinstimmen.
  • Dateipfad nicht gefunden: Stelle sicher, dass der Pfad zur Word-Vorlage korrekt ist.
  • Leere Zellen: Der Code sollte auf leere Zellen prüfen, um Fehler zu vermeiden.

Alternative Methoden

Falls Du keinen VBA-Code verwenden möchtest, kannst Du auch die Seriendruck-Funktion in Word verwenden. Hierbei kannst Du die Excel-Tabelle als Datenquelle angeben und die Daten direkt in Word importieren.

  1. Öffne Word und gehe zu "Sendungen".
  2. Wähle "Seriendruck starten" und dann "Briefe".
  3. Klicke auf "Empfänger auswählen" und wähle "Vorhandene Liste".
  4. Suche deine Excel-Datei und wähle die entsprechende Tabelle aus.

Praktische Beispiele

Ein Beispiel für einen Serienbrief könnte folgendermaßen aussehen:

  • Vorname: Max
  • Datum: 01.01.2023
  • Name: Müller
  • Modultitel: Einführung in Excel
  • Modulinhalt: Grundlagen der Tabellenkalkulation

Hierbei werden die Informationen dynamisch aus den verschiedenen Tabellenblättern in den Word-Serienbrief eingefügt.


Tipps für Profis

  • Nutze absolute Zellreferenzen im VBA-Code, um sicherzustellen, dass der Code immer die richtigen Daten verwendet.
  • Experimentiere mit dynamischen Variablen im Code, um die Flexibilität der Datenanpassung zu erhöhen.
  • Halte deine Excel-Tabelle sauber und gut strukturiert, um den Seriendruck in Excel zu erleichtern.

FAQ: Häufige Fragen

1. Kann ich den Serienbrief auch als PDF speichern?
Ja, du kannst den Code anpassen, um die Dateien im PDF-Format zu speichern. Ersetze Template.SaveAs2 durch den entsprechenden PDF-Speicherbefehl.

2. Ist VBA notwendig für diese Methode?
Nicht unbedingt. Du kannst auch die Seriendruck-Funktion in Word nutzen, wenn du keine Programmierung durchführen möchtest.

3. Welche Excel-Version benötige ich?
Die beschriebenen Schritte funktionieren in den meisten modernen Excel-Versionen, insbesondere Excel 2010 und neuer.

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