VBA E-Mails aus Excel über Outlook senden

In diesem Tutorial erfahren Sie, wie Sie mit VBA E-Mails aus Excel über Outlook senden.

Senden der aktiven Arbeitsmappe

1234567891011121314151617181920 Funktion SendActiveWorkbook(strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String) As BooleanBei Fehler Fortsetzen als nächstesAppOutlook als Objekt dimmenmItem als Objekt dimmen'Neue Instanz von Outlook erstellenset appOutlook = CreateObject("Outlook.Application")Setze mItem = appOutlook .CreateItem(0)Mit mItem.To = strTo.CC = "".Betreff = strBetreff.Körper = strKörper.Anhänge.ActiveWorkbook hinzufügen.FullName'Verwenden Sie Senden, um sofort zu senden oder anzuzeigen, um auf dem Bildschirm anzuzeigen.Anzeigen 'oder .SendenEnde mit"Objekte aufräumen"Setze mItem = NichtsAppOutlook = Nichts setzenEndfunktion

Die obige Funktion kann mit der folgenden Prozedur aufgerufen werden

123456789101112131415 Sub SendMail()Dim strTo As StringDim strSubject als StringDim strBody als String'Variablen auffüllenstrTo = "[email protected]"strSubject = "Hier finden Sie die Finanzdatei im Anhang"strBody = "hier steht ein Text für den E-Mail-Text"'rufen Sie die Funktion auf, um die E-Mail zu sendenWenn SendActiveWorkbook(strTo, strSubject, , strBody) = true dannMsgbox "Erfolgreiche E-Mail-Erstellung"AndersMsgbox "E-Mail-Erstellung fehlgeschlagen!"Beenden, wennEnd Sub

Verwenden der frühen Bindung zum Verweisen auf die Outlook-Objektbibliothek

Der obige Code verwendet Late Binding, um auf das Outlook-Objekt zu verweisen. Sie können einen Verweis auf Excel hinzufügen und die Outlook-Anwendung und das Outlook-Mail-Element bei Bedarf mithilfe der frühen Bindung deklarieren. Early Binding beschleunigt die Codeausführung, schränkt Sie jedoch ein, da der Benutzer dieselbe Version von Microsoft Office auf seinem PC benötigen würde.

Klicken Sie auf das Menü Extras und auf Referenzen, um das Referenzdialogfeld anzuzeigen.

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

Sie können Ihren Code dann ä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!

Senden eines einzelnen Blatts aus der aktiven Arbeitsmappe

Um ein einzelnes Blatt zu senden, müssen Sie zunächst eine neue Arbeitsmappe aus der vorhandenen Arbeitsmappe mit nur diesem Blatt erstellen und dann dieses Blatt senden.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 Funktion SendActiveWorksheet(strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String) As BooleanBei Fehler GoTo eh'Variablen deklarieren, um die erforderlichen Objekte aufzunehmenDim wbDestination als ArbeitsmappeDim strDestName As StringDim wbSource als ArbeitsmappeDim wsSource als ArbeitsblattOutApp als Objekt dimmenOutMail als Objekt dimmenDim strTempName As StringDim strTempPath als String'Erste Zielarbeitsmappe erstellenSet wbDestination = Workbooks.AddstrDestName = wbDestination.Name'Quellarbeitsmappe und -blatt festlegenwbSource = ActiveWorkbook setzenwsSource = wbSource.ActiveSheet einstellen'Kopiere das Activesheet in die neue ArbeitsmappewsSource.Copy After:=Workbooks(strDestName).Sheets(1)'mit einem temporären Namen speichernstrTempPath = Umgebung$("temp") & "\"strTempName = "Liste erhalten von " & wbSource.Name & ".xlsx"Mit wbDestination.SaveAs strTempPath & strTempName'jetzt die Zielarbeitsmappe per E-Mail sendenSet OutApp = CreateObject("Outlook.Application")Setze OutMail = OutApp.CreateItem(0)Mit OutMail.To = strTo.Betreff = strBetreff.Körper = strKörper.Attachments.Add wbDestination.FullName'Verwenden Sie Senden, um sofort zu senden oder anzeigen, um auf dem Bildschirm anzuzeigen.Anzeige 'oder .AnzeigeEnde mit.Schließen FalschEnde mit'temporäre Arbeitsmappe löschen, die Sie an Ihre E-Mail angehängt habenKill strTempPath & strTempName'Räume die Objekte auf, um den Speicher freizugebenSetze wbDestination = NichtswbSource = Nichts setzenwsSource = Nichts setzenSetze OutMail = NichtsSet OutApp = NichtsExit-Funktionäh:MsgBox Err.BeschreibungEndfunktion

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

12345678910111213 Sub SendSheetMail()Dim strTo As StringDim strSubject als StringDim strBody als StringstrTo = "[email protected]"strSubject = "Hier finden Sie die Finanzdatei im Anhang"strBody = "hier steht ein Text für den E-Mail-Text"Wenn SendActiveWorksheet(strTo, strSubject, , strBody) = True ThenMsgBox "Erfolgreiche E-Mail-Erstellung"AndersMsgBox "E-Mail-Erstellung fehlgeschlagen!"Ende WennEnd Sub
wave wave wave wave wave