Serienbrief als Einzelpdfs exportieren

knuffal

Cadet 3rd Year
Registriert
Dez. 2017
Beiträge
59
Liebe Leute, ich habe Word 2007 und mittlerweile Win10 und würde gerne einen Serienbrief einzeln als PDFs speichern (über VBA-Code)

Hab dazu den Standardcode aus dem Internet damals kopiert und verwendet. Leider funktioniert der aber nicht mehr, und ich weiß nicht warum (ich kenne mich auch nur mittelmäßig mit VBA-Codes aus).
Habt ihr eine Lösung für den Code oder einen anderen der funktioniert (mit Speicherortauswahl und Dateiname aus den Seriendruckfeldern)??



Vielen Dank!!!

----------------------------------------

Sub Serienbrief()
' set variables
Dim iBrief As Integer, sBrief As String
Dim AppShell As Object
Dim BrowseDir As Variant
Dim Path As String

' catch any errors
On Error GoTo ErrorHandling

' Speicherort für die Serienbriefe auswählen
Set AppShell = CreateObject("Shell.Application")
Set BrowseDir = AppShell.BrowseForFolder(0, "Speicherort für Serienbriefe auswählen", 0, 16)

If BrowseDir = "Desktop" Then
Path = CreateObject("WScript.Shell").SpecialFolders("Desktop")
Else
Path = BrowseDir.items().Item().Path
End If

If Path = "" Then GoTo ErrorHandling
Path = Path & "\Serienbrief-" & Format(Now, "dd.mm.yyyy-hh.mm.ss") & "\" 'Ordner für PDF-Datein erstellen
MkDir Path

On Error GoTo ErrorHandling

' hide application for better performance
MsgBox "Serienbriefe werden exportiert. Dieser Vorganag kann einige Minuten dauern - Microsoft Word wird während dieser Zeit ausgeblendet", vbOKOnly + vbInformation
Application.Visible = False

' Einzelpdf erstellen und speichern
With ActiveDocument.MailMerge
.DataSource.ActiveRecord = 1
Do
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
sBrief = Path & .DataFields("ID3").Value & ".pdf" 'Name der Datei
End With
.Execute Pause:=False

If .DataSource.DataFields("ID3").Value > "" Then 'Dateiname wird aus der ID3 gebildet
ActiveDocument.SaveAs FileName:=sBrief, FileFormat:=wdFormatPDF 'er speichert die Datein nicht und hier beendet er das Makro
End If

ActiveDocument.Close False

If .DataSource.ActiveRecord < .DataSource.RecordCount Then
.DataSource.ActiveRecord = wdNextRecord
Else
Exit Do
End If
Loop
End With


' error handling
ErrorHandling:
Application.Visible = True

If Err.Number = 76 Then
MsgBox Err.Number & " Der ausgewählte Speicherort ist ungültig", vbOKOnly + vbCritical
ElseIf Err.Number = 5852 Then
MsgBox Err.Number & " Das Dokument ist kein Serienbrief"
ElseIf Err.Number = 4198 Then
MsgBox Err.Number & " Der ausgewählte Speicherort ist ungültig", vbOKOnly + vbCritical 'dieser Fehler taucht auf
ElseIf Err.Number = 91 Then
MsgBox Err.Number & " Exportieren von Serienbriefen abgebrochen", vbOKOnly + vbExclamation
ElseIf Err.Number > 0 Then
MsgBox Err.Number & " Unbekannter Fehler: " & Err.Number & " - Bitte Makro erneut ausführen.", vbOKOnly + vbCritical
Else
MsgBox "Serienbriefe erfolgreich exportiert", vbOKOnly + vbInformation
End If

End Sub
 
