ich erstelle ein Dokument mit Word (Office 2003 auf Windows Terminal Server 2003) und möchte dieses dann automatisch in ein PDF umwandeln und per Mail versenden. Der VBA-Code ist wie folgt:
Public Sub Send_PDF() Dim strPfad As String Dim strDatei As String Dim strProgramm As String Dim RunShell As String Dim i As Integer Dim strPS_Result As String Dim strOldPrinter As String Dim oProps As DocumentProperties Dim oProp As DocumentProperty Dim oActive As Word.Document Dim PDFReady PDFReady = False
Stop strProgramm = "C:ProgrammeFreePDF_MultidocFreePDF_Multidoc.exe" strPfad = "H:Temp" 'Prüfen ob Temp-Ordner existiert. Falls nicht wird dieser erstellt If Not IsDiskFolder(strPfad) Then MkDir strPfad End If strDatei = "Anfrage Nr. " & ActiveDocument.CustomDocumentProperties("Zeichen").Value & " - " & ActiveDocument.CustomDocumentProperties("Belegnummer").Value RunShell = strProgramm & " /f " & strDatei & " /p " & strPfad & " /e " ' & "/m 1" Application.Options.PrintBackground = False
'Warten bis Druck vollständig abgeschlossen ist For i = 1 To 100 Sleep (5) Next
'Prüfen ob PDF bereits existiert. Falls ja dann wird gelöscht Do While PDFReady = False PDFReady = IsFile(strPfad & strDatei & ".pdf") If PDFReady = False Then Kill strPfad & strDatei & ".pdf" End If Loop
'Hier tritt der Fehler auf !!!!!!!!!!!!!!!!!!!!!! Shell RunShell
tut mir leid, mit TS kenne ich mich nicht aus. Ich kann dir da leider nicht weiter helfen.
Auf jeden Fall kommt der Fehler von GS und nicht von meinem Programm FreePDF_Multidoc. So weit, so gut.
Noch eine Anmerkung:
Wenn Du keinen Pfad mit angibst und eine Mail erstellen willst, wird diese einfach im Tmp-Ordner gespeichert und dann versendet. Du brauchst also nicht die Datei selbst zu löschen.
'Warten bis Druck vollständig abgeschlossen ist For i = 1 To 100 Sleep (5) Next
Diese Anweisung ist dann überflüssig:
'Prüfen ob PDF bereits existiert. Falls ja dann wird gelöscht Do While PDFReady = False PDFReady = IsFile(strPfad & strDatei & ".pdf") If PDFReady = False Then Kill strPfad & strDatei & ".pdf" End If Loop
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Danke für die schnelle Antwort auch wenn mir diese jetzt nicht wirklich weiter hilft. Das komische ist, dass wenn ich das PDF manuell erstelle dann klappt es. Ich klicke einfach auf das Multidoc-Symbol in der Taskleiste und speichere dann dass PDF (z.B. auf dem Desktop). Dann läuft alles wunderbar durch.
Na ich werde dann wohl noch etwas auf die Suche gehen müssen
Es ist so, dass die Redrun.exe im Hintergrund den Benutzer wechselt, damit die Druckerumleitung funktioniert. Eventuell ist es deshalb auch nur ein Zeitproblem.
Versuche es doch einmal, noch eine kleine Sleep-Anweisung von 1 sec. mit einzubauen. Manchmal hilft das schon, damit das System wieder kurz durchatmen kann.
Ansonsten würde ich einfach noch einmal deine Frage im Forum von FreePDF stellen. Eventuell kann dir dort besser geholfen werden.
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
habe jetzt meinen Code noch etwas überarbeitet und es klappt jetzt. Zum einen habe ich die Printjobs.dll eingebunden und zusätzlich noch mal eine kleine Warteschleife.
Hier jetzt mein endgültiger Code, vielleicht kann ihn ja jemand brauchen :
Public Sub Send_PDF() Dim strPfad As String Dim strDatei As String Dim strProgramm As String Dim RunShell As String Dim i As Integer Dim strPS_Result As String Dim strOldPrinter As String Dim oProps As DocumentProperties Dim oProp As DocumentProperty Dim oActive As Word.Document Dim PDFReady Dim myDruckjobs As New Druckauftrag
PDFReady = False
strProgramm = "C:ProgrammeFreePDF_MultidocFreePDF_Multidoc.exe" strPfad = "H:Temp" If Not IsDiskFolder(strPfad) Then MkDir strPfad End If strDatei = "Anfrage Nr. " & ActiveDocument.CustomDocumentProperties("Zeichen").Value & " - " & ActiveDocument.CustomDocumentProperties("Belegnummer").Value RunShell = strProgramm & " /f " & strDatei & " /p " & strPfad & " /e " ' & "/m 1" Application.Options.PrintBackground = False 'Aktuellen Standarddrucker merken strOldPrinter = ActivePrinter
ActivePrinter = "FreePDF XP - Multidoc"
ActiveDocument.PrintOut
'Warten bis der Druckauftrag beendet ist x = 1 Do While x 0 x = myDruckjobs.Dokument_in_Spool("FreePDF XP - Multidoc", "", True) Loop
'Dem Programm noch mal ne kleine Pause gönnen For i = 1 To 10 Sleep (5) Next 'PDF löschen flas es bereits vorhanden ist Do While PDFReady = False PDFReady = IsFile(strPfad & strDatei & ".pdf") If PDFReady = False Then Kill strPfad & strDatei & ".pdf" End If Loop
'x = 1 'Do While x 0 x = myDruckjobs.Dokument_in_Spool("FreePDF XP - Multidoc", "", True) 'Loop
Die Schleife ist nicht nötig, da der Programmcode durch die Wait-Anweisung sowieso stoppt wird. Die Prüfung ergibt also immer als Rückgabewert = 0.
'Dem Programm noch mal ne kleine Pause gönnen '=>Sleep wird in Millisekunden gezählt. 'Besser wäre: immer 1 sec. zu warten, da 5 Millisec. einfach zu kurz sind.
'For i = 1 To 10 Sleep (1000) 'Next
Versuche es einmal so. Damit arbeitet das Programm insgesamt stabiler.
Gruß Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
hab mich leider zu früh gefreut. Der Fehler tritt immer noch auf. Jetzt aber bei einem TS auf dem Code bereits funktioniert hat. Auch Deine vorgeschlagenen Änderungen bringen keinen Erfolg.
Zuerst erscheint immer die Fehlermeldung von FreePDF:
Lösche einmal alle PS-Dateien in dem Ablagepfad und versuche es noch einmal. Manchmal bleiben einfach noch Reste über.
Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de
Gerne geschehen und weiterhin viel Spaß mit meinem Programm.
Bei Fragen oder Problemen einfach hier melden.
Ahmed
FreePDF_Multidoc (PS2PDF mit vielen Optionen f. FreePDF) File2PDF (komplette Verzeichnisse auf einen Streich umwandeln) findest Du alles hier: http://amTools.de