Eine gestellte Rechnung soll den Kunden erreichen. Außerdem wollen wir sie als Datei ablegen, die sich nicht versehentlich ändern lässt. Beides leistet eine PDF-Datei. Wie wir den Bericht aus dem letzten Artikel per VBA-Prozedur als PDF-Datei mit der Rechnungsnummer im Dateinamen speichern und eine E-Mail mit dieser Datei als Anhang vorbereiten, liest Du in diesem Artikel.
Beispieldatenbank
Die Beispiele dieses Artikels findest Du in der Datenbank Rechnungsverwaltung_RechnungAlsPDF.accdb.
Sie baut auf der Datenbank aus dem Artikel Rechnungsverwaltung: Die Rechnung als Bericht (www.access-basics.de/733) auf.
Das PDF-Format für Rechnungen
Eine PDF-Datei zeigt die Rechnung auf den meisten Rechnern in derselben Form an. Der Empfänger kann sie in einem PDF-Betrachter nicht ohne Weiteres ändern. Wir erzeugen die Datei nur für gestellte Rechnungen. Ein Entwurf hat keine Rechnungsnummer, und die Nummer verwenden wir im Dateinamen, zum Beispiel Rechnung_2026-0001.pdf.
Für elektronische Rechnungen im geschäftlichen Verkehr gelten besondere Anforderungen. Eine einfache PDF-Datei genügt ihnen nicht in jedem Fall. Kläre mit Deinem Steuerberater, welche Form Deine Kunden benötigen.
Den Bericht als PDF-Datei speichern
Die Ausgabe eines Berichts als PDF-Datei beschreibt der Artikel Berichte [basics]: Bericht als PDF speichern (www.access-basics.de/696). Wir verwenden dieselbe Methode, nämlich DoCmd.OutputTo. Dazu fassen wir den Aufruf in einer Funktion zusammen, die für eine Rechnung den Pfad der PDF-Datei liefert. Trage sie aus Listing 1 in das Modul mdlRechnungen ein.
Public Function RechnungAlsPDF(ByVal lngRechnungID As Long) As String Dim varNummer As Variant Dim strOrdner As String Dim strDatei As String On Error GoTo Fehler varNummer = DLookup("Rechnungsnummer", "tblRechnungen", "RechnungID = " & lngRechnungID) If IsNull(varNummer) Then Exit Function strOrdner = CurrentProject.Path & "\Rechnungen" If Len(Dir(strOrdner, vbDirectory)) = 0 Then MkDir strOrdner strDatei = strOrdner & "\Rechnung_" & varNummer & ".pdf" DoCmd.OpenReport "rptRechnung", acViewPreview, , "RechnungID = " & lngRechnungID, acHidden DoCmd.OutputTo acOutputReport, "rptRechnung", acFormatPDF, strDatei, False DoCmd.Close acReport, "rptRechnung" RechnungAlsPDF = strDatei Ende: Exit Function Fehler: If CurrentProject.AllReports("rptRechnung").IsLoaded Then DoCmd.Close acReport, "rptRechnung" End If MsgBox "Die Rechnung konnte nicht als PDF gespeichert werden:" & vbCrLf & Err.Description, vbExclamation Resume Ende End Function
Listing 1: Die Funktion RechnungAlsPDF speichert eine Rechnung als PDF-Datei
Die Funktion liest zuerst die Rechnungsnummer. Hat die Rechnung keine Nummer, ist sie ein Entwurf. Die Funktion endet dann mit Exit Function und liefert einen leeren Text.
Die Dateien speichern wir im Ordner Rechnungen neben der Datenbank. CurrentProject.Path liefert den Ordner der Datenbank. Dir mit dem Argument vbDirectory prüft, ob der Unterordner existiert. Falls nicht, legt MkDir ihn an. Der Dateiname setzt sich aus Rechnung_, der Rechnungsnummer und der Endung .pdf zusammen.
Anschließend öffnet DoCmd.OpenReport den Bericht rptRechnung mit dem Filter auf die RechnungID und dem Argument acHidden. Der Bericht bleibt dabei unsichtbar. DoCmd.OutputTo gibt den geöffneten Bericht, einschließlich des Filters, im Format acFormatPDF in die Datei aus. Das letzte Argument False verhindert, dass Access die Datei anschließend öffnet. Danach schließen wir den Bericht und liefern den Pfad der Datei zurück.
Unser exklusives Angebot für Dich!
(Das Abo ist jederzeit monatlich kündbar)
Hier geht’s weiter →Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →![Access [basics]](https://access-basics.de/wp-content/uploads/2021/02/logo400.png)