Am Outlook user had a question:
I'm trying to send a mail merge from multiple people. I was wondering if there was a way to choose the sender address based on the recipient email address? I'm using an Excel file as the source of the merge and the sender names associated with the recipients in the excel file so I can add a field after the closing line in the document to have the senders name appear.
No, Outlook can’t do this, at least not as a native feature within the mail merge. Mail merges will always be sent from the default email account. However, it is possible if you use a macro to handle the merge, not the mail merge wizard.
This macro reads values from an Excel worksheet and sends a mail merge, replacing unique values in the Outlook template with values in the worksheet. It also sends the message From an address in the worksheet.
Create an Outlook template, entering unique values where the merge fields would be entered. While you could use standard merge fields or bookmarks, you would need to use the Word Object Library to update the fields. Using unique values allows us to use VBA's Replace function.
The finished merge will look like the following. (Yes, I know, I'm not creative with demo values and prefer to use Excel's features to create demo values.)
' This is an Excel macro ' you need to set a reference to Outlook Object Library Public Sub SendMailMergeExcel() Dim olApp As Object Dim xlApp As Excel.Application Dim xlWB As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim rCount As Long Dim bXStarted As Boolean Dim enviro As String Dim appdata As String Dim strPath As String Dim strAttachPath As String Dim SendTo As String Dim CCTo As String Dim strSubject As String Dim strAcctMgrName As String Dim AcctMgrEmail Dim olItem As Outlook.MailItem Dim Recip As Outlook.Recipient ' Get Excel set up enviro = CStr(Environ("USERPROFILE")) appdata = CStr(Environ("appdata")) On Error Resume Next Set xlApp = Excel.Application On Error GoTo 0 'Open the workbook to input the data Set xlWB = xlApp.ActiveWorkbook Set xlSheet = xlWB.Sheets("Sheet1") ' Process the message record On Error Resume Next rCount = 2 strAttachPath = enviro & "\Documents\Send\" Set olApp = GetObject(, "Outlook.Application") If Err <> 0 Then Set olApp = CreateObject("Outlook.Application") bXStarted = True End If Do Until Trim(xlSheet.Range("A" & rCount)) = "" strFirstname = xlSheet.Range("A" & rCount) SendTo = xlSheet.Range("B" & rCount) CCTo = xlSheet.Range("C" & rCount) strSubject = xlSheet.Range("D" & rCount) ' if adding attachment 'strAttachment = strAttachPath & xlSheet.Range("E" & rCount) strAcctMgrName = xlSheet.Range("F" & rCount) AcctMgrEmail = xlSheet.Range("G" & rCount) 'Create Mail Item and view before sending ' Default message form 'Set olItem = olApp.CreateItem(olMailItem) ' use a Template Set olItem = olApp.CreateItemFromTemplate(appdata & "\Microsoft\Templates\macro-test.oft") With olItem .SentOnBehalfOfName = AcctMgrEmail .To = SendTo .CC = CCTo .Subject = strSubject .Body = Replace(.Body, "[FirstName]", strFirstname) .Body = Replace(.Body, "[AcctMgrEmail]", AcctMgrEmail) .Body = Replace(.Body, "[strAcctMgrName]", strAcctMgrName) if adding attachments: '.Attachments.Add strAttachment .Save .Display '.Send End With rCount = rCount + 1 Loop Set xlWB = Nothing Set xlApp = Nothing End Sub
How to use the macros on this page
First: You need to have macro security set to the lowest setting, Enable all macros during testing. The macros will not work with the top two options that disable all macros or unsigned macros. You could choose the option Notification for all macros, then accept it each time you restart Outlook, however, because it's somewhat hard to sneak macros into Outlook (unlike in Word and Excel), allowing all macros is safe, especially during the testing phase. You can sign the macro when it is finished and change the macro security to notify.
To check your macro security in any Office 2010 application and newer, go to File, Options, Trust Center and open Trust Center Settings, and change the Macro Settings. In older versions look at Tools, Macro Security.
After you test the macro and see that it works, you can either leave macro security set to low or sign the macro.
Open the VBA Editor by pressing Alt+F11 on your keyboard.
Set a reference to other Object Libraries
If you receive a "User-defined type not defined" error, you need to set a reference to another object library.
- Go to Tools, References menu.
- Locate the object library in the list and add a check mark to it.
More information as well as screenshots are at How to use the VBA Editor
Hi, am getting error as "user defined type not defined" - Compiler error at "Dim olItem As Outlook.MailItem".
Could you please check
Did you set a reference to Outlook Object Library in Excel's Tools, References dialog? (I'll add the steps to this page.)
thank you this is helpful. what do I put in the "enviro = CStr(Environ("USERPROFILE"))" is this the path on my C drive of my user profile?
Yes, that is the path to your user profile - c:\users\yourname - I use it in the macros because it will use the correct folder on every computer. If the workbook is saved elsewhere, you can replace this with the correct path:
strAttachPath = enviro & "\Documents\Send\"