Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1676to1680
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - Serienbrief aus Excel starten

VBA - Serienbrief aus Excel starten
02.03.2019 18:32:04
Edwin
Hallo,
ich habe zu meiner Excel-Datei verschiedene Serienbriefe erstellt.
Weil ich ständig die Datenquelle neu angeben muss und mir die 1.000 Klicks ziemlich auf den Nerv gehen, suche ich nach einem VBA mit dem ich von meiner Excel aus die Serienbriefe öffnen und verknüpfen bzw. starten kann.
Bei meiner Suche im Internet bin ich auf folgende Link gestoßen, der eigentlich funktionieren sollte.
https://www.ms-office-forum.net/forum/showthread.php?t=251123
Mein Code stockt jetzt bei wdFormLetters.
Die Variable sei nicht definiert.
Da ich mich mit derartigem VBA gar nicht auskenne, habe ich weiter gegoogelt.
wdFormLetters ist ein Typ von einem Serienbriefdokument.
https://docs.microsoft.com/de-de/office/vba/api/word.wdmailmergemaindoctype
Sollte also passen.
Hier mein Code.
Bitte werft mal ein Auge drauf. Hoffentlich kann mir jemand helfen.
Sub SerienbriefVerknüpfen()
Dim oWrd As Object
Dim oDoc As Object
Dim strSheetName As String, strLaufwerkDateiname As String
strSheetName = "Inhaltsverzeichnis.docx"
strLaufwerkDateiname = ThisWorkbook.Path & "\" & strSheetName
Set oWrd = CreateObject("word.application")
Set oDoc = oWrd.Documents.Open(strLaufwerkDateiname)
oWrd.Visible = True
oDoc.MailMerge.MainDocumentType = wdFormLetters
oDoc.MailMerge.OpenDataSource Name:= _
strLaufwerkDateiname, _
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=strLaufwerkDateiname;Mode=Read; _
Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB: _
Registry Path="""";Jet OLEDB:Engine Type=37;J" _
, SQLStatement:="SELECT * FROM `Vertragsübersicht$`", SQLStatement1 _
:="", SubType:=wdMergeSubTypeAccess
Set oDoc = Nothing
Set oWrd = Nothing
End Sub

Viele Grüße
Edwin

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Serienbrief aus Excel starten
02.03.2019 18:47:26
Luschi
Hallo Edwin
'wdFormLetters' ist eine Word-Konstante und mit der kann Excel so nichts anfangen, da die Konstanten von Excel mit 'xl' beginnen.
Diese Konstante hat aber auch einen numerischen Wert, in diesem Fall 0; also
oDoc.MailMerge.MainDocumentType = 0
Gruß von Luschi
aus klein-Paris
AW: VBA - Serienbrief aus Excel starten
02.03.2019 19:04:51
Edwin
Hallo Luschi,
suuuuuuuuuuuuuper!
Vielen Dank.
Bei SubType:=wdMergeSubTypeAccess hat der VBA dann gleichermaßen nochmals gestockt, aber dank Deiner Hilfe habe ich den VBA geändert.
Hier die Änderung, die im gesamten jetzt läuft.
oDoc.MailMerge.MainDocumentType = 0
oDoc.MailMerge.OpenDataSource Name:= _
ThisWorkbook.FullName _
, ConfirmConversions:=False, LinkToSource:=True, Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" & ThisWorkbook.FullName & ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Je" _
, SQLStatement:="SELECT * FROM `Vertragsübersicht$`", SQLStatement1:="", _
SubType:=1
Viele Grüße
Edwin
Anzeige
Ist ein Seitenumbruch im VBA?
04.03.2019 18:20:56
Edwin
Hallo,
ich habe jetzt festgestellt, dass nach jedem Datensatz ein Seitenumbruch ist.
Wenn ich die Serienbriefe manuell mit der Datenquelle verbinde und dann zu einem Dokument zusammenführe, dann sind alle Datensätze wie gewünscht auf einer Seite.
Ist in dem VBA ein Seitenumbruch versteckt?
Wie gesagt, ich kenne mich Word-VBA gar nicht aus.
Sub SerienbriefVerknüpfen()
'https://www.ms-office-forum.net/forum/showthread.php?t=251123
Dim oWord As Object
Dim oDoc As Object
Dim strLaufwerkDateiname As String
'    strSerienbrief = "Inhaltsverzeichnis.docx" 'Dateinamen
If strSerienbrief = "" Then
MsgBox "Bitte triff eine Auswahl!"
Exit Sub
End If
strLaufwerkDateiname = ThisWorkbook.Path & "\" & strSerienbrief & ".docx" 'Pfad und  _
Dateinamen zusammenfügen
Set oWord = CreateObject("word.application")
Set oDoc = oWord.Documents.Open(strLaufwerkDateiname)
oWord.Visible = True
oWord.Application.Activate 'Dokument wird in den Vordergrund geholt
oDoc.MailMerge.MainDocumentType = 0 'wdFormLetters = 0. Gibt einen Typ von  _
Seriendruckdokument an.
oDoc.MailMerge.OpenDataSource Name:= _
ThisWorkbook.FullName _
, ConfirmConversions:=False, LinkToSource:=True, Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" &  _
ThisWorkbook.FullName & _
";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Je" _
, SQLStatement:="SELECT * FROM `Vertragsübersicht$`", SQLStatement1:="", SubType:=1
With oDoc.MailMerge
.Destination = 0 'wdSendToNewDocument  = 0. Die Ergebnisse werden aus dem Serienbrief  _
in ein neues Dokument übertragen.
.SuppressBlankLines = True 'Wenn Seriendruckfelder leer sind, werden die leere Zeilen  _
im Seriendruckdokument unterdrückt.
With .DataSource
.FirstRecord = 1 'wdDefaultFirstRecord = 1. Aus dem Hauptdokument mit den Datensä _
tzen 1 bis
.LastRecord = -16 'wdDefaultLastRecord = -16. Zum letzten Datensatz zusammengeführt
End With
.Execute Pause:=False
End With
oDoc.Close SaveChanges:=0 'Das Seriendruckdokument wird ohne Speichern geschlossen
Set oDoc = Nothing
Set oWord = Nothing
End Sub
Vielen Dank für Eure Hilfe.
Gruß
Edwin
Anzeige
AW: Ist ein Seitenumbruch im VBA?
05.03.2019 07:36:14
Luschi
Hallo Edwin,
pro Datensatz 1 Brief ist die Standardeinstellung bei Serienbriefen; willst Du pro Brief Auflistungen realisieren, dann muß man etwas nachhelfen.
Dazu stelle 1 praktisches Beispiel mit Word-Serienhauptdokument und Excel-Datendatei bereit (am besten beide in einer zip-Datei.
Gruß von Luschi
aus klein-Paris
AW: Ist ein Seitenumbruch im VBA?
05.03.2019 08:48:03
Edwin
Hallo Luschi,
meine Dateien enthalten viele vertrauliche Inhalte.
Die finale Datei kann ich deshalb nicht öffentlich hochladen.
Wenn Du mir Deinen privaten Kontakt zur Verfügung stellst, werde ich Dir die finale Dateien senden.
Ich bitte um Verständnis!
Gruß
Edwin
Anzeige
AW: Ist ein Seitenumbruch im VBA?
05.03.2019 16:36:39
Luschi
Hallo Edwin,
was ich brauche, sind doch nicht Deine Daten, sondern den Aufbau der beiden Dateien, d.h. die Daten sollten natürlich anonymisiert sein.
Ich warte mal ab, ob Du das liefern kannst.
Gruß von Luschi
aus klein-Paris
AW: Ist ein Seitenumbruch im VBA?
05.03.2019 17:05:52
Edwin
Hallo Luschi,
die Daten habe ich schon anonymisiert, aber die Dateien möchte ich trotzdem nicht veröffentlichen. Es handelt sich wie gesagt, um finale Dateien und somit quasi um "geistiges Eigentum".
Gruß
Edwin
wie soll man da helfen können?...ohne Wörter
06.03.2019 13:54:43
Oberschlumpf
Fehler gefunden!
08.03.2019 23:39:19
Edwin
Hallo,
beim Erstellen der Musterdateien, bin ich auf den Fehler gestoßen.
Es lag am Dokument-Typ.
Wenn ich mehrere Datensätze auf einer Seite auflisten möchte, dann darf ich nicht den Typ Serienbrief sondern muss Verzeichnis oder Katalog wählen.
Die Konstanten hierzu sind wdDirectory oder wdCatalog. Da Excel beide Konstanten nicht versteht, muss man den entsprechenden Wert angeben. Dies ist bei wdDirectory und wdCatalog jeweils 3 bei Serienbrief 0.
Der Vollständigkeit halber, sende ich den funktionierenden VBA, mit Angabe der Quellen.
Die Musterdateien möchte ich Euch natürlich nicht vorenthalten.
https://www.herber.de/bbs/user/128241.zip
Vielen Dank für Eure Hilfe!
Gruß
Edwin
Sub SerienbriefVerknüpfen()
'Quelle für den VBA: https://www.ms-office-forum.net/forum/showthread.php?t=251123
'Quelle für den Serienbrief ohne mergeseq ab Seite 22: https://www.staff.uni-giessen.de/~ _
g021/MS-Word/Sonderkurs-A/wd2016_serienbrief.pdf
'Quelle für den Serienbrief mit mergeseq: http://www.borkpc.de/Word/wd_seriegrup01.html
Dim oWord As Object
Dim oDoc As Object
Dim strLaufwerkDateiname As String
Dim DokumentTyp As Integer
If strSerienbrief = "" Then
MsgBox "Bitte triff eine Auswahl!"
Exit Sub
End If
strLaufwerkDateiname = ThisWorkbook.Path & "\" & strSerienbrief & ".docx" 'Pfad und  _
Dateinamen zusammenfügen
Set oWord = CreateObject("word.application")
Set oDoc = oWord.Documents.Open(strLaufwerkDateiname)
oWord.Visible = True
oWord.Application.Activate 'Dokument wird in den Vordergrund geholt
If strSerienbrief = "Beschriftungslaschen" Then
DokumentTyp = 0
Else
DokumentTyp = 3
End If
oDoc.MailMerge.MainDocumentType = DokumentTyp 'wdFormLetters = 0. wdDirectory = 3 Gibt  _
einen Typ von Seriendruckdokument an.
'wenn auf einer Seite mit MERGESEQ Auflistungen erfolgen sollen, dann darf nicht der  _
Dokumenttyp Serienbrief gewählt werden, sondern muss der Typ Verzeichnis "wdDirectory" oder Katalog "wdCatalog" gewählt werden.
'da Excel die Konstanten wdFormLetters oder wdDirectory nicht kennt, muss der Wert  _
entsprechend gewählt werden.
'https://docs.microsoft.com/de-de/dotnet/api/microsoft.office.interop.word. _
wdmailmergemaindoctype?view=word-pia
oDoc.MailMerge.OpenDataSource Name:= _
ThisWorkbook.FullName _
, ConfirmConversions:=False, LinkToSource:=True, Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" &  _
ThisWorkbook.FullName & _
";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Je" _
, SQLStatement:="SELECT * FROM `Vertragsübersicht$`", SQLStatement1:="", SubType:=1
With oDoc.MailMerge
.Destination = 0 'wdSendToNewDocument  = 0. Die Ergebnisse werden aus dem Serienbrief  _
in ein neues Dokument übertragen.
.SuppressBlankLines = True 'Wenn Seriendruckfelder leer sind, werden die leere Zeilen  _
im Seriendruckdokument unterdrückt.
With .DataSource
.FirstRecord = 1 'wdDefaultFirstRecord = 1. Aus dem Hauptdokument mit den Datensä _
tzen 1 bis
.LastRecord = -16 'wdDefaultLastRecord = -16. Zum letzten Datensatz zusammengeführt
End With
.Execute Pause:=False
End With
oDoc.Close SaveChanges:=0 'Das Seriendruckdokument wird ohne Speichern geschlossen
Set oDoc = Nothing
Set oWord = Nothing
End Sub

Anzeige
vielleicht für die Zukunft...
09.03.2019 07:27:13
Oberschlumpf
Hi Edwin,
jetzt hast du ja doch Bsp-Dateien gezeigt.
Und zwar genau so, wie Luschi und alle anderen Helfer es vielleicht benötigt hätten.
Was ist denn an den jetzigen Bsp-Dateien anders als an denen, die du wegen "Verlust geistigen Eigentums" vorher nicht zeigen wolltest?
Danke + Ciao
Thorsten

122 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige