E-Mails per VBA erstellen mit CreateItem

Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!

Wie man mit Outlook eine E-Mail erstellt, diese mit Betreff, Inhalt, Anlagen, Empfänger und so weiter füllt und diese dann verschickt, weiß mittlerweile jeder. Aber was, wenn man das Erstellen von E-Mails automatisieren möchte und dazu VBA nutzen will? Beispielsweise, um auf Knopfdruck eine Standardmail an einen Empfänger zu schicken oder auch eine Mail an eine Liste von Kunden zu senden? Der vorliegende Artikel zeigt, wie Sie per VBA neue E-Mails erstellen und diese dann entweder zum Betrachten, Nachbearbeiten und zum manuellen Senden anzeigen oder diese sofort auf den Weg zum Empfänger bringen.

Einfache E-Mails programmieren

Unabhängig von den vielen Anwendungsfällen, die wir uns für das VBA-gesteuerte Erstellen von E-Mails vorstellen können, schauen wir uns in diesem Artikel erst einmal die technische Seite an. Dabei wollen wir eine einfache E-Mail wie die aus Bild 1 erstellen – also den Empfänger festlegen und den Betreff und den Inhalt eintragen. Als Abschluss wollen wir noch ein Attachment hinzufügen.

Zu erstellende E-Mail

Bild 1: Zu erstellende E-Mail

Beispielcode in neuem Modul

Den Beispielcode zum Erstellen einer solchen E-Mail bringen wir in einem neuen Modul im VBA-Projekt des VBA-Editors unter, wo wir diesen leicht ausführen können. In weiteren Artikeln schauen wir uns an, wie wir solche und andere Prozeduren über das Ribbon starten können – entweder durch manuelle, benutzerdefinierte Anpassungen oder auch durch das Bereitstellen von Code und Ribbon-Anpassungen mit COM-Add-Ins.

Dazu öffnest Du den VBA-Editor (am schnellsten mit der Tastenkombination Alt + F11) und wählst den Menübefehl Einfügen|Modul aus. Damit Du den gleich erstellten Code später schnell wiederfindest, ändern wir gleich den Namen des neuen Moduls. Dazu markieren wir das Modul im Projekt-Explorer (Strg + R) und passen dann den Namen im Eigenschaften-Bereich an (F4) und geben für die Eigenschaft (Name) den Wert mdlEMailsErstellen ein (siehe Bild 2).

Umbenennen des VBA-Moduls

Bild 2: Umbenennen des VBA-Moduls

Leere E-Mail erstellen

Danach beginnen wir mit dem Erstellen und Anzeigen einer neuen, leeren E-Mail. Dazu legen wir eine neue Prozedur namens LeereEMailErstellen an.

Hier kannst Du nun direkt mit dem Programmieren beginnen, und zwar mit der folgenden kleinen Prozedur. Diese deklariert eine Objektvariable des Typs MailItem und füllt diese durch den Aufruf der Methode Create-Item. Diese Methode können wir zum Erstellen aller in Outlook verwendeter Elemente wie E-Mails, Kontakte, Termine, Aufgaben, Notizen et cetera nutzen.

Dazu müssen wir lediglich den Typ des zu erstellenden Elements in Form einer Konstanten für den einzigen Parameter der Methode CreateItem übergeben. Im Falle einer E-Mail handelt es sich dabei um die Konstante olMailItem. Damit haben wir, auch wenn wir diese noch nicht sehen, bereits eine neue E-Mail erstellt. Um diese sichtbar zu machen, rufen wir noch die Methode Display der Objektvariablen mit der neuen E-Mail auf:

Public Sub LeereEMailErstellen()
     Dim objMailItem As MailItem
     Set objMailItem = Application.CreateItem(olMailItem)
     objMailItem.Display
End Sub

Um diese Prozedur auszuführen, platzieren wir einfach die Einfügemarke innerhalb der Prozedur und betätigen die Taste F5. Das funktioniert wie gewünscht: Es erscheint eine neue, leere E-Mail (siehe Bild 3).

Eine per VBA erstellte E-Mail

Bild 3: Eine per VBA erstellte E-Mail

Parameter der Display-Methode

