Hello,
I hope this is ok in Excel, even though it relates to Outlook. Please move if more appropriate in Outlook.
I seem to be stuck. I have created email macros before using different email addresses in cells, added verbiage to the body of the email, attached files, etc. I need to do something a little different this time. I need to create emails to 1 email address (a constant) but based on a variable length spreadsheet that is subtotaled with varying lengths of information based on user name, and also the header into each email. I will then forward to the appropriate person from that email box. I know I have to import the data into the email in HTML format... but for the life of me I dont know where to start. I was never very good with arrays. This email macro is working to send populated cells in 1 email.
Ive searched the forum and Google and not finding what I need it to do. Attached is a sheet with some sample data. Please help?
Sub Mail_Sheet()
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Dim lastRow As Long
Dim Msg As String
Dim acct As Object
Dim sHello As String
Dim sBody1 As String
Dim i As Long: i = 2
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Set rng = Nothing
Set rng = ActiveSheet.UsedRange
'You can also use a sheet name
'Set rng = Sheets("YourSheet").UsedRange
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = "Receivers_Email"
.CC = ""
.BCC = ""
.Subject = "Subject of email"
.HTMLBody = RangetoHTML(rng)
.Display
'.Send 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)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2016
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