Excel

Eine E-Mail versenden von Excel mit Outlook

Es gibt Situationen, wo Du gerne Daten oder Tabellen direkt aus Excel per E-Mail versenden möchtest. Du kannst natürlich hergehen und die Exceldatei speichern. Dann ins Outlook Programm gehen, die E-Mail erstellen und dann die Exceldatei als Anhang anhängen. Wenn Du diesen Vorgang aber mehrfach machen musst, kann das ganze ziemlich lästig werden. Deshalb gibt es die Möglichkeit eine vordefinierte Mail in Excel zu erstellen und diese dann über das Standardkonto in Outlook zu versenden. Der Vorteil dieser Methode ist, das Outlook nicht einmal gestartet sein muss.

Aufbau und Programmierung

In den nächsten Schritten zeige ich, wie eine E-Mail per Knopfdruck aus einem Excel-Tabellenblatt heraus versendet wird. Dazu öffnest Du Dein Excel mit einer neuen leeren Arbeitsmappe. Als nächstes musst Du einen Formular Button erstellen. Dieses kannst Du über das Symbol Einfügen im Reiter Entwicklertools.  Über den folgenden Dialog wird ein Makro der erstellen Schaltfläche zugewiesen oder neu erstellt :

Bitte erstelle das Makro über den Button Neu und Du gelangst direkt in den Visual Basic Editor. In dem neuen Fenster siehst Du jetzt eine leere Funktion mit dem Makronamen aus dem obenstehenden Bild. Vervollständige nun Deine Funktion, mit den folgenden Zeilen :

    On Error GoTo ErrHandler
    
    ' SET Outlook APPLICATION OBJECT.
    Dim objOutlook As Object
    Set objOutlook = CreateObject("Outlook.Application")
    
    ' CREATE EMAIL OBJECT.
    Dim objEmail As Object
    Set objEmail = objOutlook.CreateItem(olMailItem)

    With objEmail
        .to = "empfaenger@domain.tld"
        .Subject = "Das ist eine Testnachricht von einem Excel Makro"
        .Body = "Hallo Welt !!"
'        .Display
'        .Attachments.Add ("D:\Bild.png")
        .Send
    End With
    
    ' CLEAR.
    Set objEmail = Nothing:    Set objOutlook = Nothing
    
ErrHandler:

Wenn Du nun alles richtig gemacht hast, sollte Deine Funktion nun wie folgt aussehen :

Sub Schaltfläche1_Klicken()
    On Error GoTo ErrHandler
    
    ' SET Outlook APPLICATION OBJECT.
    Dim objOutlook As Object
    Set objOutlook = CreateObject("Outlook.Application")
    
    ' CREATE EMAIL OBJECT.
    Dim objEmail As Object
    Set objEmail = objOutlook.CreateItem(olMailItem)

    With objEmail
        .to = "empfaenger@domain.tld"
        .Subject = "Das ist eine Testnachricht von einem Excel Makro."
        .Body = "Hallo Welt !!"
'        .Display
'        .Attachments.Add ("D:\Bild.png")
        .Send
    End With
    
    ' CLEAR.
    Set objEmail = Nothing:    Set objOutlook = Nothing
    
ErrHandler:

End Sub

Um die erstellte E-Mail anzuzeigen und nicht zu versenden, muss die Zeile .Display auskommentiert und die Zeile .Send kommentiert werden. Denn der Befehl .Display zeigt Dir die E-Mail in einem Outlook Fenster an, so dass Du nochmal kontrollieren kannst, bevor Du die E-Mail versenden möchtest. Über die Zeile .Attachment kannst Du Anhänge an die E-Mail hängen. Das können Bilder oder auch andere Dokumente sein. Dazu musst Du nur den entsprechenden Pfad zu dem Dokument angeben. Mit der Zeile .Send weißt an, dass die E-Mail sofort und direkt über Outlook versendet.

Egal, wie die E-Mails versendet werden, ob automatisch oder manuell nach der Erstellung, alle E-Mails werden in dem Gesendet-Ordner abgelegt auch bei geschlossenem Outlook.

15 Gedanken zu „Eine E-Mail versenden von Excel mit Outlook

  1. Hallo,
    das geht mit
    .SentOnBehalfOfName = „mail.adresse@bla.de“
    du musst aber die Berechtigung besitzen, über den angegebenen Account zu versenden.
    Gruss

    1. Der Befehl .SentOnBehalfOfName = „elektropost@tralala.de“ funktioniert nicht immer, obwohl die hier genannte Adresse dann auch tatsächlich als Absenderadresse in der erzeugten E-Mail angezeigt wird.
      Manchmal ist es statt dessen erforderlich, in den Outlook-Konteneinstellungen im Reiter Datendateien, die Standard-.pst-Datei auf die entsprechende .pst-Datei der gewünschten Adresse zu ändern. Das war bei mir zumindest so. In diesem Fall kann man sich dann auch den .SentOnBehalfOfName – Befehl sparen.

  2. Warum bekommt das Programm bei .Send einen Fehler 287 ? Bei .Display ist alles korrekt angezeigt und kann per Button-Klick versendet werden.

  3. Danke für diesen Code.
    Noch eine Ergänzung: Wenn ich in meinem Excel Modul mit „Option Explicit“ arbeite, habe ich zunächst einen Fehler „Variable nicht definiert“ bzgl. „olMailItem“ erhalten. Den konnte ich nur mit einem Verweis auf die Microsoft Outlook Objectlibrary wegbekommen (Entwicklungsumgebung –> Haken unter Extras–> Verweise)

  4. Erst schon einmal Vielen Dank!

    Aber kann ich in das Textfeld auch einzelne Excel Felder einfügen? Und das die E-Mail immer an die Person geht die in einem Excel Feld steht?

    Also ich habe z.B. in einer Zeile einen Namen und eine E-Mail Adresse und möchte dann, dass er in dem Text, den ich geschrieben habe, dann den Namen einfügt und das an die E-Mail Adresse in der Zeile schickt. Und das so weiter an alle in der Excel Tabelle. Geht das?

    Vielen Dank schon einmal und beste Grüße!

    1. With OutlookMailItem
      .To = Range(„A1“)
      .CC = „“
      .Subject = „Bestellung “ & Range(„A2“).Value

      .Body = „Guten Tag“ & Chr(13) & _
      „“ & Chr(13) & _
      „Mit freundlichen Grüssen“ & Chr(13)

Schreibe einen Kommentar

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