"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

VBA PDF-Dateien erstellen

LakeBodom 27.07.2005 - 11:01 1210 0
Posts

Bodominjaervi

OC Addicted
Registered: Jul 2002
Location: AT
Posts: 7813
Hab ein Problem unter Access 2000 und VBA.

Möcht gern programmgesteuert ein PDF-File erstellen.
Dazu hab ich die Zusatz-Programme GhostScript und MakePDF.

Ein Problem dabei ist, dass ich immer zuerst "Drucken" muss. (Per Menü "Drucken", GhostScript-Datei auswählen,
damit ein "Dateiname.ps" erstellt wird.)

Dann kann ich mittels:

Code:
[COLOR=blue]Dim[/COLOR] strShell [COLOR=blue]As String[/COLOR] [COLOR=green]'Kommandozeile[/COLOR]
[COLOR=blue]Dim[/COLOR] doit [COLOR=blue]As Variant    [/COLOR][COLOR=green]'Ausführen[/COLOR]
[COLOR=blue]Dim[/COLOR] strName [COLOR=blue]As String  [/COLOR][COLOR=green]'Dateiname[/COLOR]
   
  [COLOR=green] 'Verzeichnis von MakePDF angeben
   'Verzeichnis von GhostScript angeben und Formularname herausfiltern
   '/D ... (Delete) Eingabedatei (*.ps) wird nach Umsetzung gelöscht
   '/S ... (Show) Fertige PDF-Datei nach der Umsetzung anzeigen
   '/V1.2, /V1.3, /V1.4 ... (Version) Definiert Acrobate-Version
   '/Q ... (Quiet) Keine Meldungen, sonst. Anzeigen während Umsetzung
   '/O "Ausgabedatei" ... (Output) Pfad und Name für die Ausgabedatei
   '/M Betreff ... (Message) Erstellt neue Nachricht mit der angegebenen
   '                    Betreffzeile und der erstellten PDF-Datei als Anhang[/COLOR]
   
   strName = "C:\Tools\GS\Output\" + Me.Caption + ".pdf"
     
   strShell = Chr$(34) & "C:\Tools\MakePDF.exe" & Chr$(34) & " " & _
              Chr$(34) & "C:\Tools\GS\Input\Dateiname.ps" & Chr$(34) & _
              " /D /S /V1.4 /Q /O " & Chr$(34) & strName & Chr$(34)
   
   doit = Shell(strShell)

die eben per Drucker angelegte "Dateiname.ps" in ein PDF-Format umwandeln

strName = Ausgabedatei (zB.: Katalog.pdf)
"C:\Tools\MakePDF.exe" = Prog zum Umwandeln von .ps in .pdf.

Problem: Ich würd gern vor der Umwandlung den Druckvorgang programmgesteuert aufrufen,
damit das lästige "Menü-Drucken" wegfällt.

Mit der Funktion DoCmd.OpenReport funktioniert es leider nicht, da immer die Fehlermeldung:

Code:
Laufzeitfehler '2585':

Diese Aktion kann nicht ausgeführt werden,
solange ein Formular- oder Berichtsereignis verarbeitet wird.

Ist DoCmd.OpenReport die richtige Methode?
Kann ich VBA irgendwie zum Warten bringen, bis das Ereignis abgearbeitet ist?

Tia
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz