Hi,
I am using a VBA code to create some emails based on an excel sheet where it gets filtered depending on the email recipient and after creating approximately 20 emails it does not show the recipient anymore. It does display the people in CC which are included in the code, but not the person in To which depends on an excel cell value.
This code does not run into an error, it just doesn’t complete the To field, but if I run in in break mode (with F8) it does work perfectly.
Could you please help me figure out why this happens?
Below the code:
I am using a VBA code to create some emails based on an excel sheet where it gets filtered depending on the email recipient and after creating approximately 20 emails it does not show the recipient anymore. It does display the people in CC which are included in the code, but not the person in To which depends on an excel cell value.
This code does not run into an error, it just doesn’t complete the To field, but if I run in in break mode (with F8) it does work perfectly.
Could you please help me figure out why this happens?
Below the code:
Code:
Sub MailingsRollOff() Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Dim StrBody As String
Dim StrBody2 As String
StrBody = "Olá," & "
" & _
"Verificamos que os seguintes profissionais baixo a sua liderança têm próximo as datas de desalocações." & "
" & _
"Poderia me confirmar se haverá alguma alteração?" & "
" & _
"Caso você não seja o gestor do profissional, por favor, solicito nos informe" & "
"
StrBody2 = "
" & "Obrigada," & "
"
Do While Not IsEmpty(Sheets("Mails").Range("A2"))
Sheets("Roll Off até 31-12").Range("A1:J1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.AutoFilter Field:=11, Criteria1:= _
Sheets("Mails").Range("A2")
Set rng = Nothing
On Error Resume Next
'Only the visible cells in the selection
Sheets("Roll Off até 31-12").Range("A1:J1").Select
Range(Selection, Selection.End(xlDown)).Select
Set rng = Selection.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
.Display
.To = Sheets("Mails").Range("A2")
.CC = "abc@abc.com;dce@abc.com"
.BCC = ""
.Subject = "Validação de Roll Off"
.HTMLBody = StrBody & RangetoHTML(rng) & StrBody2 & .HTMLBody
.Send 'o .Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
Sheets("Mails").Range("A2").Delete
Loop
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