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.

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

    1. Meines Wissens geht das nicht. Das verschicken geht nur über das Standard-Konto, welches in Outlook konfiguriert ist.

  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.

    1. Hallo Fritz,
      zwar etwas spät, aber ich habe den gleichen Fehler an der gleichen Stelle. Weißt du zwischenzeitlich, woran das liegt? Vielen Dank, falls du das noch liest und antwortest.
      Viele Grüße
      Norbert

  3. wie kann ich im Body einen Bereich eines Tabellenblattes einfügen?

    hab schon alles möglich versucht, aber bekomme esnicht hin

  4. 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)

  5. 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)

  6. Gibt es eine Möglichkeit, daß die Adressen nicht so schnell angeschrieben werden? Bei GMX gibt es ein Problem, wenn zuviele Emails auf einmal aus Excel ausgehen. z.B. 3pro Sekunde, weil der Rechner schnell ist. Kann ich einstellen, nicht mehr als eine Email die Sekunde?

    1. Application.Wait (Now + TimeValue(„0:00:01“))

      Hier hättest du eine Verzögerung von 1 Sekunden zwischen dem erstellen der Mails,

      Diese Verzögerung bezieht sich aber nur auf Excel und nicht auf Outlook direkt. Wenn du den Delay aber höher stellst auf 5 oder 10 Sekunden kommt Outlook hinterher.

      ( hatte aber noch nie Probleme mit Outlook )

  7. Bei mir funktioniert das hinzufügen des Anhangs nicht.
    Ich habe .Attachments.Add (….) eingefügt, aber es schickt die E-Mail immer ohne Anhang raus.

    Woran kann das liegen?

  8. Hallo,

    ich würde gern über ein Dropdownmenü (Feld A11) z.B. aus 3 Mailadressen auf dem aktuellen Sheet auswählen, an dem die Datei dann verschickt wird. Also anstatt:
    With Nachricht
    .To = „deine.mailadresse@mail.de

    With Nachricht
    .To = Range(„A11“)
    oder so… Funktioniert aber nicht. Was mache ich da falsch?

    1. Hallo Matthias,

      indem du .To=Range(„A11“) nutzt weiß Excel zwar welche Zelle du anspricht, aber nicht was es mit ihr anfangen soll.

      Also entweder .To=Range(„A11“).Value

      oder .To=Range(„A11“).Value2

      Value ist quasi der Inhalt / Wert der Zelle und Value 2 nur der Textinhalt.

      Ich benutze aber immer Value.

      LG

  9. Hallo,

    kann ich in die Mail einen Hyperlink integrieren, der genau die Excel-Datei verlinkt, aus der ich die Mail heraus generiere? Habe das schon fast mit „file:“ & ThisWorkbook.FullName“ geschafft. Sobald der Pfad aber ein Leerzeichen enthält, wird der Link in der Mail unterbrochen und funktioniert demnach nicht mehr.

    LG

Schreibe einen Kommentar

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