Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
676to680
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
676to680
676to680
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Exceldatei zu PDF Verweis

Exceldatei zu PDF Verweis
03.10.2005 14:12:44
FrankyB
Hallo Leute,
endlich habe ich eine Prozedur hier im Forum gefunden die so funzt wie ich mir das vorstelle.
Eine bestimmte Excel Datei wird in PDF umgewandelt und in ein - von mir vorgegebenen Ordner gespeichert - ohne weitere Meldungen - alles läuft im Hintergrund ab - perfekt.
Jedoch einen kleinen Haken hat die Sache noch.
Damit das Makro läuft, muss ein Verweis auf den AcrobatDistiller gesetzt werden. Also setzt das die Installation von AcrobatDistiller voraus. Das ist aber blöd, da ich doch eh nur mit dem FreePDF arbeiten möchte.
(Zur Info: unter dem AcrobatDistiller habe ich das Makro nicht ans laufen bekommen - dauernd meldete der Acrobat irgendeinen Fehler, den ich letztendlich nicht beheben konnte)
Frage: lässt sich das Makro so umschreiben, dass ich auf den Acrobat verzichten kann, oder ist das grundsätzlich nicht möglich. Meine Kenntnisse reichen nicht aus um das ab zu schätzen.
Wäre für einen Tipp dankbar
Gruss Frank


Option Explicit
Private Declare

Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hWnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Sub druck_pdf()
Dim pdfDist As PdfDistiller    'Verweis auf "Acrobat Distiller" setzen
Dim strPrt As String, strFolder As String, strFile As String
Dim strPSFile As String, strPDFFile As String
Dim RetVal As Integer
Set pdfDist = New PdfDistiller
strPrt = Range("A1").Value       'PDF-Drucker >"FreePDF XP auf Ne00:"
strFolder = Range("A2").Formula   'Zielverzeichnis: zB "C:\Eigene Dateien\"
strFile = Worksheets("Tabelle1").Range("A3").Value  'Exceldateiname  z.B Mappe1(ohne .xls)
strPSFile = strFile & ".ps"
strPDFFile = strFile & ".pdf"
ChDrive strFolder
ChDir strFolder
ActiveWindow.SelectedSheets.PrintOut ActivePrinter:=strPrt, prtofilename:=strFolder & strPSFile, printtofile:=True
pdfDist.FileToPDF strFolder & strPSFile, strFolder & strPDFFile, ""
Kill strFolder & strPSFile
End Sub

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Exceldatei zu PDF Verweis
03.10.2005 14:26:33
schauan
Hallo Frank,
kommentiere mal die 3 Zeilen mit pdfdist aus, es solte dann noch laufen. Dann Speichern, nochmal öffnen und falls noch vorhanden den Verweis zurücknehmen.
AW: Funzt - aber!
03.10.2005 14:43:33
FrankyB
Hallo,
funzt nicht wirklich.
Das Makro läuft gut durch und der Verweis ist auch nicht mehr nötig.
Allerdings wird auch kein PDF mehr erstellt und gespeichert.
Trotzdem Danke
Frank
AW: Funzt - aber!
03.10.2005 16:35:21
schauan
Hallo Frank,
dann müssen wir noch die Zeile mit dem Ausdruck anpassen. Ich denke, dass dieser Teil nicht benötigt wird:
prtofilename:=strFolder & strPSFile,
Die Zeile mit der Zuweisung zu strPSFile kann dann auch noch weg. Ich arbeite mit pdf955, das wir auch wie ein ganz normaler Drucker angesprochen. Das Ablageverzeichnis geht nur nicht so einfach ...
Anzeige
AW: geht nicht
03.10.2005 17:25:41
FrankyB
Hi,
habe es ausprobiert - aber das geht natürlich nicht.
In dieser Zeile „prtofilename:=strFolder & strPSFile“ wird der Speicher-Pfad + Name vergeben. Wenn ich den weglasse, muss ich den Dateinamen manuell eingeben, was aber am Ende auch nichts bringt, da die Datei unleserlich wird.
Gruss Frank
AW: geht nicht
03.10.2005 17:31:10
schauan
Hallo Frank,
Du sollst doch nicht die ganze Zeile weglassen ... Du sollst sie anpassen, der betreffende Part mit dem Postscript-File wird eventuell nicht benötigt. Da musst Du mal schauan wie es von Deinem FreePDF verlangt wird.
Grüße, andre
AW: geht nicht
03.10.2005 17:31:18
schauan
Hallo Frank,
Du sollst doch nicht die ganze Zeile weglassen ... Du sollst sie anpassen, der betreffende Part mit dem Postscript-File wird eventuell nicht benötigt. Da musst Du mal schauan wie es von Deinem FreePDF verlangt wird.
Grüße, andre
Anzeige
AW: geht nicht
03.10.2005 18:08:40
FrankyB
Hi Andre,
ich habe mittlerweile alles durchprobiert - es geht nicht.
Entweder Fehlermeldung oder FreePDF fragt nach dem Speicherort - oder speichert mit defekter Datei.
Vielleicht liegt es ja daran das meine Kenntnis einfach nicht ausreichend sind, aber ich sitze bereits seit 3 Tagen daran - meine Energie ist verbraucht.
ich werde mal besser erst VBA erlernen bevor ich mich an solche Makros drangebe.
Hier mein letzter Code - da will FreePDF den Speicherort wissen. Kriegt er aber nicht von mir.
Ich gehe jetzt erst mal lecker essen…
Danke und Gruss
Frank

