VBA Code to create Outlook mail not completing To field after 20(aprox) emails

Sepop

New Member
Joined
Jun 30, 2014
Messages
22
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:

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
 

Excel Facts

Show numbers in thousands?
Use a custom number format of #,##0,K. Each comma after the final 0 will divide the displayed number by another thousand
.
Try change this :

Code:
 Sheets("Mails").Range("A2").Delete
     
    Loop


To this :

Code:
    Loop

 Sheets("Mails").Range("A2").Delete


????
 
Upvote 0
.
Try change this :

Code:
 Sheets("Mails").Range("A2").Delete
     
    Loop


To this :

Code:
    Loop

 Sheets("Mails").Range("A2").Delete


????

The thing is that in Sheets("Mails").Range("A2") is where the criteria to the To is. Thats why I delete that line (the email that I already created) and then follow with the next recepient!
 
Upvote 0

Forum statistics

Threads
1,223,898
Messages
6,175,272
Members
452,628
Latest member
dd2

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top