VBA – Emails von Excel über Outlook senden
In this Article
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
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.
Fügen Sie einen Verweis auf die Microsoft-Outlook-Objektbibliothek für die von Ihnen verwendete Office-Version hinzu.
Sie können dann Ihren Code ändern, um diese Verweise direkt zu verwenden.
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!Learn More!