Sub druck_pdf()
'    Dim pdfDist As PdfDistiller                     'Verweis auf "Acrobat Distiller" setzen
Dim strPrt As String, strFolder As String, strFile As String
Dim strPSFile As String, strPDFFile As String
Dim RetVal As Integer
'    Set pdfDist = New PdfDistiller
strPrt = Range("A1").Value                                                  'PDF-Drucker >    "FreePDF XP auf Ne00:"
strFolder = Range("A2").Formula                                       'Zielverzeichnis: zB "C:\Eigene Dateien\"
strFile = Worksheets("Tabelle1").Range("A3").Value     'Exceldateiname  z.B Test (ohne .xls)
'    strPSFile = strFile & ".ps"
strPDFFile = strFile & ".pdf"
ChDrive strFolder
ChDir strFolder
ActiveWindow.SelectedSheets.PrintOut ActivePrinter:=strPrt, prtofilename:=strFolder, printtofile:=True
'    pdfDist.FileToPDF strFolder & strPSFile, strFolder & strPDFFile, ""
'    Kill strFolder & strPSFile
End Sub

Anzeige
AW: geht nicht
03.10.2005 18:53:49
schauan
Hallo Frank,
das roblem liegt eventuell eher in den Parametern für FreePDF, da musst Du wie gesagt mal in's Handbuch oder die Hilfe von FreePDF schauen. Ich hab's mal überflogen, das ps-file brauchst Du doch - ich mit pdf955 nicht.
Hast Du auch mal nach freepdf vba hier recherchiert oder gegoogelt? Da findest Du z.B. das:
https://www.herber.de/forum/index.htm?https://www.herber.de/forum/messages/618346.html
Grüße, andre
AW: geht nicht
04.10.2005 00:11:24
FrankyB
Hi Andre,
ich bin mir nicht mehr sicher, ob wir uns noch richtig verstehen?
Wie gesagt, dass original Makro wurde für den Acrobat geschrieben.
Unter Acrobat habe ich das Makro aber nicht ans laufen bekommen.
Nachdem ich dann FreePDF geladen hatte, lief das selbe Makro
ohne Veränderung perfekt.
Nur nachdem ich dann den Verweis „Acrobat“ entfernt hatte, lief das Makro
in Verbindung mit FreePdf nicht mehr - logisch, war ja auch nicht dafür gedacht.
Alleine umschreiben kann ich das Makro nicht - da fehlt mir die Kenntnis
„Was mich ärgert ist, das dass Makro eigentlich perfekt ist. Es aber nur läuft mit
Verweis auf Acrobat - da muss es doch eine einfache Lösung geben oder ?“
Was mir zu alledem noch einfällt wäre, dass ich mal in der Hilfe von FreePdf
nachschaue, ob man den Speicher-Assistenten evtl. unterbinden - bzw. einen
bestimmten Speicherstandort festlegen kann. Glaube ich aber eigentlich nicht.
Des weiteren werde ich mal weiter googeln - vielleicht hat jemand ein ähnliches Problem.
Die Recherche hier im Forum hat leider nichts gebracht - die Informationen hatte ich bereits.
Nun gut, wenn ich keine Lösung finde, dann wird zukünftig einfach zu FreePDF noch der Acrobat
mit geladen - und „ich habe fertig“. Auf ein Programm mehr oder weniger kommt es
auch nicht mehr an. (Scherz)
Danke für deine Hilfe
Gruss Frank
Anzeige
AW: geht nicht
04.10.2005 08:34:45
schauan
Hallo Frank,
wir verstehen uns schon noch ;-) Ich kann meine Antworten nur leider nicht testen.
Probiers mal so:

Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hWnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Sub druck_pdf()
Dim strPrt As String, strFolder As String, strFile As String
Dim strPSFile As String, strPDFFile As String
Dim RetVal As Integer
strPrt = Range("A1").Value       'PDF-Drucker >"FreePDF XP auf Ne00:"
strFolder = Range("A2").Formula   'Zielverzeichnis: zB "C:\Eigene Dateien\"
strFile = Worksheets("Tabelle1").Range("A3").Value  'Exceldateiname  z.B Mappe1(ohne .xls)
strPSFile = strFile & ".ps"
strPDFFile = strFile & ".pdf"
ChDrive strFolder
ChDir strFolder
'Original
'ActiveWindow.SelectedSheets.PrintOut ActivePrinter:=strPrt, prtofilename:=strFolder & strPSFile, printtofile:=True
'geändert
ActiveWindow.SelectedSheets.PrintOut prtofilename:=strFolder & strPSFile, printtofile:=True
'Zusätzliche Variablen
Dim Pfad$
Pfad = "C:\Programme" 'hier den Ort von gs... und FreePDF eingeben, z.B. "C:\Programme"
'aus anderem Thread
'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'Die Datei "gs814w32.exe" ausführen
Shell (Pfad & "\FreePDF\gs814w32.exe"), 1
'Pause von 10 Sekunden einlegen Application.Wait (Now + TimeValue("0:00:10"))
'Die Datei "FreePDFXP1.6.EXE" ausführen
Shell (Pfad & "\FreePDF\FreePDFXP1.6.EXE"), 1 End Select
Kill strFolder & strPSFile End Sub

