VBA-Makro: Datei-Anhang einer E-Mail Nachricht automatisch hinzufügen

VBA - Visual Basic for Application

Das Hinzufügen eines Anhangs zu einer E-Mail kann man in Microsoft Outlook etwas beschleunigen indem man ein passendes Makro verwendet. Oftmals klickt man sich über das Ribbon-Menü über „Einfügen“ ➜ „Datei anfügen“ zu der jeweiligen Datei durch. Oder man sucht erst die Datei im Windows-Explorer heraus und zieht diese dann per Drag&Drop in die neue Mail. Das ist schon relativ praktisch, kann aber mit einem VBA-Makro noch verbessert werden, insbesondere, wenn man immer wieder dieselbe Datei verschickt oder der Datei-Anlage immer unter einen bestimmten Pfad liegt und einer konkreten Nomenklatur entspricht. In einem früheren Artikel wurde bereits gezeigt, wie man E-Mail-Anhänge mit VBA automatisch speichern kann, nun soll hier der umgekehrte Weg, also das Anhängen von Dateien mittels VBA an eine Mail gezeigt werden.

VBA-Code

Mit dem folgenden VBA-Code erzeugen wir zuerst eine neue Outlook-Email und dann fügen wir einen Anhang automatisch in diese E-Mail ein.

Sub NewMailWithAttachment()
    Dim appOutlook As Outlook.Application
    Dim myEmail As Outlook.MailItem

    Set appOutlook = New Outlook.Application
    Set myEmail = appOutlook.CreateItem(olMailItem)
    Set myAttachments = myEmail.Attachments
    myAttachments.Add "c:\Users\danie\Desktop\Invoice-2023-01-1938.pdf", _
    olByValue, 1, "YourInvoice"
    myEmail.Display
End Sub

Führt man diesen Code/diese Makro aus wird eine neu erzeugte E-Mail mit dem entsprechenden Dateianhang geöffnet und angezeigt, wie im nachfolgenden Bild zu sehen ist.

Screenshot von VBA-Code mit neuer E-Mail mit eingefügtem Dateianhang
VBA-Code erzeugt E-Mail mit Anhang

Erläuterungen zum Code

Mit dem Ausdruck Set appOutlook = New Outlook.Application wird einfach ein Objekt von der Outlook-Anwendung zur weiteren Verwendung erzeugt. Dieses nimmt man dann, um damit die neue E-Mail zu erstellen CreateItem(olMailItem). Das neue E-Mail-Objekt myEmail, besitzt eine Eigenschaft/Objekt, welches die Anhänge verwaltet. Dieses weisen wir unserem Objekt myAttachments zu.

Die eigentlich interessante Methode ist in diesem Fall myAttachments.Add. Diese kann man vier Parameter übergeben in der folgenden Reihenfolge:

  1. Source (obligatorisch): das ist der vollständige Dateipfad zu der Datei, die der Mail angehangen werden soll
  2. Type (optional): definiert den Typ der Dateianlage. Dieser Parameter entspricht der OlAttachmentType-Enumeration von welcher es vier Stück (siehe weiter unten)
  3. Position (optional): hier kann man definieren an welcher Stelle der Anhang in der E-Mail eingefügt wird. Es handelt sich dabei um einen Zahlenwert. Gibt man den Wert “1” an, dann wird die Anlage am Anfang der E-Mail positionert. Bei jeder beliebigen anderen Zahl wird der Anhang jeweils an der Stelle positioniert, welcher der Anzahl der Zeichen des E-Mail-Textes entspricht. Sollte die Zahl größer sein als die Anzahl der Zeichen des E-Mail-Textes, dann wird der Anhang am Ende eingefügt.
  4. DisplayName (optional): Hier kann man dem Dateianhang einen anderen Namen geben. Das ist der Dateiname, wie er dann in der E-Mail erscheint. Dieser Parameter funktioniert aber nicht in allen Konstellationen. Damit es funktioniert muss der Type olByValue verwendet werden und die E-Mail im Rich-Text-Format formatiert sein. Bei reinen Text- oder HTML-Mails würde der Dateiname wie in Source angegeben verwendet werden.

OlAttachmentType

Wie bereits erwähnt, davon gibt es vier Typen mit der folgenden Bedeutung:

  • olByReference: Den Typ soll man nicht mehr verwenden. Dieser wird nicht mehr von aktuellen Outlook-Versionen unterstützt
  • olByValue: Bei diesem Typ wird der Anhang als Kopie der Originaldatei in die E-Mail eingefügt. Dies sollte für die meisten Anwendungsfälle der geeigneteste Typ sein. Wird die Origninaldatei umbenannt, editiert oder gelöscht, so hat das keinen Einfluss auf die eingefügte Datei
  • olEmbeddeditem: Dieser Typ kommt zum Einsatz, wenn man Anhänge im Outlook-Nachrichtenformat (*.msg-Dateien) einfügt.
  • olOLE: Dieser Typ betrifft spezielle Objekte für die Microsoft das OLE (Object Linking and Embedding) geschaffen hat. Dadurch lassen sich übergreifend Objekte/Applikationen in anderen Microsoft-Applikationen verlinken oder einbetten. Bestes Beispiel dafür ist, wenn man zum Beispiel eine Visio-Zeichnung in Word einfügt. Dann wird diese so eingefügt, dass man innerhalb von Word die Visio-Zeichnung bearbeiten kann.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert