+ Reply to Thread
Results 1 to 5 of 5

Sending an email from Excel to multiple email addresses

Hybrid View

  1. #1
    Registered User
    Join Date
    12-28-2006
    Posts
    97

    Sending an email from Excel to multiple email addresses

    I am using the following code and it works great the only problem is that when I have more then one email address in the same cell it will not send the email. Even if I seperate it with a semicolon. It work fine if I have just one email address in the email field. How can I get it to send the same info to different email addresses.

    Sub Email2()
    
        Dim rng As Range
        Dim Ash As Worksheet
        Dim Cws As Worksheet
        Dim Rcount As Long
        Dim Rnum As Long
        Dim FilterRange As Range
        Dim FieldNum As Integer
        Dim NewWB As Workbook
        Dim TempFilePath As String
        Dim TempFileName As String
        Dim FileExtStr As String
        Dim FileFormatNum As Long
    
        On Error GoTo cleanup
    
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
    
        'Set filter sheet, you can also use Sheets("MySheet")
        Set Ash = ActiveSheet
    
        'Set filter range and filter column (column with e-mail addresses)
        Set FilterRange = Ash.Range("A1:H" & Ash.Rows.Count)
        FieldNum = 2    'Filter column = B because the filter range start in column A
    
        'Add a worksheet for the unique list and copy the unique list in A1
        Set Cws = Worksheets.Add
        FilterRange.Columns(FieldNum).AdvancedFilter _
                Action:=xlFilterCopy, _
                CopyToRange:=Cws.Range("A1"), _
                CriteriaRange:="", Unique:=True
    
        'Count of the unique values + the header cell
        Rcount = Application.WorksheetFunction.CountA(Cws.Columns(1))
    
        'If there are unique values start the loop
        If Rcount >= 2 Then
            For Rnum = 2 To Rcount
    
                'If the unique value is a mail addres create a mail
                If Cws.Cells(Rnum, 1).Value Like "?*@?*.?*" Then
    
                    'Filter the FilterRange on the FieldNum column
                    FilterRange.AutoFilter Field:=FieldNum, _
                                           Criteria1:=Cws.Cells(Rnum, 1).Value
                                        
                    'Copy the visible data in a new workbook
                    With Ash.AutoFilter.Range
                        On Error Resume Next
                        Set rng = .SpecialCells(xlCellTypeVisible)
                        On Error GoTo 0
                    End With
    
                    Set NewWB = Workbooks.Add(xlWBATWorksheet)
    
                    rng.Copy
                    With NewWB.Sheets(1)
                        .Cells(1).PasteSpecial Paste:=8
                        .Cells(1).PasteSpecial Paste:=xlPasteValues
                        .Cells(1).PasteSpecial Paste:=xlPasteFormats
                        .Cells(1).Select
                        Application.CutCopyMode = False
                    End With
    
                    'Create a file name
                    TempFilePath = Environ$("temp") & "\"
                    TempFileName = "BOD " & Format(Now, "dd-mmm-yy h-mm-ss")
    
                    If Val(Application.Version) < 12 Then
                        'You use Excel 2000-2003
                        FileExtStr = ".xls": FileFormatNum = -4143
                    Else
                        'You use Excel 2007
                        FileExtStr = ".xlsx": FileFormatNum = 51
                    End If
    
                    'Save, Mail, Close and Delete the file
                    With NewWB
                        .SaveAs TempFilePath & TempFileName _
                              & FileExtStr, FileFormat:=FileFormatNum
                        On Error Resume Next
                        .SendMail Cws.Cells(Rnum, 1).Value, _
                                  "BOD Appointment Reminder"
                        On Error GoTo 0
                        .Close savechanges:=False
                    End With
    
                    Kill TempFilePath & TempFileName & FileExtStr
                End If
    
    
                'Close AutoFilter
                Ash.AutoFilterMode = False
    
            Next Rnum
        End If
    
    cleanup:
        Application.DisplayAlerts = False
        Cws.Delete
        Application.DisplayAlerts = True
    
        With Application
            .EnableEvents = True
            .ScreenUpdating = True
        End With
    End Sub
    Last edited by insanity66; 10-14-2009 at 02:02 PM.

  2. #2
    Forum Moderator Leith Ross's Avatar
    Join Date
    01-15-2005
    Location
    San Francisco, Ca
    MS-Off Ver
    2000, 2003, & 2010
    Posts
    23,259

    Re: Sending an email from Excel to multiple email addresses

    Hello insanity66,

    Using multiple recipients with the workbook SendMail method is virtually undocumented, save for this clue in the VBA Help files...
    Recipients Required Variant. Specifies the name of the recipient as text, or as an array of text strings if there are multiple recipients. At least one recipient must be specified, and all recipients are added as To recipients.
    Which means you must use the Array function to create a list of recipients.

    Example
    ActiveWorkbook.SendMail Recipients:=Array("nobody@nowhere.com", "J.Bush@abc.com"), Subject:=("Assignments for ")
    Sincerely,
    Leith Ross

    Remember To Do the Following....

    1. Use code tags. Place [CODE] before the first line of code and [/CODE] after the last line of code.
    2. Thank those who have helped you by clicking the Star below the post.
    3. Please mark your post [SOLVED] if it has been answered satisfactorily.


    Old Scottish Proverb...
    Luathaid gu deanamh maille! (Rushing causes delays!)

  3. #3
    Registered User
    Join Date
    12-28-2006
    Posts
    97

    Re: Sending an email from Excel to multiple email addresses

    Thanks for your help.

    How do I get the email to display and not send? Is that possible?

  4. #4
    Registered User
    Join Date
    10-14-2009
    Location
    Bristol,England
    MS-Off Ver
    Excel 2007
    Posts
    22

    Re: Sending an email from Excel to multiple email addresses

    I use this code for sending emails

    Sub SendEmail()
        Dim Email As String, Subj As String
        Dim Msg As String, URL As String
         
         'Get the email address
        Email = "emailaddress1;emailaddress2;emailaddress3" '<-- Enter the email address here.
         
         'Message subject
        Subj = "Scorecards Have finished updating."
         
         'Compose the message
        Msg = ""
        Msg = Msg & "All," & vbCrLf & vbCrLf
        Msg = Msg & "Just to let you know that the scorecard update has been completed." & vbCrLf & vbCrLf
        Msg = Msg & "This is an automated email" & vbCrLf & vbCrLf
         
         'Replace spaces with %20 (hex)
        Subj = Application.WorksheetFunction.Substitute(Subj, " ", "%20")
        Msg = Application.WorksheetFunction.Substitute(Msg, " ", "%20")
         
         'Replace carriage returns with %0D%0A (hex)
        Msg = Application.WorksheetFunction.Substitute(Msg, vbCrLf, "%0D%0A")
         
         'Create the URL
        URL = "mailto:" & Email & "?subject=" & Subj & "&body=" & Msg
         
         'Execute the URL (start the email client)
        ShellExecute 0&, vbNullString, URL, vbNullString, vbNullString, vbNormalFocus
         
         'Wait two seconds before sending (Ctrl+Enter) keystrokes
        Application.Wait (Now + TimeValue("0:00:02"))
        SendKeys String:="^~"
    End Sub
    Enter multiple address seperated by ;

    Change the wait time to a longer value and it will show before sending, or take out the SendKeys String so it shows on the screen and you manually have to press send.

  5. #5
    Registered User
    Join Date
    12-28-2006
    Posts
    97

    Re: Sending an email from Excel to multiple email addresses

    I was able to get it working with this code
    and using semicolons to seperate email addresses
    Thanks for everyone input

    Sub email()
    
    ' Don't forget to copy the function RangetoHTML in the module.
    ' Working in Office 2000-2007
        Dim OutApp As Object
        Dim OutMail As Object
        Dim rng As Range
        Dim Ash As Worksheet
        Dim Cws As Worksheet
        Dim Rcount As Long
        Dim Rnum As Long
        Dim FilterRange As Range
        Dim FieldNum As Integer
        Dim mailAddress As String
    
        On Error GoTo cleanup
        Set OutApp = CreateObject("Outlook.Application")
        OutApp.Session.Logon
    
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
    
        'Set filter sheet, you can also use Sheets("MySheet")
        Set Ash = ActiveSheet
    
        'Set filter range and filter column (Column with names)
        Set FilterRange = Ash.Range("A1:H" & Ash.Rows.Count)
        FieldNum = 1    'Filter column = A because the filter range start in A
    
        'Add a worksheet for the unique list and copy the unique list in A1
        Set Cws = Worksheets.Add
        FilterRange.Columns(FieldNum).AdvancedFilter _
                Action:=xlFilterCopy, _
                CopyToRange:=Cws.Range("A1"), _
                CriteriaRange:="", Unique:=True
    
        'Count of the unique values + the header cell
        Rcount = Application.WorksheetFunction.CountA(Cws.Columns(1))
    
        'If there are unique values start the loop
        If Rcount >= 2 Then
            For Rnum = 2 To Rcount
    
                'Filter the FilterRange on the FieldNum column
                FilterRange.AutoFilter Field:=FieldNum, _
                                       Criteria1:=Cws.Cells(Rnum, 1).Value
    
                'Look for the mail address in the MailInfo worksheet
                mailAddress = ""
                On Error Resume Next
                mailAddress = Application.WorksheetFunction. _
                              VLookup(Cws.Cells(Rnum, 1).Value, _
                                    Worksheets("Mailinfo").Range("A1:E" & _
                                    Worksheets("Mailinfo").Rows.Count), 5, False)
                On Error GoTo 0
    
                If mailAddress <> "" Then
                    With Ash.AutoFilter.Range
                        On Error Resume Next
                        Set rng = .SpecialCells(xlCellTypeVisible)
                        On Error GoTo 0
                    End With
    
                    Set OutMail = OutApp.CreateItem(0)
    
                    On Error Resume Next
                    With OutMail
                        .to = mailAddress
                        .Subject = "BOD Appointment Reminder"
                        .HTMLBody = RangetoHTML(rng)
                        .Display  'Or use Send
                    End With
                    On Error GoTo 0
    
                    Set OutMail = Nothing
                End If
    
                'Close AutoFilter
                Ash.AutoFilterMode = False
    
            Next Rnum
        End If
    
    cleanup:
        Set OutApp = Nothing
        Application.DisplayAlerts = False
        Cws.Delete
        Application.DisplayAlerts = True
    
        With Application
            .EnableEvents = True
            .ScreenUpdating = True
        End With
    End Sub
    
    Function RangetoHTML(rng As Range)
    ' Changed by Ron de Bruin 28-Oct-2006
    ' Working in Office 2000-2007
        Dim fso As Object
        Dim ts As Object
        Dim TempFile As String
        Dim TempWB As Workbook
    
        TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
    
        'Copy the range and create a new workbook to past the data in
        rng.Copy
        Set TempWB = Workbooks.Add(1)
        With TempWB.Sheets(1)
            .Cells(1).PasteSpecial Paste:=8
            .Cells(1).PasteSpecial xlPasteValues, , False, False
            .Cells(1).PasteSpecial xlPasteFormats, , False, False
            .Cells(1).Select
            Application.CutCopyMode = False
            On Error Resume Next
            .DrawingObjects.Visible = True
            .DrawingObjects.Delete
            On Error GoTo 0
        End With
    
        'Publish the sheet to a htm file
        With TempWB.PublishObjects.Add( _
             SourceType:=xlSourceRange, _
             Filename:=TempFile, _
             Sheet:=TempWB.Sheets(1).Name, _
             Source:=TempWB.Sheets(1).UsedRange.Address, _
             HtmlType:=xlHtmlStatic)
            .Publish (True)
        End With
    
        'Read all data from the htm file into RangetoHTML
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
        RangetoHTML = ts.ReadAll
        ts.Close
        RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                              "align=left x:publishsource=")
    
        'Close TempWB
        TempWB.Close savechanges:=False
    
        'Delete the htm file we used in this function
        Kill TempFile
        Set ts = Nothing
        Set fso = Nothing
        Set TempWB = Nothing
    End Function

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1