Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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

Word Seriendruck mit VBA

Word Seriendruck mit VBA
14.02.2024 14:38:08
Stier51
Ich bitte um Hilfe zum Seriendruck aus Word mit VBA in einzelne pdf-Dateien.
Ein Makro dazu habe ich mir schon erstellt, es funktioniert nur nicht richtig.

Die Ausgangslage:
- eine Excel-Adressdatei mit den erforderlichen Daten
Es sind 120 Garagen beginnend mit der Nr. 141
- eine Word-Datei mit Seriendruck

Das dazugehörige Makro:

Sub ExportiereSerienbriefAlsPDF()
Dim I As Long
Dim sBrief As String
Dim Path As String
Dim Jahr As String

Jahr = Format(Date, "yyyy")

Path = "C:\Users\stier\Garage\Dokumente\2024\Eigentümerversammlung\"

' Exportiere jeden Datensatz als separate PDF-Datei.
For I = 1 To ActiveDocument.MailMerge.DataSource.RecordCount
sBrief = Path & ActiveDocument.MailMerge.DataSource.DataFields("Garage_Nr").Value & "_Einladung-" & Jahr & ".pdf"
ActiveDocument.MailMerge.DataSource.ActiveRecord = I
ActiveDocument.ExportAsFixedFormat OutputFileName:=sBrief, ExportFormat:=wdExportFormatPDF
Next I
End Sub

Das Ergebnis sollte so aussehen:
141_Einladung-2024.pdf
142_Einladung-2024.pdf usw.

Leider steht in der Datei 141_Einladung-2024 der Inhalt für die Garage 142, es wird also immer um 1 versetzt der Inhalt angezeigt..
Der Seriendruck zählt wohl immer die Überschriften mit.
Wie kann ich das abstellen?

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Word Seriendruck mit VBA
14.02.2024 15:09:10
Oppawinni
hm, ist halt kein Excel, aber vielleicht muss du nur den ActiveRecord an den Anfang der Schleife setzen?

For I = 1 To ActiveDocument.MailMerge.DataSource.RecordCount

ActiveDocument.MailMerge.DataSource.ActiveRecord = I
sBrief = Path & ActiveDocument.MailMerge.DataSource.DataFields("Garage_Nr").Value & "_Einladung-" & Jahr & ".pdf"
ActiveDocument.ExportAsFixedFormat OutputFileName:=sBrief, ExportFormat:=wdExportFormatPDF
Next I
AW: Word Seriendruck mit VBA
14.02.2024 15:18:41
Stier51
Wow, da kommt doch der VBA-Spezi durch, da ist es egal ob Excel oder Word.
Wenn man nur den Code übernimmt, aber das Prinzip eigentlich nicht verinnerlicht hat, dann sitzt man Stunden davor und grübelt.
Danke @Oppawinni das funktioniert !!!!
Anzeige
AW: Word Seriendruck mit VBA
14.02.2024 18:32:02
Yal
Scheint alles zu funktionieren, jedoch...

Du sagst: "Garage 141 bis ..."
aber mit "For i = 1 to ..."
kommt in der Datei "141.." die Daten vom 142.

Oppawini sagt "ActiveDocument.MailMerge.DataSource.ActiveRecord = i" an erster Stelle innerhalb des For.

Aber hast Du damit auch eine Datei "141_Einladung-2024.pdf"? Ich glaube eher, deine erste Datei ist "142_Einladung-2024.pdf" (aber mit richtiger Inhalt).

Es liegt daran, dass üblicherweise ein Recordset ab 0 zählt. Dementsprechend wäre richtig:
Sub ExportiereSerienbriefAlsPDF()

Dim i As Long
Const cPath = "C:\Users\stier\Garage\Dokumente\2024\Eigentümerversammlung\"

' Exportiere jeden Datensatz als separate PDF-Datei.
With ActiveDocument.MailMerge.DataSource
For i = 0 To .RecordCount - 1
.ActiveRecord = i
ActiveDocument.ExportAsFixedFormat ExportFormat:=wdExportFormatPDF, _
OutputFileName:=Path & .DataFields("Garage_Nr").Value & "_Einladung-" & Year(Date) & ".pdf"
Next i
End With
End Sub


Oder?

VG
Yal
Anzeige
AW: Word Seriendruck mit VBA
14.02.2024 22:31:53
Oppawinni
Hi Yal
oder halt:
For i = 1 To .RecordCount

