Home > Artikel > Ausgabe 5/2013 > Berichte per E-Mail versenden, Teil II

Berichte per E-Mail versenden, Teil II

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Im ersten Teil dieser Artikelreihe haben Sie erfahren, wie Sie ein PDF-Dokument auf Basis eines Access-Berichts erstellen – zum Beispiel zum Erzeugen einer Rechnung. Im zweiten Teil schauen wir uns nun an, wie Sie diesen Bericht per E-Mail an den Empfänger versenden. Und diese Technik sollen Sie nicht nur für einzelne Empfänger, sondern gleich für ganze Listen von Rechnungsempfängern erledigen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1305_BerichtPerEMail.mdb.

Absendemöglichkeit hinzufügen

Als Grundlage zum Versenden von E-Mails mit einer Rechnungsdatei im Anhang verwenden wir das Formular frmBestellungen der Beispieldatenbank. Dort können Sie gleich nach der Bestellung die Rechnung im PDF-Format erzeugen. Ein weiterer Mausklick soll die Rechnung bereits versenden.

Dazu fügen Sie zum Formular eine eine neue Schaltfläche namens cmdRechnungSenden hinzu (siehe Bild 1). Bevor wir diese mit Leben füllen, sorgen wir noch für eine entsprechende Aktivierung beziehungsweise Deaktivierung der Schaltfläche. Sie soll nur dann anklickbar sein, wenn der Benutzer die PDF-Rechnung bereits erzeugt hat. Das Aktivieren und Deaktivieren der Schaltflächen übernimmt die bereits im ersten Teil der Artikelserie beschriebene Prozedur SchaltflaechenAktivieren.

Hinzufügen einer Schaltfläche zum Versenden der Rechnung per E-Mail

Bild 1: Hinzufügen einer Schaltfläche zum Versenden der Rechnung per E-Mail

Dieser fügen Sie die Anweisung aus Listing 1 hinzu. Sie stellt die Eigenschaft Enabled der Schaltfläche cmd­RechnungSenden auf den Wert True ein, wenn das Feld Rechnungsdatei der Datenherkunft des Formulars bereits den Namen der erstellten Rechnung im PDF-Format enthält.

Private Sub SchaltflaechenAktivieren()

     Dim bol As Boolean

     bol = Len(Nz(Me!Rechnungsdatei, „“)) > 0

     ...

     Me!cmdRechnungSenden.Enabled = bol

     ...

End Sub

Listing 1: Aktivieren und Deaktivieren der Schaltfläche zum Versenden einer Rechnung per E-Mail

Rechnung senden per Mausklick

Den eigentlichen Rechnungsversand löst der Benutzer durch einen Klick auf die neu hinzugefügte Schaltfläche aus. Damit dies geschieht, stellen Sie die Eigenschaft Beim Klicken der Schaltfläche cmdRechnungSenden auf den Wert [Ereignisprozedur] ein, klicken auf die Schaltfläche mit den drei Punkten rechts von der Eigenschaft und ergänzen die nun im VBA-Editor erscheinende Ereignisprozedur wie in Listing 2.

Private Sub cmdRechnungSenden_Click()

     Dim objOutlook As Outlook.Application

     Dim objMail As Outlook.MailItem

     Dim strBody As String

     Set objOutlook = New Outlook.Application

     Set objMail = objOutlook.CreateItem(olMailItem)

     With objMail

         .Recipients.Add Me!sfmKundendaten.Form!EMail

         .Subject = "Rechnung zur Bestellung " & Me!BestellungID & " vom " & Me!Bestelldatum

         strBody = "Hallo!" & vbCrLf & vbCrLf

         strBody = strBody & "Hiermit erhalten Sie die Rechnung zu Ihrer Bestellung mit der Nummer " _

             & Me!BestellungID & " vom " & Me!Bestelldatum & "." & vbCrLf & vbCrLf

         strBody = strBody & "Mit freundlichen Grüßen" & vbCrLf

         strBody = strBody & "Ihr Hans Muster"

         .Body = strBody

         .Attachments.Add CStr(Me!Rechnungsdatei)

         .Importance = olImportanceHigh

         .ReadReceiptRequested = True

         .Display

         '.Send

     End With

