Tipp Nr. 2016-05-24-01
Aus MS-Access-Formularen per Button einen Bericht direkt als PDF per Email versenden
Erstellen Sie in Ihrem Formular einen Button / Knopf und bearbeiten Sie dann über Eigenschaften die Ereignisse zu diesem Button. Wählen Sie das Ereignis “Beim Klicken” (= “Click”). Damit wird das Ereignis aufgerufen, das wir unten als Code vorstellen.
Der Code ist individuell auslegt auf eine bestehende Daten-Struktur, dennoch kann man ablesen, welche Schritte und Befehle nötig sind.
Wir haben im Vorfeld einen Bericht erstellt, der alle Aufträge drucken kann (B_alle_Aufträge_drucken), wie z.B. Rechnung, Angebot, Auftragsbestätigung.
Die Kundenstammdaten und die nötige Email-Adresse sind in der Tabelle “T_Kunden” abgelegt.
Die Auftragsdaten in der Tabelle “T_Aufträge”. Das Formular zur Auftragsverwaltung “F_Aufträge” basiert auf einer Abfrage (A_KundenAufträge), die diese beiden Tabellen beinhaltet und über die eindeutige Kunden_ID verknüpft ist. Die Abfrage ist wichtig, damit man Zugriff hat auf die Datenfelder beider Tabellen.
Private Sub Email_Click() On Error GoTo Err_EMailVersandAbgebrochen 'Routine zum Abfangen von Fehlern und Abbruch 'des Benutzers 'Vorbereitung/Deklaration der Variablen Dim Berichtsname As String 'Name des Berichtes aus dem die PDF-Datei erstellt werden soll Dim ZielEmail As String 'Email-Adresse des Empfängers Dim TextEmail As String 'Text für bspw. die Anrede Dim BetreffText As String 'Text für die Betreffzeile der Email TextEmail = "Sehr geehrte" Berichtsname = "B_alle_Aufträge_drucken" BetreffText = [A_Art] & " Nr. " & [A_Nr] 'Hier wird die Auftragsart (A_Art) und die Auftragsnr (A_Nr) AnhangName = "Balticmedia " & BetreffText 'zugewiesen 'Wenn die Email-Adress aus dem Kunden-Stamm (T_Kunden) einen Inhalt hat, also nicht den 'NULL-Wert hat bzw. Leer ist. Die Befehle Trim und NZ vermeiden Fehlermeldungen, falls das Feld Email 'im Kundenstamm nicht gefüllt sein sollte. Achtung DLOOKUP funktioniert nur mit Textelementen (Strings), daher sind alle Parameter mit Anführungszeichen versehen. If Trim(Nz(DLookup("[Ku_Email]", "T_Kunden", "[Kunden_ID]" & " = " & "[A_Kunden_ID]"), "")) <> "" Then 'dann hole Dir die Email-Adresse (Ku_Email) aus der Tabelle T_Kunden, und zwar nur die, 'bei der die Kunden_ID aus T_Kunden identisch ist mit der Kunden_ID aus dem 'Auftrag (A_Kunden_ID): ZielEmail = DLookup("[Ku_Email]", "T_Kunden", "[Kunden_ID]" & " = " & "[A_Kunden_ID]") Else ZielEmail = "" End If 'Bericht mit aktuellem Datensatz auswählen DoCmd.OpenReport Berichtsname, acViewPreview, , "[Auftrag_ID]" & " = " & Me!Auftrag_ID, acHidden Reports(Berichtsname).Caption = AnhangName 'wechselt zum Berichtsnamen 'Ausgewählten Preview-Bericht als PDF erzeugen und per Email senden 'SendObject(ObjectType, ObjectName, OutputFormat, To, Cc, Bcc, Subject, MessageText, EditMessage, 'TemplateFile) DoCmd.SendObject acReport, Berichtsname, "PDF", ZielEmail, , , BetreffText, TextEmail, True, "" 'Bei sauberem Verlauf (Email wird gesendet, kein Abbruch), verlasse die Subroutine vorzeitig Exit Sub 'Bei Abbruch durch den Benutzer Fehler 2501 Meldung ausgeben oder Fehler-Nummer Err_EMailVersandAbgebrochen: If Err.Number = 2501 Then MsgBox "Die E-Mail wurde nicht gesendet." Else MsgBox "Fehler " & Err.Number & ":" & Err.Description End If DoCmd.Close acReport, Berichtsname
Alle Informationen und Angaben sind ohne Gewähr und Haftung! Sie dienen rein zu Schulungszwecken und sind nicht 1:1 auf andere Projekte in MS-Access übertragbar. Wir schliessen jede Haftung aus, sofern Sie den Code ohne Fachwissen oder unverändert übernehmen und zum Einsatz bringen.