thomas1972
Goto Top

Word Dokument als PDF speichern inkl. Option nichtdruckbare Information Textmarke Überschrifften und Aufbau Dateinamen und Feldnamen Version und Datum

Hallo,

ich möchte gerne aus Word ein geöffnetes Dokument automatisch per Klick als PDF Datei speichern.
Hierzu soll zusätzlich Option der nichtdruckbare Information Textmarke Überschrifften mit einfließen, so dass diese im PDF als Sprungmarken gespeichert sind.

Gleichzeitig soll der Dateiname des PDF erweitert werden .
(hier habe ich im Dokument eine Versionsspalte und Datum der Änderung), in der Fußzeile bekomme ich diese Information ohne Probleme eingebunden.
Nur wie bekomme ich diese zusätzlich in den SaveAs Dateinamen erweitert

Bestehender Dateiname & " " Feldnamen StyleRef Formatvolagennamen _Version & " " & _Datum.pdf

Leider muss ich hier in der Umsetzung passen,

vielleicht kann mir jemand helfen.

Grüße aus München

Content-Key: 316047

Url: https://administrator.de/contentid/316047

Printed on: April 28, 2024 at 07:04 o'clock

Member: colinardo
colinardo Sep 23, 2016 updated at 09:09:14 (UTC)
Goto Top
Hallo Thomas,
kein Problem wenn du stattdessen die ExportAsFixedFormat Methode benutzt, die kennt den entsprechenden Parameter:
(hier habe ich im Dokument eine Versionsspalte und Datum der Änderung), in der Fußzeile bekomme ich diese
Das musst du mir noch etwas weiter erläutern (evt. Bild), das kann ich so leider nicht eindeutig zuordnen. Wenn du das tust bau ich es in den u.s. Code ein wo jetzt nur der String "Formatvorlage" steht. Meinst du die Felder in den "erweiterten Dokumenteigenschaften" ?

Beachte das PDF wird hier im Beispiel im selben Pfad wie das Ursprungsdokument gespeichert
Sub SaveAsPDF()
    Dim filepath As String
    Set fso = CreateObject("Scripting.FileSystemObject")  
    With ActiveDocument
        filepath = .Path & "\" & fso.GetBasename(.Name) & "_" & "Formatvorlage" & "_" & Format(Date, "yyyymmdd") & ".pdf"  
        .ExportAsFixedFormat filepath, wdExportFormatPDF, False, wdExportOptimizeForPrint, wdExportAllDocument, IncludeDocProps:=True, CreateBookmarks:=wdExportCreateHeadingBookmarks
    End With
    Set fso = Nothing
End Sub
Grüße Uwe
Member: colinardo
colinardo Sep 23, 2016 updated at 09:15:40 (UTC)
Goto Top
Zur Info, wenn du die CustomDocumentProperties (Benutzerdefinierte Dokumenteigenschaften) meinst die kannst du so ansprechen:
ActiveDocument.CustomDocumentProperties("Name der Eigenschaft").Value  
Wenn du bereits vom System "vorhandene" Eigenschaften modifiziert hast die erreicht man stattdessen über diese Auflistung:
ActiveDocument.BuiltInDocumentProperties("Last save time").Value  
Member: thomas1972
thomas1972 Sep 23, 2016 at 09:14:15 (UTC)
Goto Top
Hallo Uwe,

vielen Dank für deine Rückmeldung:

ich hoffe du kannst anhand der Bilder erkennen was ich wie umgesetzt habe
2016-09-23 11_10_34- - microsoft word
2016-09-23 11_11_12-- microsoft word
Member: colinardo
colinardo Sep 23, 2016 updated at 09:17:59 (UTC)
Goto Top
Aber die Felder im Dokument selber (nicht in der Fußzeile) woher beziehen diese Ihre Daten ? Aus einer Dokumenteigenschaft wie oben geschrieben, oder werden die dort manuell hineingeschrieben ?
Member: thomas1972
thomas1972 Sep 23, 2016 at 09:23:02 (UTC)
Goto Top
Hallo Uwe,

diese Werte trage ich selbst manuell bei Version und Datum ein.

