VBA Send Emails From Excel Through Outlook
Có thể bạn quan tâm
Return to VBA Code Examples
Written by
Mel Jenkins
Reviewed by
Steve Rynearson
Last updated on August 10, 2022In this Article
- Sending the Active Workbook
- Using Early Binding to refer to the Outlook Object Library
- Sending a Single Sheet from the Active Workbook
This tutorial will show you how to send emails from Excel through Outlook using VBA.
Sending the Active Workbook
Function SendActiveWorkbook(strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String) As Boolean On Error Resume Next Dim appOutlook As Object Dim mItem As Object 'create a new instance of Outlook Set appOutlook = CreateObject("Outlook.Application") Set mItem = appOutlook .CreateItem(0) With mItem .To = strTo .CC = "" .Subject = strSubject .Body = strBody .Attachments.Add ActiveWorkbook.FullName 'use send to send immediately or display to show on the screen .Display 'or .Send End With 'clean up objects Set mItem = Nothing Set appOutlook = Nothing End FunctionThe function above can be called using the procedure below
Sub SendMail() Dim strTo As String Dim strSubject As String Dim strBody As String 'populate variables strTo = "jon.smith@gmail.com" strSubject = "Please find finance file attached" strBody = "some text goes here for the body of the email" 'call the function to send the email If SendActiveWorkbook(strTo, strSubject, , strBody) = true then Msgbox "Email creation Success" Else Msgbox "Email creation failed!" End if End SubUsing Early Binding to refer to the Outlook Object Library
The code above uses Late Binding to refer to the Outlook Object. You can add a reference to Excel VBA, and declare the Outlook application and Outlook Mail Item using Early Binding if preferred. Early Binding makes the code run faster, but limits you as the user would need to have the same version of Microsoft Office on their PC.
Click on the Tools menu and References to show the reference dialog box.
Add a reference to the Microsoft Outlook Object Library for the version of Office that you are using.
You can then amend your code to use these references directly.
A great advantage of early binding is the drop down lists that show you the objects that are available to use!
Sending a Single Sheet from the Active Workbook
To send a single sheet, you first need to create a new workbook from the existing workbook with just that sheet in it, and then send that sheet.
Function SendActiveWorksheet(strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String) As Boolean On Error GoTo eh 'declare variables to hold the objects required Dim wbDestination As Workbook Dim strDestName As String Dim wbSource As Workbook Dim wsSource As Worksheet Dim OutApp As Object Dim OutMail As Object Dim strTempName As String Dim strTempPath As String 'first create destination workbook Set wbDestination = Workbooks.Add strDestName = wbDestination.Name 'set the source workbook and sheet Set wbSource = ActiveWorkbook Set wsSource = wbSource.ActiveSheet 'copy the activesheet to the new workbook wsSource.Copy After:=Workbooks(strDestName).Sheets(1) 'save with a temp name strTempPath = Environ$("temp") & "\" strTempName = "List obtained from " & wbSource.Name & ".xlsx" With wbDestination .SaveAs strTempPath & strTempName 'now email the destination workbook Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) With OutMail .To = strTo .Subject = strSubject .Body = strBody .Attachments.Add wbDestination.FullName 'use send to send immediately or display to show on the screen .Display 'or .Display End With .Close False End With 'delete temp workbook that you have attached to your mail Kill strTempPath & strTempName 'clean up the objects to release the memory Set wbDestination = Nothing Set wbSource = Nothing Set wsSource = Nothing Set OutMail = Nothing Set OutApp = Nothing Exit Function eh: MsgBox Err.Description End Functionand to run this function, we can create the following procedure
Sub SendSheetMail() Dim strTo As String Dim strSubject As String Dim strBody As String strTo = "jon.smith@gmail.com" strSubject = "Please find finance file attached" strBody = "some text goes here for the body of the email" If SendActiveWorksheet(strTo, strSubject, , strBody) = True Then MsgBox "Email creation Success" Else MsgBox "Email creation failed!" End If End SubVBA 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!VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
(No installation required!)
Free Download
Return to VBA Code Examples
AutoMacro: VBA Add-in with Hundreds of Ready-To-Use VBA Code Examples & much more!
Learn MoreTừ khóa » Visual Basic Code To Send Email From Excel
-
VBA Send Email From Excel - WallStreetMojo
-
How To Send Emails From An Excel Spreadsheet Using VBA Scripts
-
How To Send Email In Excel Using VBA? - Simplilearn
-
VBA To Automate Sending Email From Excel Table With Attachment ...
-
Send Emails With Attachments From Excel Using VBA And Outlook
-
How To Send Emails From Using Excel VBA? - EduCBA
-
Send Email From Excel Using VBA And VBScript - Tutorial
-
Excel Macro To Send Email Automatically (3 Suitable Examples)
-
Sending Email To A List Of Recipients Using Excel And Outlook
-
Sending Email With VBA: Learn In 11 Simple And Easy Steps
-
VBA Send Email From Excel
-
Mail From Excel With Outlook (VBA) - Ron De Bruin Excel Automation
-
Send Emails Using VBA From Excel Sheet With Multiple Recipients