End Sub

Listing 2: Zusammenstellen und Anzeigen der E-Mail mit der Rechnung als Anhang

Die Prozedur deklariert ein Outlook-Objekt und ein MailItem-Objekt sowie eine String-Variable, in welcher der Inhalt der E-Mail zusammengestellt wird. Damit die beiden Objekttypen zur Verfügung stehen, benötigen Sie einen entsprechenden Verweis auf die Outlook-Bibliothek – mehr dazu erfahren Sie im Artikel E-Mails mit Outlook versenden.

Danach füllt die Prozedur die Objektvariable objOutlook mit einem Verweis auf das mit New erhaltene Outlook.Application-Objekt und erzeugt mit der CreateItem-Methode dieses Objekts ein neues Objekt des Typs MailItem.

Anschließend muss die E-Mail mit den entsprechenden Daten gefüllt werden:

  • Empfänger
  • Betreff
  • Inhalt
  • Anlage

Die Empfänger-Adresse liefert das Feld EMail des Unterformulars mit den Kundendaten zur aktuell angezeigten Bestellung. Den Betreff stellen wir aus einem Text, der Bestellnummer und dem Bestelldatum zusammen, sodass dieser etwa Rechnung zur Bestellung 1234 vom 1.2.2013 lautet.

Den Inhalt der E-Mail fügen wir der Übersicht halber zeilenweise zusammen. Auch hier integrieren wir wieder die Bestellnummer und das Bestelldatum. Der Inhalt von strBody landet schließlich in der Eigenschaft Body des MailItem-Objekts.

Rechnungsbericht hinzufügen

Fehlt noch der Rechnungsbericht: Diesen fügt die Prozedur mit der Add-Methode der Attachments-Auflistung hinzu.

Den Pfad der Rechnungsdatei entnimmt sie dem Feld Rechnungsdatei der Datenherkunft des Formulars.

Zu guter Letzt stellen wir die Priorität der E-Mail mit der Rechnung auf Hoch ein und fordern vom Empfänger eine Empfangsbestätigung an – beides ist optional.

Wenn Sie eine solche Funktion neu zu einer Anwendung hinzufügen, wollen Sie die E-Mails vermutlich zunächst per Sichtkontrolle prüfen.

Daher zeigt die Prozedur die E-Mails zunächst mit der Display-Methode an, der Benutzer kann diese dann mit einem Klick auf die Senden-Schaltfläche der E-Mail absenden.

Wenn Sie sich später vom ordnungsgemäßen Zusammenstellen der E-Mails überzeugt haben, ersetzen Sie die Display-Methode durch die Send-Methode – die E-Mails werden dann direkt verschickt.

Das Ergebnis sieht schließlich wie in Bild 2 aus: Eine sendebereite E-Mail mit allen benötigten Daten.

Anzeige einer E-Mail mit Rechnung vor dem Versand

Bild 2: Anzeige einer E-Mail mit Rechnung vor dem Versand

Hier noch der Hinweis, dass zu einer gewerblich versendeten E-Mail noch eine entsprechende Signatur gehört.

Rechnungsversand notieren

Wenn Sie die Rechnung versenden, sollten Sie noch das Versanddatum notieren. Dazu fügen Sie der Tabelle tblBestellungen ein Feld namens Rechnungsversand, welches das Versanddatum der Rechnung speichert (siehe Bild 3).

Entwurfsansicht der Tabelle tblBestellungen

Bild 3: Entwurfsansicht der Tabelle tblBestellungen

Mehrere Rechnungen auf einmal senden

Mit steigender Anzahl der zu versendenden Rechnungen möchten Sie diese Aufgabe vielleicht automatisieren und gleich mehrere Rechnungs-E-Mails auf einen Schlag versenden. Kein Problem: Wir erstellen ein neues Formular, das alle Bestellungen anzeigt, deren Rechnung noch nicht versendet wurde.

Wir beginnen mit dem Unterformular sfmRechnungsversand, dass eine Abfrage mit allen Felder der Tabelle tblBestellungen enthält und diese mit der Standardansicht Datenblatt anzeigen soll (siehe Bild 4).

Entwurf des Unterformulars sfmRechnungsversand, das alle Bestellungen ohne versendete Rechnung anzeigen soll

Bild 4: Entwurf des Unterformulars sfmRechnungsversand, das alle Bestellungen ohne versendete Rechnung anzeigen soll

Die Datenherkunft soll allerdings nicht alle Datensätze anzeigen, sondern nur solche, deren Feld Rechnungsversand noch leer ist – das heißt, dass die Rechnung noch nicht versendet wurde.

Die Entwurfsansicht der dazu verwendeten Abfrage namens qrysfmRechnungsversand finden Sie in Bild 5.

Datenherkunft des Unterformulars sfmRechnungsversand

Bild 5: Datenherkunft des Unterformulars sfmRechnungsversand

Das Hauptformular heißt frmRechnungsversand und hat keine eigene Datenherkunft. Dafür nimmt es das Unterformular sfmRechnungsversand im unteren Bereich auf.

Darüber soll das Formular zwei Schaltflächen enthalten: Eines zum Erstellen und Versenden der Rechnungen zu allen noch offenen Bestellungen und eines zum Erstellen und Versenden einer einzigen Rechnung – nämlich der zum aktuell im Unterformular markierten Datensatz.

Moment: Erstellen und Versenden? Ja, diese beiden Vorgänge sollen für Rechnungen, die weder erstellt noch versendet wurden, zusammengefasst werden.

Bei Bestellungen mit bereits vorhandenen Rechnungen soll ein Klick auf eine der Schaltflächen lediglich den Versand des Rechnungsformulars erledigen.

Beide Schaltflächen führen prinzipiell die gleichen Schritte durch – gegebenenfalls das Anlegen des Rechnungsdokuments im PDF-Format und das anschließende Versenden. Der Unterschied, dass die eine Schaltfläche dies für eine einzige Bestellung durchführt und die andere für alle aktuell angezeigten Bestellungen.

Daher werden wir die eigentliche Funktion in eine Prozedur auslagern, die dann von den durch die beiden Schaltflächen ausgelösten Ereignisprozeduren ausgelöst wird.

Da das Formular keine Datenherkunft besitzt, blenden Sie die sonst zum Blättern in den Datensätzen sinnvollen Elemente durch Einstellen der Eigenschaften Navigationsschaltflächen, Datensatzmarkierer, Trennlinien und Bildlaufleisten auf den Wert Nein aus.

Das Formular mit den beiden Schaltflächen cmdMarkierteRechnung und cmdAlleRechnungen sieht nun wie in Bild 6 aus.

Das Formular frmRechnungsversand mit den beiden Schaltflächen zum Versenden einer oder aller noch nicht versendeten Rechnungen

Bild 6: Das Formular frmRechnungsversand mit den beiden Schaltflächen zum Versenden einer oder aller noch nicht versendeten Rechnungen

Eine E-Mail versenden

Die Prozedur zum Versenden einer einzigen Rechnungs-E-Mail aus Listing 3 ermittelt zunächst den Wert des Feldes BestellungID für den aktuell ausgewählten Datensatz.

Private Sub cmdMarkierteRechnung_Click()

     Dim lngBestellungID As Long

     lngBestellungID = Nz(Me!sfmRechnungsversand.Form!BestellungID)

     If lngBestellungID > 0 Then

         RechnungenVerarbeiten lngBestellungID

     End If

End Sub

Listing 3: Aufruf der Prozedur RechnungErstellenUndVersenden für genau eine Bestellung

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!