VBA Tipp: Bericht als PDF per Mail über Outlook versenden

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte einen Bericht als pdf-Datei erzeugen (ab Access 2007), und per Mail als Anhang über Outlook versenden.

Lösung

Das geht mit der folgenden Prozedur, die in einem globalen Modul gespeichert wird.

Public Sub PDFBerichtPerMail(ByVal Berichtsname As String, _
                             ByVal WhereCondition As String, _
                             ByVal Dateipfad As String, _
                             ByVal Empfänger As String, _
                             ByVal Betreff As String, _
                             ByVal Nachricht As String, _
                             Optional HTML As Boolean = False, _
                             Optional SofortSenden As Boolean = False)
 
 'Bericht per Mail als pdf-Datei-Anhang über Outlook versenden
 'Late-Binding-Variante, kein Verweis auf Microsoft Outlook xx.x Object Library notwendig
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 Dim objApp As Object   'Outlook Application
 Dim objItem As Object  'Nachrichten Objekt
 Const olMailItem = 0
 Const olFormatPlain = 1
 Const olFormatHTML = 2
 
 
 'Schritt 1: Bericht als pdf-Datei erzeugen
 
 'Bericht gefiltert öffnen
 DoCmd.OpenReport Berichtsname, acViewPreview, , WhereCondition, acHidden
 
 'pdf-Datei erzeugen
 DoCmd.OutputTo acOutputReport, Berichtsname, acFormatPDF, Dateipfad
 
 'Bericht schließen
 DoCmd.Close acReport, Berichtsname, acSaveNo
 
 
 'Schritt 2: pdf-Datei per Outlook-Anhang versenden
 'Hinweis: Wenn ein Parameterwert direkt aus einem Formularfeld ausgelesen werden soll,
 'muß die Eigenschaft .Value explizit gesetzt werden, z.B. objItem.To = Me!MeinTextfeld.Value
 
 'Erzeugen einer Outlook-Instanz
 Set objApp = CreateObject("Outlook.Application")
 
 'Erzeugen einer Mail-Nachricht
 Set objItem = objApp.CreateItem(olMailItem)
 
 'Empfänger
 objItem.To = Empfänger
 
 'Betreff
 objItem.Subject = Betreff
 
 'Nachricht im HTML-Format
 If HTML = True Then
   objItem.BodyFormat = olFormatHTML
   objItem.HTMLBody = Nachricht
 
 'Nachricht im Plaintext-Format
 Else
   objItem.BodyFormat = olFormatPlain
   objItem.Body = Nachricht
 End If
 
 'Anhang anfügen
 objItem.Attachments.Add Dateipfad
 
 'Mail sofort versenden, ohne Outlook zu öffnen
 If SofortSenden = True Then
   objItem.Send
 'Mail in Outlook anzeigen, manuell versenden
 Else
   objItem.Display
 End If
 
 Set objItem = Nothing
 Set objApp = Nothing
 
End Sub

Aufruf

 Dim strBerichtsname As String
 Dim strWhereCondition As String
 Dim strDateipfad As String
 Dim strEmpfänger As String
 Dim strBetreff As String
 Dim strNachricht As String
 Dim strHTMLNachricht As String
 
 'Parameter-Beispiele:
 
 'Berichtsname
 strBerichtsname = "rptRechnungen"
 
 'Filterbedingungen für den Bericht
 strWhereCondition = "RechnungsNr = 10275"
 
 'Pfad und Name der pdf-Datei
 'Achtung: Wenn eine pdf-Datei mit gleichem Namen bereits existiert,
 'wird sie ohne Warnhinweis überschrieben!
 strDateipfad = CurrentProject.Path & "\" & "Rechnung.pdf"
 
 'Mailadresse des Empfängers
 strEmpfänger = "hans.mustermann@t-online.de"
 
 'Mail-Betreff
 strBetreff = "Ihre Rechnung"
 
 'entweder Beispiel für normale Textnachricht
 strNachricht = "Sehr geehrter Kunde, " & vbCrLf & vbCrLf _
                & "anbei finden Sie die Rechnung zur Ihrer Bestellung." & vbCrLf & vbCrLf _
                & "Viele Grüße"
 
 'oder alternativ Beispiel für HTML-Textnachricht (ggf. mit einem HTML-Editor erzeugen)
 strHTMLNachricht = "Sehr geehrter Kunde, <br /><br />" _
                    & "anbei finden Sie die Rechnung zur Ihrer Bestellung.<br /><br />" _
                    & "Viele Grüße"
 
 
 
 'Versand-Beispiele:
 
 'Beispiel 1: Mail öffnen, normaler Text
 Call PDFBerichtPerMail(strBerichtsname, strWhereCondition, strDateipfad, _
                        strEmpfänger, strBetreff, strNachricht)
 
 'Beispiel 2: Mail sofort versenden, normaler Text
 Call PDFBerichtPerMail(strBerichtsname, strWhereCondition, strDateipfad, _
                        strEmpfänger, strBetreff, strNachricht, , True)
 
 'Beispiel 3: Mail öffnen, HTML-Text
 Call PDFBerichtPerMail(strBerichtsname, strWhereCondition, strDateipfad, _
                        strEmpfänger, strBetreff, strHTMLNachricht, True)
 
 'Beispiel 4: Mail sofort versenden, HTML-Text
 Call PDFBerichtPerMail(strBerichtsname, strWhereCondition, strDateipfad, _
                        strEmpfänger, strBetreff, strHTMLNachricht, True, True)


Wiki hinweis.png Anmerkung: Wenn eine pdf-Datei mit gleichem Namen bereits existiert, wird sie ohne Warnhinweis mit der neu erzeugten Datei überschrieben!


Der Code wurde in Access 2010 erstellt.