End Sub

Grüße, Andre
Anzeige
AW: geht nicht
04.10.2005 09:05:13
FrankyB
Hi Andre,
bevor ich testen kann kommen folgende Fehlermeldungen: Fehler beim Kompilieren
bei Zeile: 1 + 2
gruss Frank
1.

Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hWnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Sub druck_pdf()
Dim strPrt As String, strFolder As String, strFile As String
Dim strPSFile As String, strPDFFile As String
Dim RetVal As Integer
strPrt = Range("A1").Value       'PDF-Drucker >"FreePDF XP auf Ne00:"
strFolder = Range("A2").Formula   'Zielverzeichnis: zB "C:\Eigene Dateien\"
strFile = Worksheets("Tabelle1").Range("A3").Value  'Exceldateiname  z.B Mappe1(ohne .xls)
strPSFile = strFile & ".ps"
strPDFFile = strFile & ".pdf"
ChDrive strFolder
ChDir strFolder
'Original
'ActiveWindow.SelectedSheets.PrintOut ActivePrinter:=strPrt, prtofilename:=strFolder & strPSFile, printtofile:=True
'geändert
ActiveWindow.SelectedSheets.PrintOut prtofilename:=strFolder & strPSFile, printtofile:=True
'Zusätzliche Variablen
Dim Pfad$
Pfad = "C:\Programme" 'hier den Ort von gs... und FreePDF eingeben, z.B. "C:\Programme"
'aus anderem Thread
'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'Die Datei "gs814w32.exe" ausführen
Shell (Pfad & "\FreePDF\gs814w32.exe"), 1
'Pause von 10 Sekunden einlegen Application.Wait (Now + TimeValue("0:00:10"))
'Die Datei "FreePDFXP1.6.EXE" ausführen
2. Shell (Pfad & "\FreePDF\FreePDFXP1.6.EXE"), 1 End Select
Kill strFolder & strPSFile End Sub

End Sub