.ActiveRecord = i - 1
...
AW: Word Seriendruck mit VBA
15.02.2024 11:25:19
Stier51
@Yal, ich habe den Code mal getestet.
In der "OutputFileName:=Path", fehlte noch das vorangestellte "c", oder in der Const-Definition das "c" wegnehmen.
Durch das "-1" wird die letzte Datei nicht erstellt, es wurde von 141 bis 259 alles mit richtigen Inhalt exportiert.
Als zusätzliche Datei dann noch die Überschriften.
Lasse ich die "-1" weg, dann wird alles exportiert.
Es ist auch egal ob ich als "For i = 0" oder "For i = 1" angebe.
Geht man auf Vorschau-Ergebnisse, dann ist der Datensatz 1 eben die Überschrift und es sind insgesamt 121 Datensätze.
Ich hatte mit Filter-Einstellungen - Alle Daten ohne "Garagen_Nr." im Text - ausgeblendet, oder bei "Empfängerliste bearbeiten" auch den Haken für die Überschriften weggenommen. Hatte aber nix gebracht.

Kurios dabei bleibt, wenn ich jetzt den Serienbrief öffne, werden die Überschriften nicht angezeigt und Datensatz 1 ist die 141. Gehe ich dann wieder in die Empfängerliste bearbeiten und unten in Quelle bearbeiten, dann werden die Überschriften wieder angezeigt. Ich darf das dann nur nicht abspeichern.

Auf jeden Fall funktioniert der Code auch, wenn die Einstellung "For i = 1" und ohne "-1" angegeben wird.

Vielen Dank an alle, die mir geholfen haben, trotz "Fremdforum", es erspart mir für die nächsten Jahre viel Zeit.
Bisher hatte ich jede Datei einzeln manuell erstellt.
Anzeige
Vielen Dank für die Rückmeldung
15.02.2024 11:36:40
Yal
@Schauan hat es bereits richtiggestellt: in Word-Serienbrief fängt die Aufzählung der Record mit 1 und endet bei Recordcount.
Also falsche Annahme meinerseits (gleichwohl es dich zum Qualitätskontrol geleitet hat ;-)

Wichtig war einzig den "ActiveRecord" auf i an erster Stelle zu setzen.

VG
Yal
AW: Word Seriendruck mit VBA
14.02.2024 23:01:02
schauan
Hallöchen,

die Recordaufzählung beim Serienbrief beginnt mit 1.
Das wird der TO schon wissen (owT)
14.02.2024 23:20:04
Oppawinni
sonst hätte er das wahrscheinlich gemerkt.
AW: Das wird der TO schon wissen (owT)
15.02.2024 08:28:40
schauan
@oppawinni, (yal)

das kann man schnell mal übersehen.

Bei
For i = 0 To .RecordCount - 1 

bekommst Du seltsamerweise keine Fehlermeldung, aber den ersten Datensatz doppelt und der letzte fehlt. Dass der erste Datensatz doppelt ist, bemerkt man ggf. nicht, wenn wg. gleichem Dateiname die erste Datei überschrieben wird. Bei einer größeren Anzahl kontrolliert man vielleicht die Anzahl bzw. den letzten Brief nicht ...

Nehmt mal zum Test einen Serienbrief, es reichen zwei Datensätze, und den Schleifenzähler mit in den Dateinamen ..


Anzeige
AW: Word Seriendruck mit VBA
14.02.2024 15:10:11
Stier51
Tja, Tschuldigung, ich habe schon noch erkannt, es heißt ja "Excel-Forum"
Danke, ich suche weiter, das Internet ist ja groß
AW: Word Seriendruck mit VBA
14.02.2024 15:19:33
schauan
Hallöchen,

um sicher zu gehen, stelle ich die Seiten einzeln ein, im Prinzip so

    With .MailMerge

.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource 'einzelnes Seriendruckelement auswaehlen
.FirstRecord = i
.LastRecord = i
.ActiveRecord = i
If Trim(.DataFields("N_V")) = "" Then Exit For 'Falls das Feld leer ist, Schleife verlassen
StrName = .DataFields("N_V") & "_" & .DataFields("EMail") 'Filename zusammensetzen
End With
.Execute Pause:=False
End With
Anzeige
AW: Word Seriendruck mit VBA
14.02.2024 15:36:40
Stier51
@schauan das ist mir schon wieder zu kompliziert.
Der Tipp von @Oppawinni war genau richtig und es funktioniert wie ich es brauche.
Trotzdem danke !
AW: Word Seriendruck mit VBA
14.02.2024 16:23:08
schauan
@Stier51
ja, da hast Du recht, das einfacher :-) Ich hab bei mir am Anfang der Schleife in ein neues Dokument "gedruckt" - also den Seriendruck mit einem Datensatz durchgeführt und das erzeugte Dokument danach weiterverarbeitet, einschließlich Export in eine pdf. Und dann in der Schleife weiter mit dem nächsten Datensatz...
Ich hab nur die andere Antwort nicht gesehen - zwischen Anfang meiner Antwort und dem Senden hat es noch an der Tür geklingelt &#9200
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige