Discussion:
Probleme beim Speichern im Format PDF (mit VBA)
(zu alt für eine Antwort)
Maria Fähndrich
2010-03-09 12:14:24 UTC
Permalink
Hallo Word-VBA-Spezialisten,

zur Archivierung sollen Word-Dateien nur im Format PDF gespeichert
werden. Dafür ist auf dem Server M:\ der Ordner "Archiv" mit
Unterordnern z. B. "Kunde" usw. vorbereitet. Als Dateiname soll der
Typ (z. B. Brief, Aktenvermerk usw.) verwendet werden, der bei einer
Textmarke hinterlegt ist, zusätzlich das aktuelle Datum und der
Betreff, z. B. Aktenvermerk 2010-03-09 Wasserschaden.pdf. Der Pfad und
der ganze Dateiname sind bereits in einer TextBox der UserForm
enthalten: usf_4_pdf.TxtB_GanzName.Value. Das Datum wird so
festgelegt: Year(Date) & "-" & Month(Date) & "-" & Day(Date)

Nun treten drei Problem auf:
1. Es ist erforderlich, dass vor dem Speichern im Format *.pdf zuerst
im Format *.docm (Datei enthält Makros!) gespeichert wird. Als
Notlösung wurde ein "Loeschordner" in M:\Archiv erstellt, in dem alle
nicht benötigten Dateien abgespeichert und immer wieder überschrieben
werden (Dateiname "Zum Loeschen.docm").
2. Das Datum erscheint nur in der Form 2010-3-9.
3. Beim Ausführen des Makros "Speichern im Format PDF" kommt manchmal
– aber nicht immer – die Meldung "Laufzeitfehler '-2147 467259
(80004005) Diese Datei wird gerade von einer anderen Anwendung oder
einem anderen Benutzer verwendet". Wenn dann im Visual Basic Editor
durch Klick auf das Symbol eines grünen Dreiecks "Fortsetzen" geklickt
wird, läuft das Speichern doch plangemäß ab.

Nun meine Fragen:
1. Kann das Speichern im Format *.docm ausgelassen werden?
2. Wie erscheint das Datum richtig als 2009-03-09, also mit führender
Null bei Zahlen < 10?
3. Warum erscheint manchmal aber nicht immer die Meldung der
anderweitigen Benutzung und wie kann diese Frage ausgeschaltet werden?
4. Kann außerdem die Word-Datei geschlossen werden, sobald die PDF-
Datei geöffnet wurde?

Hier meine Programmierung
In der UserForm " usf_4_pdf " ist bereits der Pfad und Dateiname in
einer TextBox enthalten: TxtB_GanzName. Er setzt sich zusammen aus
StrPfad (=M:\Archiv), aus dem Ordner z. B. Kunde und aus dem
Dateinamen StrDateiName.
Wenn auf die Schalflächte OK geklickt wird, läuft folgendes Makro ab:

Private Sub CmdB_OK_Click()
'
Dim StrDateiName As String
Dim StrTag As String
Dim StrPfad As String
'
StrDateiName = usf_4_pdf.TxtB_GanzName.Value
StrTag = Year(Date) & "-" & Month(Date) & "-" & Day(Date)
'
'Speicherort auswählen
'
StrPfad = "M:\Archiv\"
ChangeFileOpenDirectory ("M:\")
'
'Vorab als Word-Datei speichern
'
ActiveDocument.SaveAs FileName:="M:\Archiv\Loeschordner
\ZumLoeschen.docm", _
FileFormat:=wdFormatXMLDocumentMacroEnabled,
LockComments:=False, _
Password:="", AddToRecentFiles:=True, WritePassword:="", _
ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False,
SaveAsAOCELetter:= _
False
'
' Als PDF speichern
'
ActiveDocument.ExportAsFixedFormat _
OutputFileName:=StrDateiName, _
ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=True, _
BitmapMissingFonts:=True, _
UseISO19005_1:=True
'
Unload usf_4_pdf
'
End Sub

Vielen Dank im Voraus und herzliche Grüße

Maria
Thomas Gahler
2010-03-10 09:35:34 UTC
Permalink
Hallo Maria
2. Wie erscheint das Datum richtig als 2009-03-09, also mit führender
Null bei Zahlen < 10?
Du musst zusätzlich die Format$()-Funktion verwenden

StrTag = format$(Year(Date),"0000") & "-" & _
Format$(Month(Date),"00") & "-" & _
Format$(Day(Date),"00")


Doch noch einfacher wäre

StrTag = Format(Now, "yyyy-mm-dd")
- oder -

StrTag = Format(Date, "yyyy-mm-dd")


Für die anderen Fragen muss ich mal an einem Abend reinschauen, wird wohl
Wochenende werden
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP3), Office XP (SP3)
Maria Fähndrich
2010-03-15 13:11:52 UTC
Permalink
Hallo Thomas,

vielen Dank für den Tipp für das Datum.
Ich bin nun so vorgegangen und alles klappt wunderbar, das Datum
erscheint im Format 2010-03-09.

Dim DatTag As Date
'
DatTag = Format(Date, "yyyy-mm-dd")

Herzliche Grüße

Maria

On 10 Mrz., 10:35, "Thomas Gahler" <***@LASSEN.bluemail.ch>
wrote:
...
Post by Thomas Gahler
Du musst zusätzlich die Format$()-Funktion verwenden
StrTag = format$(Year(Date),"0000") & "-" & _
    Format$(Month(Date),"00") & "-" & _
    Format$(Day(Date),"00")
Doch noch einfacher wäre
StrTag = Format(Now, "yyyy-mm-dd")
- oder -
StrTag = Format(Date, "yyyy-mm-dd")
...
Thomas Gahler
2010-03-15 13:42:56 UTC
Permalink
Hallo Maria
Post by Maria Fähndrich
vielen Dank für den Tipp für das Datum.
Gerne geschehen

Hast du meinen Beitrag von gestern auch entdeckt? (auf Google kann ich ihen
sehen, auf dem news.microsoft.com nicht)
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP3), Office XP (SP3)
Thomas Gahler
2010-03-13 20:37:39 UTC
Permalink
Hallo Maria
1. Kann das Speichern im Format *.docm ausgelassen werden?
Ja
2. Wie erscheint das Datum richtig als 2009-03-09, also mit führender
Null bei Zahlen < 10?
Siehe meine andere Antwort
3. Warum erscheint manchmal aber nicht immer die Meldung der
anderweitigen Benutzung und wie kann diese Frage ausgeschaltet werden?
Kann sein, dass du die gleiche Datei nochmals exportierst und wenn diese
dann bei dir am PC offen ist, dann kommt die Meldung (dann sollte es aber
nachher nicht weiter gehen)

Prüfen ob die Datei bereits geöffnet oist kannst du so
- How to check if a file has already been opened by another user
http://word.mvps.org/faqs/macrosvba/CheckIfFileOpen.htm
4. Kann außerdem die Word-Datei geschlossen werden, sobald die PDF-
Datei geöffnet wurde?
Ja





Sub Demo()
Dim doc As Word.Document

Set doc = Documents.Add
doc.Range = "Hallo Welt"

doc.ExportAsFixedFormat _
OutputFileName:="C:\Users\Thomas\Desktop\Franz.pdf", _
ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=True, _
OptimizeFor:=wdExportOptimizeForPrint

doc.Close wdDoNotSaveChanges

Set doc = Nothing
End Sub
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows Vista (SP2), Office 2007 (SP2)
Maria Fähndrich
2010-03-15 13:44:07 UTC
Permalink
Hallo Thomas,

ebenfalls vielen Dank für Deine weiteren wertvollen Tipps.

Die Word-Datei wird nun geschlossen, sobald die PDF-Datei erstellt
wird. Dafür gehe ich so vor:

ActiveDocument.ExportAsFixedFormat _
OutputFileName:=StrDateiName, _
ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=True, _
BitmapMissingFonts:=True, _
UseISO19005_1:=True
ActiveDocument.Close wdDoNotSaveChanges

Die Datei wird nun vor dem Speichern als PDF nicht mehr im Fomat
*.docm gespeichert.

Aber leider:

Das Problem mit dem Laufzeitfehler besteht weiterhin, mittlerweile
jedes Mal. Hier nochmals die Meldung:
"Laufzeitfehler '-2147 467259 (80004005)
Diese Datei wird gerade von einer anderen Anwendung oder
einem anderen Benutzer verwendet".

Ich kann immer noch im Visual Basic Editor durch Klick auf das Symbol
eines grünen Dreiecks "Fortsetzen" klicken,
dann läuft das Speichern in PDF plangemäß weiter und die Word-Datei
wird geschlossen.

Die Word-Datei wird weder exportiert noch wurde sie zusätzlich von
einer anderen Person geöffnet.
Aber sie ist natürlich von mir geöffnet. die Programmierung von
Jonathan West konnte ich in mein Modul
Private Sub CmdB_OK_Click() nicht einbauen, darum konnte ich auch
nichts auf diesem Wege feststellen.

Im Ordner C:\TEMP befand sich jedoch keine Datei, als die Meldung
erschien, auf dem man auch die
Schaltfläche "Debugger" aktivieren kann.

Jetzt habe ich zwei weitere Fragen:
1. Diese Fehlermeldung mit dem Laufzeitfehler klingt total unlogisch.
Gibt es irgendeinen Befehl, dass eine Datei im Format PDF
gespeichert werden kann,
auch wenn sie "gerade von einer anderen Anwendung (nämlich Word)
oder einem >>anderen<<
Benutzer (nur von mir) verwendet wird"?
2. Kann mit VBA auch das Programm Word selbst geschlossen werden?

Ach, was ich ganz vergessen habe zu erwähnen: ich arbeite mit Word
2007, SP2 und Windows XP Service Pack 3.

Nochmals dankeschön für Deine wertvollen Tipps.

Herzliche Grüße

Maria
Post by Thomas Gahler
Hallo Maria
1. Kann das Speichern im Format *.docm ausgelassen werden?
Ja
...
Post by Thomas Gahler
3. Warum erscheint manchmal aber nicht immer die Meldung der
anderweitigen Benutzung und wie kann diese Frage ausgeschaltet werden?
Kann sein, dass du die gleiche Datei nochmals exportierst und wenn diese
dann bei dir am PC offen ist, dann kommt die Meldung (dann sollte es aber
nachher nicht weiter gehen)
Prüfen ob die Datei bereits geöffnet ist kannst du so
- How to check if a file has already been opened by another userhttp://word.mvps.org/faqs/macrosvba/CheckIfFileOpen.htm
4. Kann außerdem die Word-Datei geschlossen werden, sobald die PDF-
Datei geöffnet wurde?
Ja
...
Post by Thomas Gahler
--
Thomas  Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows Vista (SP2), Office 2007 (SP2)
Lesen Sie weiter auf narkive:
Loading...