Anzeige
AW: geht nicht
04.10.2005 09:32:19
schauan
Hallo Frank,
da hat beim Zusammenkopieren was gefehlt...
Diese Variante habe ich nun mal bis zum Ausdruck getestet. Ersetze den code komplett durch das. Private Declare muss in eine Zeile mit F unction ..., das wird hier im Forum nicht ordentlich umgesetzt.
Private Declare

Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hWnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Sub druck_pdf()
Dim strPrt As String, strFolder As String, strFile As String
Dim strPSFile As String, strPDFFile As String
Dim RetVal As Integer
strPrt = Range("A1").Value       'PDF-Drucker >"FreePDF XP auf Ne00:"
strFolder = Range("A2").Formula   'Zielverzeichnis: zB "C:\Eigene Dateien\"
strFile = Worksheets("Tabelle1").Range("A3").Value  'Exceldateiname  z.B Mappe1(ohne .xls)
strPSFile = strFile & ".ps"
strPDFFile = strFile & ".pdf"
ChDrive strFolder
ChDir strFolder
'Original
'ActiveWindow.SelectedSheets.PrintOut ActivePrinter:=strPrt, prtofilename:=strFolder & strPSFile, printtofile:=True
'geändert
ActiveWindow.SelectedSheets.PrintOut prtofilename:=strFolder & strPSFile, printtofile:=True
'Zusätzliche Variablen
Dim Pfad$
Pfad = "C:\Programme" 'hier den Ort von gs... und FreePDF eingeben, z.B. "C:\Programme"
'aus anderem Thread
'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'Die Datei "gs814w32.exe" ausführen
Shell (Pfad & "\FreePDF\gs814w32.exe"), 1
'Pause von 10 Sekunden einlegen Application.Wait (Now + TimeValue("0:00:10"))
'Die Datei "FreePDFXP1.6.EXE" ausführen
Shell (Pfad & "\FreePDF\FreePDFXP1.6.EXE"), 1
Kill strFolder & strPSFile
End Sub

Grüße, Andre
Anzeige
AW: geht nicht
04.10.2005 09:39:30
schauan
Hallo Frank,
gleich noch eine Ergänzung - den Drucker müsstest Du wieder rein nehmen bzw Deine Original-Zeile aktivieren und meine auskommentieren.

'Original -- aktivieren!
'ActiveWindow.SelectedSheets.PrintOut ActivePrinter:=strPrt, prtofilename:=strFolder & strPSFile, printtofile:=True
'geändert -- auskommentieren
ActiveWindow.SelectedSheets.PrintOut prtofilename:=strFolder & strPSFile, printtofile:=True
grüße, andre
AW: geht nicht
04.10.2005 09:32:25
schauan
Hallo Frank,
da hat beim Zusammenkopieren was gefehlt...
Diese Variante habe ich nun mal bis zum Ausdruck getestet. Ersetze den code komplett durch das. Private Declare muss in eine Zeile mit F unction ..., das wird hier im Forum nicht ordentlich umgesetzt.
Private Declare

Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hWnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Sub druck_pdf()
Dim strPrt As String, strFolder As String, strFile As String
Dim strPSFile As String, strPDFFile As String
Dim RetVal As Integer
strPrt = Range("A1").Value       'PDF-Drucker >"FreePDF XP auf Ne00:"
strFolder = Range("A2").Formula   'Zielverzeichnis: zB "C:\Eigene Dateien\"
strFile = Worksheets("Tabelle1").Range("A3").Value  'Exceldateiname  z.B Mappe1(ohne .xls)
strPSFile = strFile & ".ps"
strPDFFile = strFile & ".pdf"
ChDrive strFolder
ChDir strFolder
'Original
'ActiveWindow.SelectedSheets.PrintOut ActivePrinter:=strPrt, prtofilename:=strFolder & strPSFile, printtofile:=True
'geändert
ActiveWindow.SelectedSheets.PrintOut prtofilename:=strFolder & strPSFile, printtofile:=True
'Zusätzliche Variablen
Dim Pfad$
Pfad = "C:\Programme" 'hier den Ort von gs... und FreePDF eingeben, z.B. "C:\Programme"
'aus anderem Thread
'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'Die Datei "gs814w32.exe" ausführen
Shell (Pfad & "\FreePDF\gs814w32.exe"), 1
'Pause von 10 Sekunden einlegen Application.Wait (Now + TimeValue("0:00:10"))
'Die Datei "FreePDFXP1.6.EXE" ausführen
Shell (Pfad & "\FreePDF\FreePDFXP1.6.EXE"), 1
Kill strFolder & strPSFile
End Sub

