+ Reply to Thread
Results 1 to 7 of 7

Copy Multiple Ranges from Excel to Outlook

Hybrid View

  1. #1
    Forum Contributor
    Join Date
    01-05-2010
    Location
    New York
    MS-Off Ver
    Excel 2016
    Posts
    747

    Copy Multiple Ranges from Excel to Outlook

    I have the following code that copies the excel range D20:E28 to an outlook email. How can I modify the code to also seperatly copy the excel range D14:G17 to the same outlook email?

    Any help would be great! thanks


    
    Sub Mail_Selection_Range_Outlook_Body()
    
        Dim rng As Range
        Dim OutApp As Object
        Dim OutMail As Object
    
        Set rng = Nothing
        On Error Resume Next
        'Only the visible cells in the selection
        Set rng = Selection.SpecialCells(xlCellTypeVisible)
        'You can also use a range if you want
        Set rng = Sheets("Output").Range("D20:E28").SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
    
        If rng Is Nothing Then
            MsgBox "The selection is not a range or the sheet is protected" & _
                   vbNewLine & "please correct and try again.", vbOKOnly
            Exit Sub
        End If
    
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
    
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
    
        On Error Resume Next
        With OutMail
            .To = "randall.hudgins@slk.com"
            .CC = ""
            .BCC = ""
            .Subject = "Trading Recap"
            .HTMLBody = RangetoHTML(rng)
            .Display   'or use .Display
        End With
        On Error GoTo 0
    
        With Application
            .EnableEvents = True
            .ScreenUpdating = True
        End With
    
        Set OutMail = Nothing
        Set OutApp = Nothing
    End Sub
    Function RangetoHTML(rng As Range)
    
        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

  2. #2
    Forum Expert
    Join Date
    12-23-2006
    Location
    germany
    MS-Off Ver
    XL2003 / 2007 / 2010
    Posts
    6,326

    Re: Copy Multiple Ranges from Excel to Outlook

    Hi maybe this addin by Ron de Bruin would help

  3. #3
    Forum Contributor
    Join Date
    01-05-2010
    Location
    New York
    MS-Off Ver
    Excel 2016
    Posts
    747

    Re: Copy Multiple Ranges from Excel to Outlook

    That works for copying single ranges. I would like to be able to copy multiple ranges with the click of a button

  4. #4
    Forum Expert snb's Avatar
    Join Date
    05-09-2010
    Location
    VBA
    MS-Off Ver
    Redhat
    Posts
    5,649

    Re: Copy Multiple Ranges from Excel to Outlook

    Wouldn't this be sufficient
    Sub Mail_Selection_Range_Outlook_Body()
      With Application
        .EnableEvents = False
        .ScreenUpdating = False
    
        With Workbooks.Add
          .Sheets(1).Range("D20:E28") = ThisWorkbook.Sheets(1).Range("D20:E28").Value
          .Sheets(1).Range("D40:E58") = ThisWorkbook.Sheets(1).Range("D40:E58").Value
          .SaveAs "C:\test.htm", xlHtml
          .Close False
        End With
    
        With CreateObject("Outlook.Application").CreateItem(0)
          .To = "randall.hudgins@slk.com"
          .Subject = "Trading Recap"
          .htmlbody = "C:\test.htm"
          .Send
        End With
    
       .EnableEvents = True
       .ScreenUpdating = True
      End With
    End Sub



  5. #5
    Forum Contributor
    Join Date
    01-05-2010
    Location
    New York
    MS-Off Ver
    Excel 2016
    Posts
    747

    Re: Copy Multiple Ranges from Excel to Outlook

    The code you just gave me doesn't copy the data from the excel sheet to outlook. It is copying the string "C:\test.htm" to the body of the email. Any reasons why?

  6. #6
    Forum Expert snb's Avatar
    Join Date
    05-09-2010
    Location
    VBA
    MS-Off Ver
    Redhat
    Posts
    5,649

    Re: Copy Multiple Ranges from Excel to Outlook

    This is better:
    Sub Mail_Selection_Range_Outlook_Body()
      With Application
        .EnableEvents = False
        .ScreenUpdating = False
        .DisplayAlerts=False
    
        With Workbooks.Add
          .Sheets(1).Range("D20:E28").Value = ThisWorkbook.Sheets(1).Range
    ("D20:E28").Value
          .Sheets(1).Range("D40:E58").Value = ThisWorkbook.Sheets(1).Range
    ("D40:E58").Value
          .SaveAs "C:\test.htm", xlHtml
          .Close False
        End With
    
        With CreateObject("Outlook.Application").CreateItem(0)
          .To = "randall.hudgins@slk.com"
          .Subject = "Trading Recap"
          Open "C:\test.htm" For Input As #1
             .htmlbody = Input(LOF(1), #1)
          Close #1
          .Send
        End With
    
        .DisplayAlerts=True
        .EnableEvents = True
        .ScreenUpdating = True
      End With
    End Sub
    Last edited by snb; 09-16-2010 at 06:18 PM.

  7. #7
    Forum Contributor
    Join Date
    01-05-2010
    Location
    New York
    MS-Off Ver
    Excel 2016
    Posts
    747

    Re: Copy Multiple Ranges from Excel to Outlook

    After running this macro I am getting a message "This page uses frames, but your browser doesn't support them." I have looked online for a solution to this issue but have not been able to find one. Do you know how to change my setting to support frames?

+ 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