Die Display-Methode bietet einen Parameter namens Modal an, der standardmäßig auf False eingestellt ist. Wenn Sie diesen auf True einstellen, wird die E-Mail als modales Fenster geöffnet. Das heißt, dass der Benutzer erst mit Outlook weiterarbeiten kann, wenn er die E-Mail auf irgendeine Art geschlossen hat – entweder durch Versenden oder durch anderweitiges Schließen:

objMailItem.Display True

Für Experimente mit den in diesem Artikel vorgestellten Beispielen ist die Einstellung des Parameters Modal auf den Wert True recht praktisch, da das VBA-Fenster immer den Fokus behält und gegebenenfalls geöffnete Inspector-Fenster mit E-Mails verdeckt.

Eigenschaften der E-Mail einstellen

Nun wollen wir die Eigenschaften wie den Empfänger, den Betreff und den Inhalt der E-Mail einstellen. Dazu deklarieren wir in einer neuen Prozedur namens EMailErstellen eine weitere Variable namens strBody (siehe Listing 1). In dieser stellen wir den Inhalt der E-Mail zusammen, bevor wir ihn zuweisen. Zuvor jedoch weisen wir der Eigenschaft To den Empfänger zu und der Eigenschaft Subject den Betreff der E-Mail.

Public Sub EMailErstellen()
     Dim objMailItem As MailItem
     Dim strBody As String
     Set objMailItem = Application.CreateItem(olMailItem)
     With objMailItem
         .To = "andre@minhorst.com"
         .Subject = "Beispielmail"
         strBody = "Hallo André, " & vbCrLf & vbCrLf
         strBody = strBody & "ich hoffe, es geht Dir gut! Anbei findest Du das gewünschte Bild." & vbCrLf & vbCrLf
         strBody = strBody & "Viele Grüße" & vbCrLf
         strBody = strBody & "Klaus"
         .Body = strBody
         .Display
     End With
End Sub

Listing 1: Code zum Erstellen einer Mail mit Empfänger, Betreff und Inhalt

Danach weisen wir der Variablen strBody die erste Zeile des Inhalts zu und fügen dieser mit der Konstanten vbCrLf zwei Zeilenumbrüche hinzu. Die nächste Anweisung greift den Inhalt von strBody auf und fügt diesem eine weitere Zeile samt Zeilenumbrüchen hinzu – und so stellen wir den kompletten Inhalt der E-Mail zusammen. Ist der Inhalt in strBody zusammengestellt, weisen wir diesen der Eigenschaft Body des MailItem-Elements zu. Schließlich zeigen wir die vollständige E-Mail wieder mit der Display-Methode an.

Da wir in dieser Prozedur oft auf Eigenschaften und Methoden des Elements objMailItem zugreifen, haben wir diese mit dem With-Schlüsselwort referenziert. Zwischen dieser Zeile und der Zeile End With können wir dann über die Punkt-Syntax auf die Eigenschaften und Methoden zugreifen, ohne jedes Mal explizit das Element objMailItem angeben zu müssen.

Führen wir nun diese Prozedur mit F5 aus, erscheint schon fast die eingangs beschriebene E-Mail – es fehlt lediglich noch die Anlage. Wir wollen der E-Mail noch eine Datei namens pic001.png hinzufügen.

Anlagen zu einer E-Mail hinzufügen

Für das Hinzufügen von Anlagen bietet das MailItem-Element die Auflistung Attachments an. Um dieser eine Anlage hinzuzufügen, wählen wir dessen Methode Add mit IntelliSense aus (siehe Bild 4).

Methoden per IntelliSense auswählen

Bild 4: Methoden per IntelliSense auswählen

Nachdem wir das getan haben, können wir als Parameter den Namen der hinzuzufügenden Datei angeben. Diesen speichern wir in einer Variablen namens strAttachment:

Dim strAttachment As String

Die Zuweisung erfolgt beispielsweise wie folgt (den Pfad haben wir abgekürzt):

strAttachment = "c:\...\pic001.png"

Und schließlich weisen wir das Attachment der E-Mail zu. Diese zusätzliche Zeile fügen wir unmittelbar vor der Zeile mit der Display-Anweisung zum Anzeigen der E-Mail ein:

objMailitem.Attachments.Add strAttachment

Führen wir die neue Version der Prozedur aus, erhalten wir genau die eingangs beschriebene E-Mail

E-Mail direkt nach dem Erstellen versenden

 

Schreibe einen Kommentar