none
MS Publisher VBA PDF uniqe Export Serienbrief RRS feed

  • 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

    Dienstag, 26. Juni 2018 11:09

Alle Antworten

  • .DataSource hat bestimmt eine MoveNext-Methode, während ActiveRecord wahrscheinlich schreibgeschützt ist.

    Dienstag, 26. Juni 2018 12:13
  • 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. ;(

    Dienstag, 26. Juni 2018 13:04
  • 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.

    Dienstag, 26. Juni 2018 13:37
  • >> 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.

    Mittwoch, 27. Juni 2018 05:49