Grüße, Andre
Anzeige
AW: geht nicht
04.10.2005 10:59:46
FrankyB
Hi Andre,
wir sind ein Stück weiter, jedoch findet er die Dateien unter: Shell… nicht.
Mir liegt die Version FreePDF 3.04 vor - im Ordner: C:\Programme\FreePDF_XP\freepdf.exe
FreePDF läuft nur in Verbindung mit GS im Ordner: C:\Programme\gs\
Hier gibt es nur zwei exe-Dateien :
C:\Programme\gs\gs8.51\bin\gswin32c.exe
und
C:\Programme\gs\gs8.51\bin\gswin32.exe
Die Zusammenhänge der beiden Programme sind mir noch nicht ganz klar - habe das
Programm erst seit 3 Tagen.
Ich habe mal o.g. - freepdf.exe - eingesetzt. Das funzt - aber FreePDF wurde gestartet
und fragte nach dem Speicherort der Datei. Das wollen wir natürlich nicht.
Ich werde mal in der Hilfe von Freepdf nachschauen.
Gruss
Frank
Anzeige
AW: geht nicht
04.10.2005 17:12:43
schauan
Hallo Frank,
welche von den beiden gs... Du nehmen musst kann ich Dir leider nicht sagen. Die unterschiedlichen Pfade berücksichtigst Du hier:
Shell (Pfad & "\FreePDF\gs814w32.exe"), 1
und weiter unten beim nächsten Shell nochmal.
Da Du sowieso unterschiedliche Pfade hast ist die Variable eigentlich auch nicht nötig:
'Zusätzliche Variablen -- Zeile löschen
Dim Pfad$ -- löschen, nächste Zeile auch
Pfad = "C:\Programme" 'hier den Ort von gs... und FreePDF eingeben, z.B. "C:\Programme"
'aus anderem Thread
'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'Die Datei "gs... .exe" ausführen
Shell ("C:\Programme\gs ... "), 1
'Pause von 10 Sekunden einlegen Application.Wait (Now + TimeValue("0:00:10"))
'Die Datei "FreePDF.EXE" ausführen
Shell ("C:\Programme\FreePDF_XP\FreePDF.EXE"), 1
Grüße, Andre
AW: geht nicht
04.10.2005 17:29:40
FrankyB
Hi Andre,
ich gebe auf. Habe alles probiert - auch dein letzten Vorschlag.
Bringt nichts, da immer wieder die Programme geöffnet werden und
nach Entscheidung fragen - das wollte ich ja gerade vermeiden.
der Aufwand wird mir jetzt zu viel, ich werde bei meiner ersten Prozedur bleiben.
Dennoch wirklich vielen Dank für deine Mithilfe.
Gruss Frank
PS: aber eine verrückte Sache interessiert mich aber noch.
Bei den 100terten von Test die ich gemacht habe, wenn da ein Laufzeitfehler 1004
auftrat - immer in Bezug auf folgende Zeile:
ActiveWindow.SelectedSheets.PrintOut ActivePrinter:=strPrt, prtofilename:=strFolder & strPSFile, printtofile:=True
ging danach absolut nichts mehr.
Ich konnte machen was ich wollte - nur noch Laufzeitfehler.
Nachdem ich aber den PC neu gestartet hatte - war alles wieder in Ordnung.
Was passiert da - frage ich mich ???
AW: geht nicht
04.10.2005 17:50:28
schauan
Hallo Frank,
was oder besser warum es passiert kann ich auch nur raten. Passieren tut folgendes:
- Du legst den Printer fest
- definierst das File wohin gespeichert wird
- und legst fest, dass es in eine Datei geht
Wo die 1004 herkommt kannst Du eventuell prüfen, indem Du
- alle 3 Variablen gegen deren Inhalte austauschst
- wechselnd eine oder zwei oder auch alle 3 Bestandteile weglässt - den mit dem Drucker nur, wenn Du vorher den PDF-Drucker als Standarddrucker festgelegt hast.
Grüße, Andre

244 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige