Last Update: 2023 - 05 - 24 ![]() |
Wie man einen dynamisch gefilterten Access Bericht als PDF exportieren kannvon Philipp Stiefel, ursprünglich veröffentlicht 8. November 2017 ![]() In Microsoft Access 2010 und neueren Versionen (in Access 2007 mit einen zusätzlichen Add-In) wurde die sehr nützliche Format-Option acFormatPDF der DoCmd.OutputTo-Methode ergänzt. Diese Option ermöglicht es dir einfach einen Access Report mit VBA Code, ohne Zusatzkomponenten, als PDF zu exportieren. Ich sehe jedoch immer wieder, dass Leute mit einem Aspekt dieser sehr bequemen Methode zu kämpfen haben. Es ist nicht so intuitiv offensichtlich, wie man einen dynamisch gefilterten Bericht mit dieser Methode exportieren kann. Anders als die DoCmd.OpenReport-Methode unterstützt es die DoCmd.OutputTo-Methode nicht, Filterkriterien zu übergeben. Also scheint es problematisch zu sein, einen Bericht zu exportieren, der abhängig von Benutzereingaben oder anderen Faktoren, verschiedene Daten darstellt. Üblicherweise kommt einem einer der folgenden, naheliegenden Workarounds in den Sinn.
All diese Workarounds funktionieren. Allerdings ist mit jedem der obigen Ansätze mindestens ein Nachteil verbunden. (Übereinstimmend mit der obigen Reihenfolge):
Zwar funktionieren all die obigen Workarounds, aber ich möchte keinen davon für unseren Zweck empfehlen. Glücklicherweise gibt es eine sehr einfache Lösung für das Problem, die nur nicht so offensichtlich ist. Wenn der Bericht, den du exportierst geschlossen ist, wenn du DoCmd.OutputTo aufrufst, dann wird die OutputTo-Methode den Bericht öffnen und ihn exportieren. – Ganz einfach. Das ist die Ursache für das ganze Problem. Wenn allerdings der Bericht, den du exportierst, bereits in der Vorschau-Ansicht geöffnet ist, wenn du DoCmd.OutputTo aufrufst, dann wird die OutputTo-Methode den Bericht einfach so exportieren wie er ist. Wenn man dies berücksichtig, ist es sehr einfach das Problem mit dem Export der dynamisch gefilterten Berichte zu lösen. Du öffnest den Bericht mit DoCmd.OpenReport in der Vorschau-Ansicht (View=acViewPreview) und übergibst deine dynamischen Filterkriterien an das WhereCondition-Argument der Methode. Um zu verhindern, dass der Bericht auf dem Bildschirm auftaucht, verwendest du den WindowMode acHidden, um den Bericht für den Benutzer unsichtbar zu öffnen. Danach rufst du einfach DoCmd.OutputTo für das Format acFormatPDF und mit allen übrigen Argumenten wie zuvor auf. Es gibt nur eine Sache, die du nicht vergessen darfst. Nachdem der Bericht in der Vorschau-Ansicht geöffnet wurde, bleibt er geöffnet, wenn auch unsichtbar, bis er explizit wieder geschlossen wird. Wenn du den Bericht erneut mit DoCmd.OpenReport „öffnest“ während er noch geöffnet ist, werden die zuvor verwendeten Filter nicht geändert und die Daten nicht aktualisiert. In diesem Fall wird der Bericht dann die alten, möglicherweise falschen Daten anzeigen. – Einfache Lösung: Schließe den versteckten Bericht immer, nachdem das PDF exportiert wurde. Wenn wir all dies berücksichtigen, dann könnte unsere Prozedur zum Exportieren des gefilterten Berichts etwa so aussehen:
Public Sub ExportFilteredReportToPDF()
Dim reportName As String
Dim fileName As String
Dim criteria As String
reportName = "rptYourReportName"
fileName = "C:\tmp\report_export_file.pdf"
criteria = "SomeTextField = 'ABC' AND SomeNumberField = 123"
DoCmd.OpenReport reportName, acViewPreview, , criteria, acHidden
DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, fileName
DoCmd.Close acReport, reportName, acSaveNo
End Sub
In einer echten Implementierung, basierend auf diesem Beispiel, kannst du alle drei Variablen als Argument der der Prozedur definieren und somit eine einfache und flexible ExportToPDF-Rountine für deine Access Anwendung erstellen. Da wären wir also. Eine elegante, aber dennoch sehr einfach umzusetzende, Lösung die nur zwei zusätzliche Zeilen Code erfordert. Add-On-Video: Gefilterten Access Bericht als PDF exportierenHier noch eine Ergänzung zu dem Artikel. Ich habe eine Demonstration dieses Lösungsweges auf Video aufgezeichnet und auf YouTube veröffentlicht.
Ich werde Deine Email-Addresse niemals weitergeben. Du kannst den Newsletter jederzeit abbestellen. © 1999 - 2023 by Philipp Stiefel - Datenschutzerklärung |