weil das leider auch nicht funktioniert...
Und ich weiß nicht, ob diese dann automatisch benannt werden können? jeden einzeln umbenennen ist nämlich extrem Zeitaufwändig :(
Ergänzung ()

Vielleicht hat jemand eine Idee, denn soweit bin ich jetzt gekommen:
Das Problem liegt nur in diesem Befehl "FileFormat:=wdFormatPDF "
Mache ich ein Dokument, dann gehts, aber ich brauch ja PDFs.
Über das Menü und die Registerkarte Acrobat kann ich auch keine Serienbriefe drucken.
Dann kommt der Fehler:
"acrobat pdfmaker konnte keinen serienbrief für das dokument erstellen"
Ich vermute einen Zusammenhang?
Einzeldokumente funktionieren.
Wie kann ich das Problem lösen?

Vielen Dank!!
 
Zuletzt bearbeitet:
Erschlage mich…
ActiveDocument.SaveAs FileName:=
sollte nicht gehen weil du ja nicht das Quelldokument speichern willst sondern den »imaginären« Serienbrief!

Um mich aus dem Fenster zu lehnen - das was du willst geht nicht!
Was du da druckst (und bitte: drucken, nicht speichern!) ist ein einzelnes einziges n-seitiges Dokument, ob nun der Reihe nach per Papier ausgeworfen oder als komplette PFD.
Mir wäre nämlich völlig fremd, dass die Serienbreiffunktion fähig ist einzelne Dokumente ≡ Druckaufträge abzusetzen. An der Klippe scheitert dein Plan.

Nebenher; wenn die einzelnen Dokumente / PDFs einen Namen bekommen sollen, wo bekommen sie den her?

Randnotiz
Wir bekommen immer wieder viel–seitige PDFs und ich den Job diese nicht nur zu splitten sondern auch zu benennen (wo nimmt man nur den Namen her? von innen). Ginge was du wolltest hätte ich der Quelle schon nette Grüße gesandt es doch gleich richtig zu machen. Lösung? Splitten. Mit AutoIt jede PDF öffnen, markieren und in die Zwischenablage, schließen. Gottseidank anhand eines auffindbaren Labels die Namensinfo herausschnippeln, PDF umbenamsen.
Wir hatten hier im Forum jüngst qausi dasselbe wo ich scheiterte per VBA just die Befehle Strg+A Strg+C abzusetzen. Wenn das ginge ginge es auch ohne AutoIt. Mit Pech musst du diese Krücke anstrengen.
Du kommst einfach nicht in Word an den einzelnen Serienbrief ran.

CN8
 
Ich glaub ganz verstanden habe ich dich jetzt nicht.
Ich versuch aber mal Licht ins Dunkel zu bringen:
1. früher ist es mit dem gleichen Code gegangen, also muss es doch möglich sein? Nur die letzten beiden Jahre nicht. und das würde ich gerne wieder ändern. :)
2. der Name des Dokumentes entspricht einem Seriendruckfeld.
3. Acrobat bietet die Funktion an, einzelne Serienbreife als Einzel-PDFs zu speichern, aber es geht bei mir leider nicht... Ich frage mich, ob es damit zu tun hat? Oder ist es nur Zufall?
4. Active Dokument bezieht sich in dem Fall auf den ersten geöffneten Serienbrief (den öffnet er seperat, sollte ihn drucken/abspeichern - was er ja nicht tut, und dann die Nr. 2 öffnen).

Danke :)
 
Meine Domäne ist das alles nicht.
1. was hat sich gegenüber früher geändert:; anderes Office? Updates?
2. & 4. dass ein »schwebender« Serienbrief ein active..docuement ist - ist mir neu, mag aber so sein und würde gewisse Dinge vereinfachen.
3. ich würde, und wenn ich Acrobat auch nur dem Namen nach kenne, nichts anderes erwarten.
CN8
 
Ok gibt es vielleicht jemanden, der sich damit auskennt und mir weiterhelfen kann??
 
Ich wiundere mich auch, dass uns hier keiner beispringt.

Mein Ansatz wäre das Makro Schritt-Für-Schritt auszuführen und Varaibleninahlte zu kontrollieren. nebst Debug.Print und dem Direktfenster. Vielleicht klärt das auf warum nichts gedruckt/gespeichert wird.

CN8
 
Zurück
Oben