Gruß
Thomas
Member: colinardo
colinardo Sep 23, 2016 updated at 09:28:30 (UTC)
Goto Top
Dann markiere die Version bzw. Datum und setze ein Bookmark (Textmarke), das selbe machst du mit dem Datum, dann kommst du mit
ActiveDocument.Bookmarks("NamedesBookmarks").Range.Text  
an den Inhalt.

Ich würde das aber anders machen und die Version und das Datum in einer benutzerdefinierten Dokumenteigenschaft speichern (wie oben beschrieben). Diese lassen sich dann auch im Explorer anzeigen, nutzen und ändern und bei Bedarf auch ohne das Dokument zu öffnen abfragen.
Member: thomas1972
thomas1972 Sep 23, 2016 updated at 09:53:28 (UTC)
Goto Top
Danke Uwe,

habe ich soweit im bestehenden Dokument einbauen können,

wo muss ich das Savepdf speichern, dass dieses über Markos bei jeden Word Dokument verwendet werden kann.

Im Projekt normal
Module -> Modul 1

Sub SaveAsPDF()
   Dim filepath As String
    Set fso = CreateObject("Scripting.FileSystemObject")  
    With ActiveDocument
        filepath = .Path & "\" & fso.GetBasename(.Name) & " Version " & ActiveDocument.Bookmarks("Version").Range.Text & " vom " & ActiveDocument.Bookmarks("Datum").Range.Text & ".pdf"  
        .ExportAsFixedFormat filepath, wdExportFormatPDF, False, wdExportOptimizeForPrint, wdExportAllDocument, IncludeDocProps:=True, CreateBookmarks:=wdExportCreateHeadingBookmarks
    End With
    Set fso = Nothing
End Sub

erscheint der Hinweis:
Laufzeitfehler 5941
Das angeforderte Element ist nicht in der Sammlung vorhanden

Habe ich dieses im Project des Word Dokuments im Modul geht es.

Muss ich die
ActiveDocument.Bookmarks("Version").Range.Text
ActiveDocument.Bookmarks("Datum").Range.Text
in globale Variablen schreiben lassen um darauf zurück zu greifen? oder wie setzte ich dieses am Besten um?

Danke für die abschließende Rückmeldung.

Gruß
Thomas
Member: colinardo
colinardo Sep 23, 2016 updated at 10:19:41 (UTC)
Goto Top
Du erstellst ein Add-In-Dokument *.xlam dann kannst du die Methode aus jedem Dokument heraus aufrufen. Wenn es natürlich in dem aktiven Dokument keine Bookmarks mit den Namen gibt ist klar warum er dann deinen Fehler auswirft face-smile Du solltest also noch diesen Fall abfangen!

btw. du kann das ActiveDocument.Bookmarks("Version").Range.Text verkürzen auf .Bookmarks("Version").Range.Text weil du diese ja im With ActiveDocument Abschnitt schreibst.

Sub SaveAsPDF()
    On Error Resume Next
    Dim filepath As String, strVersion As String, strDate As String
    Set fso = CreateObject("Scripting.FileSystemObject")  
    With ActiveDocument
        strVersion = Replace(Trim(.Bookmarks("Version").Range.Text), Chr(13), "")  
        strDate = Replace(Trim(.Bookmarks("Datum").Range.Text), Chr(13), "")  
        If Err.Number <> 0 Then
            MsgBox "Mindestens eine benötigte Textmarke (Version, Datum) wurde nicht gefunden.", vbExclamation  
            Exit Sub
        End If
        filepath = .Path & "\" & fso.GetBasename(.Name) & " Version " & strVersion & " vom " & strDate & ".pdf"  
        .ExportAsFixedFormat filepath, wdExportFormatPDF, False, wdExportOptimizeForPrint, wdExportAllDocument, IncludeDocProps:=True, CreateBookmarks:=wdExportCreateHeadingBookmarks
    End With
    Set fso = Nothing
End Sub


Man kann auch nach Text mit bestimmten Formatvorlagen suchen, aber für das Debugging bräuchte ich das Dokument hier, das würde jetzt zu weit gehen.:
        With ActiveDocument.Content.Find
            .Style = Styles("Version")  
            .Wrap = wdFindStop
            .Execute
            If .Found Then
                strVersion = Replace(Trim(.Parent.Text), Chr(13), "")  
            End If
        End With
Kannst du ja selber mal mit experimentieren wenn du willst.