Fragensteller
MS Publisher VBA PDF uniqe Export Serienbrief

Frage
-
Hallo Community,
ich möchte meine Publikation gerne in ein PDF-Dokument speichern und dafür einen bestimmten Dateinamen verwenden. Jede Zeile in meiner Datenquelle stellt ein eigenes Dokument dar (so wie es auch üblich ist). Ich habe mir auf Grundlage der aktuellen VBA Referenz (https://msdn.microsoft.com/vba/vba-publisher) folgendes Makro erstellt.
Sub UniquePDFExport() Dim v_frstRecord As Integer Dim v_lastRecord As Integer Dim v_actRecord As Integer Dim v_i As Integer With ActiveDocument.MailMerge v_frstRecord = .DataSource.FirstRecord v_lastRecord = .DataSource.RecordCount .DataSource.ActiveRecord = 1 v_actRecord = .DataSource.ActiveRecord For v_actRecord = 1 To v_lastRecord If v_actRecord < v_lastRecord Then .DataSource.ActiveRecord = v_actRecord 'MsgBox "Aktueller Datensaztz: " & v_actRecord & vbCrLf _ ' & .DataSource.DataFields.item("Import Id").Value ScreenUpdating = True ThisDocument.ExportAsFixedFormat pbFixedFormatTypePDF, _ "C:\test\" & .DataSource.DataFields.item("Artikelnummer").Value & "_dc1.pdf" End If Next v_actRecord End With End Sub
Leider scheiter ich daran, dass beim Export der Datensatz nicht gewechselt wird. Ich erhalte zwar meine "unique-PDF" Dokumente, allerdings erhalten alle den gleichen Datensatz. Wenn ich den export auskommentiere und über die msgbox das Ergebnis betrachte, funktioniert der Code einwandfrei. (Datensatz wechselt bis die Bedningungen der Schleife erfüllt sind). Ich finde keinen Lösungsansatz mehr um diese Funktion erfolgreich umzusetzen und hoffe auf ein Hinweis von euch.
Vielen Dank im Voraus an alle, die sich diesem Problem annehmen.
Gruß, Knut
Alle Antworten
-
Hi,
danke für deine Antwort.
Die MoveNext-Methode scheint es in Publisher gar nicht zu geben. Wenn ActiveRecord schreibgeschützt ist, warum kann ich ihn dann aber ändern? Irgendwie muss er ja den Datensatz wechseln, sonst würde ich ja nicht unterschiedlich Dokumentennamen erhalten.
Im folgenden Beispiel kann ich die Datensätze auch durchlaufen.
Sub ShowActiveRecord() Dim v_Field1 As MailMergeDataField Dim v_Field2 As MailMergeDataField With ActiveDocument.MailMerge.DataSource .ActiveRecord = 1 Do If .ActiveRecord <= 10 Then Set v_Field1 = .DataFields.item("Field1") Set v_Field2 = .DataFields.item("Field2") MsgBox "Aktiver Datensatz ist: " & _ v_Field1.Value & " " & _ v_Field2.Value Else Exit Do End If .ActiveRecord = .ActiveRecord + 1 Loop End With End Sub
Ich hatte die Idee mit die Methode ActiveScreen zu verwenden, welche es in Publisher aber auch nicht gibt. ;(
-
Das einzige, was ich gefunden habe ist:
ActiveDocument.Fields.Update
Wenn du also den aktiven Datensatz änderst, könnte das helfen.
Die andere Alternative ist, den Execute von MailMerge in ein neues Dokument durchzuführen.Da du ja weißt, wieviele Seiten dein Ursprungsdokument hat, kannst du nun beim Export in der Schleife als PDF zusätzlich auch die Seiten von/bis angeben.
Es könnte halt nur ein Speicherplatzproblem werden, wenn das Dokument zu groß wird.
-
>> ActiveDocument.Fields.Update
Die Methode gibt es bei Publisher nicht. Mit deinen anderen Lösungsvorschlag hatte ich mich vorher schon
auseinandergesetzt, was für mich aber nicht in Frage kommt, weil die Verbindung zur Datenquelle getrennt
wird. Ich verstehe die Philosophie von Microsoft an dieser Stelle auch nicht. Genau diese Funktionen würden
das Produkt enorm aufwerten, so ist es einfach nur Käse.