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