Guten Morgen liebe Access-Freunde :)
ich habe ein kleines Problem zur VBA-Programmierung bei dem ich nicht weiter komme:
(erstmal vorweg: ich bin absoluter VBA-Neuling, also bitte verzeiht es mir wenn ich "dumme" Fragen stelle)
Hier mein Problem: ich möchte ein Pdf eines bestimmten Berichts automatisiert erstellen. Dabei möchte ich allerdings nicht auf den integierten Pdf-Creator von Access zurückgreifen, da dieser fehlerhafte Zeichen wiedergibt sondern auf den von Adobe.
Ich habe dazu einen Button erstellt, der den Bericht über den Adobe Pdf Creator "drucken" soll, das klappt schon mal ganz gut (man muss nur Dateiname und Speicherpfad manuell angeben)
Allerdings soll dieses PDF nun auch automatisch auf einem bestimmten Pfad abgespeichert werden und einen vorher festgelegten Dateinamen erhalten.
Ich habe bisher leider keinen Weg gefunden, wie man dies bewerkstelligen kann :(
Edit: Evtl wäre es ja auch möglich das ganze ohne den "Drucken" Umweg zu lösen? also durch direkte Einbindung des Adobe PDF Creators??
Das hier ist mein bisheriger Code:
Private Sub Befehl7_Click()
DoCmd.OpenReport "Anforderung Stichproben", acViewPreview, , , acHidden
Set Screen.ActiveReport.Printer = Printers("Adobe PDF")
Screen.ActiveReport.Printer.Orientation = 2
DoCmd.PrintOut
End Sub
Vielen Lieben Dank für Eure Hilfe :)
Hallo,
die Frage geht eher an Adobe (-PDF-Drucker) als an Access.. Wenn der PDF-Drucker von Adobe keine (VBA-) Einstellmöglichkeit für die Dateinamen in seinen Eigenschaften hat, sehe ich da etwas schwarz. Möglicherweise hat das Printer-Objekt für den Adobe-PDF-Drucker passende Einstellmöglichkeiten.
Wo würde man diese Einstellmöglichkeit denn finden? ist das sowas wie printtofile ?? (wie gesagt, bin Anfänger :( )
Habe eine Möglichkeit mit Sendkey (Enter) gefunden, aber das würde ich eigl gerne vermeiden.
Vielen Dank für deine Hilfe :)
Moin,
schau dir mal OutputTo an, das könnte bei dir passen, evtl so
DoCmd.OutputTo acOutputReport, "deinBericht", acFormatRTF, "Ausgabename.pdf", True
Hallo el_gomero,
leider bekomme ich damit die Fehler Meldung, dass Adobe PDF die Datei nicht öffnen konnte, da es kein unterstützter Dateityp ist, oder es beschädigt ist.
hatte einen Fehler bei der Übernahme aus der OH - richtig sollte sein
DoCmd.OutputTo acOutputReport, "deinBericht", acFormatPDF, "Ausgabename.pdf", True
selbst mitdenken ist aber ausdrücklich erlaubt ... ;)
Hallo,
outputto kommt doch nicht in Frage... das produziert doch die fehlerhaften Zeichen....
Es muss das Printer-Objekt auf den Adobe-Printer (aus der Printers-Auflistung) gesetzt und von diesem Printer-Objekt die Eigenschaften ermittelt werden (siehe VBA-Hilfe) .
Zitat
outputto kommt doch nicht in Frage... das produziert doch die fehlerhaften Zeichen....
danke, Franz ... doch besser, wenn man den ganzen Text liest :)
Hi Jürgen,
hatte ja im Vorfeld schon auf freeaccess das Crossposting-Vergnügen... ;)
das Thema kam mir gleich bekannt vor - auf MS-Office-Forum ist er auch damit unterwegs. Ein Fall für die Blacklist >:(
Hey Leute, wie bereits gesagt der Crosspost tut mir echt leid.
Ich hoffe ihr seit mir deswegen nicht böse. Ich wusste nicht, dass sowas nicht erwünscht ist.
Ich werde ab sofort nur noch auf diesem Forum posten.
Ich bin euch wirklich dankbar für eure Hilfe. Bin in diesem Gebiet (ebenso wie das Verhalten in Foren) ein absoluter Neuling.
Wollte wirklich niemanden auf den Schlips treten :(
Hallo,
alles halb so schlimm, sonst gäbe es hier keine Antwort(en).
Ich denke mal, die Verwendung einer funktionierenden alternativen Schriftart (Font) wäre für Dich der einfachste Weg. Warum ist man denn so erpicht auf diesen unumstößlichen Font?
Ok, dann bin ich ja beruhigt :) Und nochmals vielen Dank für die Geduld mit mir ;)
Es ist halt die Standart-Schriftart des Unternehmens. Und es ist auch noch nicht einmal eine außergewöhnliche Schriftart. Ändern ist leider nicht möglich, da der Bericht als offizielles Dokument verwendet werden soll.
Ich hatte wirklich gehofft das Problem durch Einlesen in VBA und programmieren eines Buttons der über den der Bericht per PDF-Drucker automatisch "gedruckt" wird zu lösen.
Ich hatte einen anderen Post gefunden, der ein ähnliches Problem per Sendkey{ENTER} löst. Drauf wollte ich aber eigl nur zur Not zurückgreifen. Denke das ist keine wirklich saubere Lösung oder?
Ich lese nachher nochmal nach wie man die Eigenschaften von Adobe PDF ausliest, wie du es meintest, evtl. gibt es ja da eine Möglichkeit.
Einfach unter PDF Ausgabeordner einen fixen Ordner hinterlegen, statt der Eingabeaufforderung für den Namen. Sobald das Dokument gedruckt ist, dieses dorthin verschieben, wo es erwünscht ist. Allerdings muss bei der Programmfortsetzung eine Pause vorgesehen werden, das das Dokument nicht sofort greifbar ist. Eventuell eine Schleife, da die Verzögerung nicht sicher vorhersehbar ist.
Vielen Dank für deine Antwort,
aber könntest du das evtl nochmal genauer erläutern, verstehe nicht ganz, wie du das meinst
VG
Luk
welcher Teil ist unklar? Einstellungen des Druckertreibers oder der code?
Entschuldigung, da hätte ich mich glaube genauer ausdrücken sollen.
Es geht eher um den Code, ich denke die Drucker-Treiber müsste ich noch ändern können. Allerdings bin ich mir nicht sicher ob ich dazu die Berechtigungen habe (kann gerade nicht nachschauen, da ich im Urlaub bin)
Ich habe allerdings noch einen Code gefunden, der mein Problem behandelt, allerdings für Excel ist:
(Ich hoffe es ist Ok ihn zu posten)
Sub PDFDrucken_V1()
'Die Distiller-Bibliothek im VBA-Editor Menü [Extras - Verweise -
Acrobat Distiller]
'laden, damit die Ditiller-API verfügbar wird
Dim Drucker As New ACRODISTXLib.PdfDistiller
Dim PS_Pfad As String
Dim PDF_Pfad As String
PS_Pfad = "C:\test123\Datei.ps"
PDF_Pfad = "C:\test123\Datei.pdf"
'PostScript generieren:
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Preview:=False, _
ActivePrinter:="Adobe PDF auf Ne05:", PrintToFile:=True,
PrToFileName:=PS_Pfad, Collate:=True
'PDF generieren:
Drucker.FileToPDF PS_Pfad, PDF_Pfad, ""
End Sub
Würde sowas funktionieren? ich habe ihn leider noch nicht zum laufen bekommen :(
Meine Angaben, waren unter Benutzung des normalen Acrobat Druckertreibers. Vermutlich geht es aber auch mit dem Distiller.
Private Sub Befehl11_Click()
Dim Drucker As New ACRODISTXLib.PdfDistiller
Dim PS_Pfad As String
Dim PDF_Pfad As String
PS_Pfad = "C:\test\Datei.ps"
PDF_Pfad = "C:\test\Datei.pdf"
Set Screen.ActiveReport.Printer = Printers("Adobe PDF")
Screen.ActiveReport.Printer.Orientation = 2
PrToFileName = PS_Pfad
Drucker.FileToPDF PS_Pfad, PDF_Pfad, ""
End Sub
Das ist mein momentaner Code, er läuft auch ohne Fehlermeldung. Allerdings wird keine Datei erstellt, habe ich irgendwas vergessen?
VG
Hallo,
hast du den Code mal kompiliert vor dem Testen?
Und hast du "Option Explicit" im Kopf aller deiner Module stehen?
Was mir noch unklar ist, ist die Sache mit der ps-Datei, wo soll die herkommen?
Habe jetzt Option Explicit eingefügt: und nun kommt ein Fehler und zwar sagt er:
Fehler beim Kompilieren: Variable nicht definiert
und bezieht sich dabei auf PrToFileName
Ich dachte eigl durch PrToFileName wird die PS erstellt?? oder sehe ich da etwas falsch
PrToFileName war ein Parameter der PrintOut-Methode aus dem Excel-Beispiel.
Die PrintOut-Methode aus Access bietet das nicht, außerdem setzt du sie ja gar nicht ein.
das hatte ich auch schon befürchtet :(
was kann ich denn da machen? gibt es so etwas nicht auch bei Access?
VG und Vielen Dank
Hey Leute ich bins mal wieder :D
ich habe es nun hinbekommen, dass die PDF automatisch in einem bestimmten Ordner gespeichert wird, indem ich die Drucker-Treiber Einstellungen umgestellt habe.
Nun würde ich gerne noch eine automatische Namensvergabe für die PDF haben. (zusammengesetzt aus Datum und bestimmten ausgewählten Ansprechpartner).
Gibt es da eine Möglichkeit das über VBA zu realisieren?
und 2.) kann man die Einstellung, dass die PDF automatisch in den bestimmten Ordner abgespeichert wird auch per VBA automatisieren? So dass sie nur in dem Moment der PDF-Erstellung und nicht die ganze Zeit gilt?
Vielen Dank euch schon mal und einen Guten Start in die Woche
Hi,
kannst du noch einen Tipp geben, wie man die Druckertreibereinstellungen anpassen muss, um das Ziel zu erreichen? Und hat das dann auch Auswirkungen auf andere Anwendungen?
Was den Dateinamen betrifft, so wird der wenn ich nicht irre aus der Beschriftung des Berichts gebildet, darauf könntest du ja nach dem Öffnen noch Einfluss nehmen.
Wie sieht denn der aktuelle VBA-Code dazu aus?
Also ich habe einfach bei den Druckereinstellungen von Adobe PDF einen festen Output-Ordner festgelegt.
Das ist auch keine langfristige Lösung, da man ja auch evtl mal etwas anderes zu PDF umwandeln möchte.
Aber evtl kann man das ja auch nur für den Zeitpunkt der PDF-Erstellung per VBA so einstellen??
Das ist mein momentaner Code: ist nicht wirklich lang :D
DoCmd.SelectObject acReport, Screen.ActiveReport.Name
Set Screen.ActiveReport.Printer = Printers("Adobe PDF")
Screen.ActiveReport.Printer.Orientation = 2
DoCmd.PrintOut
End Sub
Genau er greift dann auf den Namen des Berichts zu, evtl könnte man den ja den Wünschen entsprechend ändern.
VG und Vielen Dank
Wie man den PDF-Drucker per VBA manipulieren könnte weiß ich nicht, aber die Einstellung lässt sich auch in der Registry finden und notfalls dort ändern, Stichwort: AdobePDFOutputFolder.
ZitatGenau er greift dann auf den Namen des Berichts zu
Nein, es ist die Caption-Eigenschaft des Berichts, den Namen kannst du ja schlecht ändern.
Luk90:
Drucker per VBA in Access mit Übergabe des ReportNamens
sub Drucken(sReport$)
docmd.Openreport sReport
End Sub
Verschieben des fertigen Reports mit Übergabe des alten und des neues Pfades
sub verschieben(sAlterPfad$, sNeuerPfad$)
Name sAlterPfad as sNeuerPfad
End sub