MS-Access-Tipp Bericht als PDF per Emailversenden

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.

MS-Access-Rechnung-Formular-per-Email_versenden_Button

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.

MS-Access-Abfrage_für_Formular_Auftragsverwaltung

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.