PDA

Vollständige Version anzeigen : Variabler Pfadname bei pdf-Erstellung mit free pdf in excel2010


rafromm
23.07.2012, 18:31
Hallo,

ich habe ein Problem bei der Erstellung von pdf-Dateien aus Excel heraus mit free pdf. Prinzipiell funktionert alles, wenn ich die Laufwerkspfade explizit benenne. Mit relativen Pfadangaben funktioniert es aber nicht.

Damit mein Problem klarer und der Code besser verstanden wird hole ich ein bischen aus:
Ich habe unter einem bestimmten Laufwerkspfad jeden Monat ein neues Unterverzeichnis, z.B. 20012_06, 2012_07 usw.

Ich möchte mit free pdf eine pdf-Datei in diesem Verzeichnis ablegen. Der Dateiname soll sich aus "aktuellerMonatJahr"_Preisliste_"Name_aktuelles_Sheet" zusammensetzen. Gebe ich bei den Pfadangaben den festen Pfad an, wo .ps und .pdf abgelegt werden soll funktioniert alles.
Ich möchte den Pfad aber teilweise flexibel vom Speicherort haben.
Es wird zwar die .ps Datei erzeugt, aber kein pdf. Ich vermute der shell Befehl findet die .ps Datei nicht. Was mache ich falsch?

Dim strAktuellerDrucker As String
Const Pfad_KundenPL = "D:\DATEN\xyz\Kunden"

'in Preislistenpfad wechseln
'falls Laufwerk nicht vorh., Errorbehandlung Standardlaufwerk verwenden
On Error Resume Next
ChDrive LW
ChDir Pfad_KundenPL
On Error GoTo 0 ' Fehlerbehandlung deaktiveren

'pdf Datei von Preisliste erzeugen
strAktuellerDrucker = Application.ActivePrinter
ActiveSheet.PrintOut ActivePrinter:="FreePDF XP auf Ne05:", _ PrintToFile:=True, PrToFileName:=".\" & Format(Date, "yyyy_mm") & "\" _
& Format(Date, "mmmmyyyy") & "_Preisliste_" & ActiveSheet.Name & ".ps"
Shell ("c:\programme\freepdf_xp\freepdf.exe .\" & Format(Date, "yyyy_mm") & "\" & Format(Date, "mmmmyyyy") & "_Preisliste_" & ActiveSheet.Name & ".ps /a /d /x")
Application.ActivePrinter = strAktuellerDrucker

Hajo_Zi
23.07.2012, 18:49
warum benutzt Du nicht einfach speichern unter?

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm" onclick="window.open(this.href);return false"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

haklesoft
24.07.2012, 08:06
Hallo ?

das Abschalten der Fehlerüberwachung mit On Error Resume Next ist hier ungünstig, denn Du bekommst so nicht mit, wenn auf das Ziellaufwerk oder den Pfad nicht zugegriffen werden kann. Besser überwachen und ggf. abbrechen.
Du brauchst aber weder ChDrive noch ChDir, denn freepdf als externes Programm weiß und erfährt doch nichts von Deinem Basispfad, es sei denn, Du übgibst beim Aufruf den vollen Pfad.

Machs übersichtlicher und pack den langen Parameter in eine Variable, die Du für beide Aufrufe verwendest. Dabei müsstest Du eigentlich noch testen, ob alle Unterpfade vorhanden sind. Bis zur Übergabe der Variable bist Du flexibel und kannst ändern was immer Du willst.

sVariable = ".\" & Format(Date, "yyyy_mm") & "\" & Format(Date, "mmmmyyyy") & "_Preisliste_" & ActiveSheet.Name & ".ps"

PrintToFileName:=Pfad_KundenP & sVariable

Shell("c:\programme\freepdf_xp\freepdf.exe " & Pfad_KundenP & sVariable & " /a /d /x")


Hang loose, haklesoft

Hasso
24.07.2012, 12:48
Ich kann mich nur Hajo anschließen - warum benutzt du nicht die Möglichkeit, die Datei direkt als PDF zu speichern, ohne dein FreePDF?

Dass dies jetzt möglich ist, ist nun wirklich eine der sehr sinnvollen Neuerungen von Office 2007/2010!

rafromm
24.07.2012, 18:04
Ich möchte es nicht über "Speichern unter" machen, da ich jpg.Dateien enthalten habe. Mit Free pdf kommen die besser raus als mit "Speichern unter".

Ich weiß ich könnte auch an den jpg's arbeiten damit die Qualität rauskommt die ich gerne hätte :)

rafromm
24.07.2012, 18:11
Hallo haklesoft,

danke für Deinen Tipp.
Du hast jetzt zwar meinen Code aufgeräumt, in der Shell steht aber jetzt immer noch der direkte Pfad wo die ps-Datei liegt und wo das pdf hin soll.

An einer anderen Stelle im Makro mache ich es beim Öffnen und Speichern von Dateien wie im Code oben. Ich gebe einen Standardpfad vor, sollte es den nicht geben wird der Standardpfad vom PC genommen. So bekomme ich keine Fehlermeldung.
Das war mein Grundgedanke für den Code oben. Ich wollte einen Pfad vorgeben, sollte es den aber nicht geben hätte ich erwartet das auf den Standardpfad zurückgegriffen wird, es keine Fehlermeldung gibt und mein Makro weiterläuft.
Zu 99% verwende ich es auf dem gleichen Rechner, wo der Pfad fest ist. Ab und zu nehem ich es auf einem USB-Stick auch auf einen anderen Rechner mit und will es dann auf dem USB-Stick speichern. Und das am besten ohne groß den Pfad angeben zu müssen.

haklesoft
25.07.2012, 07:53
...Ich gebe einen Standardpfad vor, sollte es den nicht geben wird der Standardpfad vom PC genommen.
Meines Wissens gibt es keinen "Standardpfad des PC". Und welchen Pfad freepdf ggf. bedient, kann ich nicht sagen ; - der Pfad muss aber nicht mal unverändert bleiben.
Du könntest generell den APPDATA-Pfad oder den TEMP-Ordner verwenden um das PDF fertig zu erstellen. Wenn es den Zielpfad gibt, kannst Du die Datei anschließend dahin verschieben. Jedenfalls solltest Du Pfade immer selbst belegen und nicht von Annahmen ausgehen.

Hang loose, haklesoft

rafromm
25.07.2012, 19:19
ja ich werd wohl nicht drum rum kommen zu prüfen ob es den Pfad gibt, bzw. ihn anzulegen. Alles andere wird wohl nicht funktionieren. Hab mich da glaube ich verrannt.

Danke für die Hilfe