Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Serienbrief Auswahl Tabellen

Forumthread: VBA Serienbrief Auswahl Tabellen

VBA Serienbrief Auswahl Tabellen
13.11.2020 15:53:11
Brian
Hallo zusammen,
ich öffne aus Excel mittels VBA einen Word-Serienbrief und drucke diesen als PDF. Das klappt alles soweit, aber ich ich möchte mein Tabellenblatt beliebig oft kopieren und immer die Daten des aktiven Tabellenblatts an meinen Word-Serienbrief übergeben. Leider werden jedoch immer die Daten des ersten Tabellenblattes and den Word-Serienbrief übergeben.
Hier ein Auszug aus meinem Code:

'Setze Datenbereich des Serienbriefs fest.
ActiveSheet.Range("C17:BC" & j).Select
ActiveSheet.Names("Kollidaten").RefersTo = Selection
'ENDE
'Word öffnen
Dim AppWD As Object
Set AppWD = CreateObject("Word.Application") 'Word als Object starten
AppWD.Visible = True
'ENDE
'Setze die Datenquelle des Serienbriefs auf den Dateiname des Excelfiles bzw. dessen  _
Namensregister "Kollidaten"!
AppWD.ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
AppWD.ActiveDocument.MailMerge.OpenDataSource Name:= _
Dateiname, 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=Dateiname;Mode=Read; _
Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path=" _
_
""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;" _
, SQLStatement:="SELECT * FROM `Kollidaten`", SQLStatement1:="", SubType _
:=wdMergeSubTypeAccess
AppWD.ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
'ENDE

Hat jemand eine Idee wie ich die Daten des aktiven Tabellenblattes übertragen kann?
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Serienbrief Auswahl Tabellen
13.11.2020 20:01:40
Yal
Hallo Brian,
Es ist mehr eine Word-Frage als Excel (daher wenig Helfer), aber auch schön, im anderen Objektmodell rumzuwüllen.
In deinem
    AppWD.ActiveDocument.MailMerge.OpenDataSource _
Name:=Dateiname, _
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=Dateiname;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";" & _
"Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";" & _
"Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;", _
SQLStatement:="SELECT * FROM 'Kollidaten'", _
SQLStatement1:="", _
SubType :=wdMergeSubTypeAccess
Gibt es
SQLStatement:="SELECT * FROM 'Kollidaten'"
Ersetze an der Stelle 'Kollidaten' durch den Namen der Zieltabelle (einfache Hochkomma nicht vergessen).
Ungetestet.
Viel Erfolg
Yal
Anzeige
AW: VBA Serienbrief Auswahl Tabellen
13.11.2020 20:31:33
Luschi
Hallo Brian,
bei mir läuft das so:
Dim rg As Range
Set rg = ActiveSheet.Range("C17:BC" & j)
'...
..., SQLStatement:="SELECT * FROM [" & rg.Parent.Name & "$" & rg.Address(0, 0) & "]"
Gruß von Luschi
aus klein-Paris
PS: zwischen dem Namen der Tabelle (rg.Parent.name) und dem Tabellenbereich muß! ein '$' und kein '!' stehen und der Adreßbereich darf kein '$'-Zeichen enthalten, deshalb rg.Address(0, 0) und in der SQL--Literatur wird empfohlen, den Datenbereich mit [] zu markieren.
Den Namen 'Kollidaten' kannst Du dann auch wegschmeißen.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Serienbrief: Auswahl von Tabellen in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere das VBA-Editor-Fenster:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle Einfügen > Modul.
  3. Füge den folgenden VBA-Code ein:

    Sub SerienbriefErstellen()
       Dim AppWD As Object
       Dim rg As Range
       Dim j As Long
    
       j = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row
       Set rg = ActiveSheet.Range("C17:BC" & j)
    
       ' Word öffnen
       Set AppWD = CreateObject("Word.Application")
       AppWD.Visible = True
    
       ' Setze die Datenquelle des Serienbriefs
       AppWD.ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
       AppWD.ActiveDocument.MailMerge.OpenDataSource Name:="DeinDateiname", _
           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=DeinDateiname;" & _
           "Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";", _
           SQLStatement:="SELECT * FROM [" & rg.Parent.Name & "$" & rg.Address(0, 0) & "]"
    
       AppWD.ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
    End Sub
  4. Passe den Dateinamen und den Bereich an:

    • Ersetze "DeinDateiname" durch den tatsächlichen Namen deiner Excel-Datei.
  5. Starte den Serienbrief:

    • Führe das Makro aus, um den Word-Serienbrief zu erstellen.

Häufige Fehler und Lösungen

  • Problem: Keine Daten werden an Word übergeben.

    • Lösung: Überprüfe, ob der Datenbereich korrekt definiert ist. Stelle sicher, dass rg den richtigen Bereich umfasst.
  • Problem: Fehlermeldung beim Öffnen der Datenquelle.

    • Lösung: Vergewissere dich, dass der OLEDB-Treiber korrekt installiert ist. Du kannst auch die Connection-String-Einstellungen überprüfen.

Alternative Methoden

Eine alternative Methode zur Übertragung der Daten besteht darin, die mailmerge.opendatasource-Funktion in Word direkt zu verwenden. Dies erfordert jedoch Kenntnisse in VBA und die Anpassung des Word-Dokuments selbst.

Um die mailmerge.opendatasource-Methode zu verwenden, verwende den folgenden Code-Snippet:

AppWD.ActiveDocument.MailMerge.OpenDataSource Name:="DeinDateiname", _
   ConfirmConversions:=False, LinkToSource:=True

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie die kollidaten-Werte in deinem Excel-Dokument aussehen könnten:

C D E
Name Adresse Stadt
Max Musterstraße 1 Musterstadt
Lisa Beispielweg 2 Beispielstadt

Verwende diesen Bereich in deinem VBA-Code zur Erstellung des Serienbriefs.


Tipps für Profis

  • Benutze benannte Bereiche: Statt Range("C17:BC" & j) kannst du in Excel einen benannten Bereich erstellen und diesen im Code referenzieren. Das macht deinen Code klarer und einfacher zu warten.

  • Fehlerbehandlung einfügen: Füge Fehlerbehandlungsroutinen in deinen VBA-Code ein, um unerwartete Probleme zu handeln und dem Benutzer hilfreiche Fehlermeldungen anzuzeigen.


FAQ: Häufige Fragen

1. Kann ich mehrere Tabellenblätter in Word verwenden?
Ja, du kannst den Code anpassen, um Daten aus mehreren Tabellenblättern zu kombinieren. Dazu musst du den Datenbereich für jedes Tabellenblatt entsprechend anpassen.

2. Was ist der Unterschied zwischen mailmerge.opendatasource und OLEDB in VBA?
mailmerge.opendatasource ist eine spezifische Methode in Word, um Datenquellen zu öffnen, während OLEDB eine Technologie ist, die den Zugriff auf Datenbanken und andere Datenquellen ermöglicht.

3. Welche Excel-Version benötige ich für diese Funktionen?
Der bereitgestellte Code sollte in Excel 2010 und höher funktionieren, solange die entsprechenden OLEDB-Treiber installiert sind.

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