Rückkehr in VBA-Code-Beispiele

VBA – Emails von Excel über Outlook senden

In diesem Tutorial erfahren Sie, wie Sie E-Mails mit VBA aus Excel über Outlook versenden können.

Versenden der aktuellen Arbeitsmappe

Function AktuelleArbeitsmappeSenden(strZiel As String, strBetreff As String, Optional strCC As String, Optional strNachricht As String) As Boolean
   On Error Resume Next
   Dim appOutlook As Object
   Dim meinElement As Object
'Eine neue Instanz von Outlook erzeugen
   Set appOutlook = CreateObject("Outlook.Application")
   Set meinElement = appOutlook.CreateItem(0)
   With meinElement 
     .To = strZiel
     .CC = ""
     .Subject = strBetreff
     .Body = strBody
     .Attachments.Add ActiveWorkbook.FullName
'Verwenden Sie send, um sofort zu senden oder display, um auf dem Bildschirm anzuzeigen
    .Display 'oder .Send
   End With
'Objekte aufräumen
  Set meinElement = Nothing
  Set appOutlook = Nothing
End Function

Die obige Funktion kann mit der folgenden Prozedur aufgerufen werden

Sub MailSenden()
   Dim strZiel As String
   Dim strBetreff As String
   Dim strNachricht As String
'Variablen belegen
   strZiel = "jon.smith@gmail.com"
   strBetreff = "In der Anlage finden Sie das Finanzdossier"
   strNachricht = "Hier kommt ein Text für den Textkörper der E-Mail rein"
'Funktion zum Senden der E-Mail aufrufen
   If AktuelleArbeitsmappeSenden(strZiel, strBetreff, , strNachricht) = True Then
      Msgbox "Erstellung der E-Mail erfolgreich"
   Else
      Msgbox "Erstellung der E-Mail fehlgeschlagen!"
   End if
End Sub

vba outlook nachricht

Verwendung der frühen Bindung (Engl. Early Binding) zum Verweisen auf die Outlook-Objektbibliothek

Der obige Code verwendet die späte Bindung (Engl. Late Binding), um auf das Outlook-Objekt zu verweisen. Sie können einen Verweis auf Excel hinzufügen und dann die Outlook-Anwendung und das Outlook-Mail-Element mit der frühen Bindung deklarieren, wenn Sie dies wünschen. Die frühe Bindung beschleunigt die Ausführung des Codes, aber sie schränkt Sie als Entwickler ein, da der Benutzer die gleiche Version von Microsoft Office auf seinem PC haben muss.

Klicken Sie auf die Registerkarte Extras und dann auf Verweise, um das Dialogfeld „Verweise“ anzuzeigen.

vba outlook verweis hinzufuegen Fügen Sie einen Verweis auf die Microsoft-Outlook-Objektbibliothek für die von Ihnen verwendete Office-Version hinzu.

vba outlook verweise

Sie können dann Ihren Code ändern, um diese Verweise direkt zu verwenden.

vba outlook fruehe bindung

Ein großer Vorteil der frühen Bindung sind die Dropdown-Listen, die Ihnen die verfügbaren Objekte anzeigen!

Versenden eines einzelnen Blatts aus der aktuellen Arbeitsmappe

Um ein einzelnes Blatt zu senden, müssen Sie zunächst eine neue Arbeitsmappe, die nur dieses Blatt enthält, aus der vorhandenen erstellen, und dann diese neue Mappe versenden.

Function AktuellesBlattSenden(strZiel As String, strBetreff As String, Optional strCC As String, Optional strNachricht As String) As Boolean
   On Error GoTo eh
'Variablen deklarieren, um die benötigten Objekte zu speichern
   Dim wbZiel As Workbook
   Dim strZielName As String
   Dim wbQuelle As Workbook
   Dim wsQuelle As Worksheet
   Dim OutApp As Object
   Dim OutMail As Object
   Dim strTempName As String
   Dim strTempPfad As String
'Ziel-Arbeitsmappe zuerst erstellen
   Set wbZiel = Workbooks.Add
   strZielName = wbZiel.Name
'Quellarbeitsmappe und -blatt festlegen
   Set wbQuelle = ActiveWorkbook
   Set wsQuelle = wbQuelle.ActiveSheet
'das aktive Blatt in die neue Arbeitsmappe kopieren
   wsQuelle.Copy After:=Workbooks(strZielName).Sheets(1)
'unter einem temporären Namen speichern
   strTempPfad = Environ$("temp") & "\"
   strTempName = "Liste erhalten von " & wbQuelle.Name & ".xlsx"
   With wbZiel
      .SaveAs strTempPfad & strTempName
'Nun die Zielarbeitsmappe versenden
      Set OutApp = CreateObject("Outlook.Application")
      Set OutMail = OutApp.CreateItem(0)
      With OutMail
         .To = strZiel
         .Subject = strBetreff
         .Body = strNachricht
         .Attachments.Add wbZiel.FullName
'Send verwenden, um die Nachricht sofort zu senden, oder Display verwenden, um sie auf dem Bildschirm anzuzeigen
         .Display 'oder .Send
      End With
      .Close False
   End With
'Die temporäre Arbeitsmappe, die Sie an Ihre E-Mail angehängt haben, löschen
   Kill strTempPfad & strTempName
'die Objekte aufräumen, um den Speicher freizugeben
   Set wbZiel = Nothing
   Set wbQuelle = Nothing
   Set wsQuelle = Nothing
   Set OutMail = Nothing
   Set OutApp = Nothing
Exit Function
eh:
   MsgBox Err.Description
End Function

und um diese Funktion auszuführen, können wir die folgende Prozedur erstellen

Sub BlattMailen()
   Dim strZiel As String
   Dim strBetreff As String
   Dim strNachricht As String
   strZiel = "jon.smith@gmail.com"
   strBetreff = "In der Anlage finden Sie das Finanzdossier"
   strNachricht = "Hier kommt ein Text für den Textkörper der E-Mail rein"
   If AktuellesBlattSenden(strZiel, strBetreff, , strNachricht) = True Then
      MsgBox "Erstellung der E-Mail erfolgreich!"
   Else
      MsgBox "Erstellung der E-Mail fehlgeschlagen!"
   End If
End Sub

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro - A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users! vba save as


Learn More!