Bericht mit Filterkriterien nach PDF

By , 5. März 2014

Bis einschließlich der Version Access 2003 gab es keine eingebaute Funktion um einen Bericht nach PDF zu speichern. Zum Glück für diejenigen, die noch mit Access 2003 oder älter arbeiten, hat Stephen Lebans dafür eine DLL erstellt, mit der ab Access 2000 bis 2003 Berichte nach PDF gespeicherte werden können.
Hier gehts zum Link: http://www.lebans.com/reporttopdf.htm

Unter Access 2007 und neuer gibt es jetzt eine Möglichkeit, direkt einen Bericht nach PDF zu speichern: Docmd.OutputTo… mit dem AusgabeFilter acFormatPDF.
Will man aber dem Bericht Filterkriterien mitgeben, um z.B. nach einem bestimmten Kunden zu filtern, dann muss man schon ein bisschen mehr coden. Ich hab dazu mal ein Beispiel gemacht:

Private Sub ReportToPDF(ByVal cReportName As String, _
                        ByVal cReportFilter As String, _
                        ByVal cPDFName As String, _
                        Optional ByVal cHeadline As String = "Umsatzbericht")
    
    DoCmd.OpenReport cReportName, acPreview, , cReportFilter, acHidden
    Reports(cReportName).Titelzeile.Caption = cHeadline
    DoCmd.OutputTo acOutputReport, cReportName, acFormatPDF, cPDFName, False
    DoCmd.Close acReport, cReportName, acSaveNo
End Sub


Zuerst wird der Bericht in der Entwurfsansicht unsichtbar geöffnet, mit den gewünschten Filterkriterien. Dann kann man Änderungen am Bericht vornehmen, z.B. das Überschriftsfeld „Titelzeile“ entsprechend dem Filterausdruck anpassen. Oder wenn man nach einer Kundennummer filtern würde, könnte man jetzt die Adresse des Kunden eintragen etc.
Dann wird das eigentlich PDF erstellt, mit dem Befehl „DoCmd.OutputTo“. Die relevanten Parameter sind ObjektTyp, ObjektName (Berichtsname), OutputFormat, OutputName, AutoStart.
Danach wird die Entwurfsansicht des Berichtes ohne zu speichern wieder geschlossen.

Die Parameter sind eigentlich selbsterklärend, wir wählen als ObjektTyp den Bericht, also acOutputReport, als ObjektName den Berichtsname, als OutputFormat acFormatPDF etc.
Wer sich die Methode OutputTo genauer ansehen möchte kann das hier:
http://msdn.microsoft.com/en-us/library/office/ff192065.aspx

Fehlt nur noch die aufrufende Funktion, die könnte z.B. wie folgt aussehen:

Sub ReportToPDF_Test()
    Dim ZielPfad As String
    ZielPfad = CurrentProject.Path & "\PDFAusgabe\Umsaetze.pdf"
    ReportToPDF "Umsaetze", "Monat='Januar'", ZielPfad, "Umsätze im Januar"
    If Dir(ZielPfad) <> "" Then
        MsgBox "Bericht wurde als PDF gespeichert"
    End If
End Sub

Auch hier sollte alles verständlich sein: Aufruf der Prozedur mit den entsprechenden Parametern, anschließendes Überprüfen ob PDF-Datei erstellt wurde. Zu Beachten ist, dass wenn man PDF-Dateien mit einem vorhandenen Namen speichert, wird die alte Datei ohne Nachfrage überschrieben. Deshalb sollte man in der Prozedur ReportToPDF vor dem Speichern mittels Dir() prüfen ob die Datei bereits vorhanden ist. Aber das, wie auch die Fehlerbehandlung, überlasse ich euch. Achtet beim Filter noch darauf, dass Textfelder in einfachen Hochkommatas zu stehen haben, wie oben im Code dargestellt.

Bis dahin
© 2014 Andreas Vogt

OfficeFolders theme by Themocracy