Email with rows included in VBA

pikepro92

New Member
Joined
Feb 14, 2019
Messages
10
Hi folks,

Bit of a VBA novice. Would be grateful if anyone can help with the code. I have data like the below and I want to send one email to each unique email address in column E, copying in the address in column B.

excel snip.PNG


In the body of the email, I want to have all the rows for that country like below:

capturetestsnip.PNG
 

Excel Facts

Did you know Excel offers Filter by Selection?
Add the AutoFilter icon to the Quick Access Toolbar. Select a cell containing Apple, click AutoFilter, and you will get all rows with Apple
Can you post your current code?
 
Upvote 0
Can you post your current code?


VBA Code:
Sub SendEm()
Dim i As Integer, Mail_Object, Email_Subject, o As Variant, lr As Long
lr = Cells(Rows.Count, "F").End(xlUp).Row
Set Mail_Object = CreateObject("Outlook.Application")
For i = 2 To lr
        With Mail_Object.CreateItem(o)
            .Subject = Range("L1").Value
            .To = Range("E" & i).Value
            .CC = Range("B" & i).Value
            .Body = Range("A:F").value
            .display
             
    End With
Next i
        MsgBox "E-mail successfully sent", 64
        Application.DisplayAlerts = False
Set Mail_Object = Nothing
End Sub
 
Upvote 0
Hi

I did similar here:

Here's the code modified for your table

HTML:
Sub Send_Table()

'Set email address as range for first loop to run down
Set rng = Range(Range("E2"), Range("E" & Rows.Count).End(xlUp))

'Get a row count to clear column H at the end
x = rng.Rows.Count

PgStart = "<html><body>"

'Create the html table and header from the first row
tableHdr = "<table border=1><tr><th>" & Range("A1").Value & "</th>" _
& "<th>" & Range("B1").Value & "</th>" _
& "<th>" & Range("C1").Value & "</th>" _
& "<th>" & Range("D1").Value & "</th>" _
& "<th>" & Range("E1").Value & "</th>" _
            & "<th>" & Range("F1").Value & "</th>" _

'Check to see if column G = 'yes' and skip mail if it does
For Each cell In rng
If cell.Value <> "" Then
    If Not cell.Offset(0, 2).Value = "yes" Then

      
    NmeRow = cell.Row

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.createitem(0)

    MailTo = cell.Value 'column E
mailcc = cell.Offset(0, -3).Value
MailSubject = "Subject?"

'Create MailBody table row for first row
MailBody = "<tr>" _
& "<td>" & cell.Offset(0, -4).Value & "</td>" _
& "<td>" & cell.Offset(0, -3).Value & "</td>" _
& "<td>" & cell.Offset(0, -2).Value & "</td>" _
& "<td>" & cell.Offset(0, -1).Value & "</td>" _
& "<td>" & cell.Value & "</td>" _
& "<td>" & cell.Offset(0, 1).Value & "</td>" _
            & "</tr>"

'Second loop checks the email addresses of all cells following the current cell in the first loop.
'Yes will be appended on any duplicate finds and another row added to the mailbody table
    For Each dwn In rng.Offset(NmeRow - 1, 0)



    If dwn.Value = cell.Value Then

'Create additional table row for each extra row found
AddRow = "<tr>" _
& "<td>" & dwn.Offset(0, -4).Value & "</td>" _
& "<td>" & dwn.Offset(0, -3).Value & "</td>" _
& "<td>" & dwn.Offset(0, -2).Value & "</td>" _
& "<td>" & dwn.Offset(0, -1).Value & "</td>" _
& "<td>" & dwn.Value & "</td>" _
& "<td>" & dwn.Offset(0, 1).Value & "</td>" _
            & "</tr>"

    dwn.Offset(0, 2).Value = "yes"
    MailBody = MailBody & AddRow  'column A

    End If
' Clear additional table row variable ready for next
AddRow = ""
Next

MsgStr = "<p>Dear " & cell.Offset(0, 1).Value & "<br><br>" _
& "Please see below</p><br>"

With OutMail
.To = MailTo
.CC=mailcc
.Subject = MailSubject
.HTMLBody = PgStart & MsgStr & tableHdr & MailBody & "</table></body></html>"
.Display
'send
End With

cell.Offset(0, 2).Value = "yes"

End If
End If


MailTo = ""
MailSubject = ""
MailBody = ""
Next

'Clear 'yes' from all appended cells in column H
Range("G2:G" & x + 1).ClearContents
End Sub
 
Upvote 0
Hi

I did similar here:

Here's the code modified for your table

HTML:
Sub Send_Table()

'Set email address as range for first loop to run down
Set rng = Range(Range("E2"), Range("E" & Rows.Count).End(xlUp))

'Get a row count to clear column H at the end
x = rng.Rows.Count

PgStart = "<html><body>"

'Create the html table and header from the first row
tableHdr = "<table border=1><tr><th>" & Range("A1").Value & "</th>" _
& "<th>" & Range("B1").Value & "</th>" _
& "<th>" & Range("C1").Value & "</th>" _
& "<th>" & Range("D1").Value & "</th>" _
& "<th>" & Range("E1").Value & "</th>" _
            & "<th>" & Range("F1").Value & "</th>" _

'Check to see if column G = 'yes' and skip mail if it does
For Each cell In rng
If cell.Value <> "" Then
    If Not cell.Offset(0, 2).Value = "yes" Then

     
    NmeRow = cell.Row

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.createitem(0)

    MailTo = cell.Value 'column E
mailcc = cell.Offset(0, -3).Value
MailSubject = "Subject?"

'Create MailBody table row for first row
MailBody = "<tr>" _
& "<td>" & cell.Offset(0, -4).Value & "</td>" _
& "<td>" & cell.Offset(0, -3).Value & "</td>" _
& "<td>" & cell.Offset(0, -2).Value & "</td>" _
& "<td>" & cell.Offset(0, -1).Value & "</td>" _
& "<td>" & cell.Value & "</td>" _
& "<td>" & cell.Offset(0, 1).Value & "</td>" _
            & "</tr>"

'Second loop checks the email addresses of all cells following the current cell in the first loop.
'Yes will be appended on any duplicate finds and another row added to the mailbody table
    For Each dwn In rng.Offset(NmeRow - 1, 0)



    If dwn.Value = cell.Value Then

'Create additional table row for each extra row found
AddRow = "<tr>" _
& "<td>" & dwn.Offset(0, -4).Value & "</td>" _
& "<td>" & dwn.Offset(0, -3).Value & "</td>" _
& "<td>" & dwn.Offset(0, -2).Value & "</td>" _
& "<td>" & dwn.Offset(0, -1).Value & "</td>" _
& "<td>" & dwn.Value & "</td>" _
& "<td>" & dwn.Offset(0, 1).Value & "</td>" _
            & "</tr>"

    dwn.Offset(0, 2).Value = "yes"
    MailBody = MailBody & AddRow  'column A

    End If
' Clear additional table row variable ready for next
AddRow = ""
Next

MsgStr = "<p>Dear " & cell.Offset(0, 1).Value & "<br><br>" _
& "Please see below</p><br>"

With OutMail
.To = MailTo
.CC=mailcc
.Subject = MailSubject
.HTMLBody = PgStart & MsgStr & tableHdr & MailBody & "</table></body></html>"
.Display
'send
End With

cell.Offset(0, 2).Value = "yes"

End If
End If


MailTo = ""
MailSubject = ""
MailBody = ""
Next

'Clear 'yes' from all appended cells in column H
Range("G2:G" & x + 1).ClearContents
End Sub


thanks that works great. Any ideas how i would keep the conditional formatting of the cells? It's the fill colour i want to keep
 
Upvote 0
Hi,

Maybe I should have realised you wanted the formatting from the pictures....My bad
Totally different code as I need to use Ron De Bruin's RangetoHTML function, which will copy across the formatting

The assumption is that only 6 columns are used A to F and that "Sheet1" is the content in your pics. Change occurances of the sheet name if not

The macro:
adds a sheet called MailBody - checks for and deletes the sheet if found before adding it so the status is always known from the off.
copies rows with same address to it
Autofits the rows
Uses the range on the new sheet for the email
Deletes all rows except the header for MailBody
does the next mail
repeat
Deletes MailBody when all mails sent
Clears all Yes indications

Code:
Sub Send_Table_2()

Dim MailBody As Range

Set mWs = Worksheets("Sheet1")

'If MailBody sheet already exists then delete it
If WorksheetExists("MailBody") Then
Application.DisplayAlerts = False
Worksheets("MailBody").Delete
Application.DisplayAlerts = True
End If

'Add a sheet to copy all same person rows to
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "MailBody"

'Copy the header
   mWs.Rows(1).Copy Destination:=Worksheets("MailBody").Range("A1")

'Return to the mail content sheet
   mWs.Activate

'Set email address as range for first loop to run down
Set rng = Range(Range("E2"), Range("E" & Rows.Count).End(xlUp))

'Get a row count to clear column H at the end
  i = rng.Rows.Count


For Each cell In rng
If cell.Value <> "" Then
If Not cell.Offset(0, 2).Value = "yes" Then

'Get the row number
cRow = cell.Row

'Copy the row to the first empty row in the MailBody sheet
mWs.Range("A" & cRow, "F" & cRow).Copy Destination:=Sheets("MailBody").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)

MailTo = cell.Value 'column E
mailcc = cell.Offset(0, -3).Value
MailSubject = "Subject?"
    

'Second loop checks the email addresses of all cells following the current cell in the first loop.
'Yes will be appended on any duplicate finds and another row added to the MailBody sheet
    For Each dwn In rng.Offset(cRow - 1, 0)

    If dwn.Value = cell.Value Then

    dwn.Offset(0, 2).Value = "yes"

'Create additional table row for each extra row found
mWs.Range("A" & cRow, "F" & cRow).Copy Destination:=Sheets("MailBody").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)

    End If

    Next

'Autofit the copied rows on the new sheet, otherwise they'll be copied to the mail with defaults widths, heights
    With Worksheets("MailBody")
    lRow = .Range("A" & .Rows.Count).End(xlUp).Row
Set MailBody = .Range(.Cells(1, 1), .Cells(lRow, 6))
    .Range("A1:F2").Columns.AutoFit
End With

'Add mail intro
MsgStr = "Dear " & cell.Offset(0, 1).Value _
& "<br><br> Please see below"

'Create mail
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.createitem(0)

With OutMail
.To = MailTo
.CC = mailcc
.Subject = MailSubject
.HTMLBody = MsgStr & RangetoHTML(MailBody)
.Display
'send
End With

cell.Offset(0, 2).Value = "yes"

'Clear the MailBody rows up to the header
With Worksheets("MailBody")
.Range("A2:F" & .Cells(.Rows.Count, "A").End(xlUp).Row).ClearContents
End With

End If
End If

MailTo = ""
MailSubject = ""
Next

'Clear 'yes' from column G
Range("G2:G" & i + 1).ClearContents

'Delete MailBody sheet
Application.DisplayAlerts = False
Worksheets("MailBody").Delete
Application.DisplayAlerts = True
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 -4163, , False, False
.Cells(1).PasteSpecial -4122, , 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:=4, _
filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=0)
.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

'Does the worksheet exists
Function WorksheetExists(WSName) As Boolean
On Error Resume Next
WorksheetExists = Worksheets(WSName).Name = WSName
On Error GoTo 0
    End Function
 
Upvote 0
Macro using autofilter instead of 2 loops

Code:
Sub Send_Table_autofilter()

Dim MailBody As Range
Dim dwn As Range

'Added for testing purposes
  ActiveSheet.AutoFilterMode = False

Set mWs = Worksheets("Sheet1")

'If MailBody sheet already exists then delete it
If WorksheetExists("MailBody") Then
Application.DisplayAlerts = False
Worksheets("MailBody").Delete
Application.DisplayAlerts = True
End If

'Add a sheet to copy all same person rows to
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "MailBody"

'Copy the header
   mWs.Rows(1).Copy Destination:=Worksheets("MailBody").Range("A1")

'Return to the mail content sheet
   mWs.Activate

'Set email address as range for first loop to run down
Set rng = Range(Range("E2"), Range("E" & Rows.Count).End(xlUp))

'Get a row count to clear column H at the end
  i = rng.Rows.Count


For Each cell In rng
If cell.Value <> "" Then
If Not cell.Offset(0, 2).Value = "yes" Then

Worksheets("Sheet1").Range("A1").AutoFilter Field:=5, Criteria1:=cell.Value

With ActiveSheet.AutoFilter.Range.Offset(1, 0)
.Copy Sheets("MailBody").Range("A2")
End With

'Use visible cells property so only autofiltered cell rows are changed
For Each dwn In rng.SpecialCells(xlCellTypeVisible)
rng.Offset(0, 2).Value = "yes"
Next

'Turn off autofilter
ActiveSheet.AutoFilterMode = False

'Mail header parameters
MailTo = cell.Value 'column E
mailcc = cell.Offset(0, -3).Value
MailSubject = "Subject?"
    

'Autofit the copied rows on the new sheet
    With Worksheets("MailBody")

    lRow = .Range("A" & .Rows.Count).End(xlUp).Row
Set MailBody = .Range(.Cells(1, 1), .Cells(lRow, 6))
    .Range("A1:F2").Columns.AutoFit

  End With


'Add mail intro
MsgStr = "Dear " & cell.Offset(0, 1).Value _
& "<br><br> Please see below"

'Create mail
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.createitem(0)

With OutMail
.To = MailTo
.CC = mailcc
.Subject = MailSubject
.HTMLBody = MsgStr & RangetoHTML(MailBody)
.Display
'send
End With

cell.Offset(0, 2).Value = "yes"

'Clear the MailBody rows up to the header
With Worksheets("MailBody")
.Range("A2:F" & .Cells(.Rows.Count, "A").End(xlUp).Row).ClearContents
End With

End If
End If


MailTo = ""
MailSubject = ""
Next

'Clear 'yes' from column G
Range("G2:G" & i + 1).ClearContents

'Delete MailBody sheet
Application.DisplayAlerts = False
Worksheets("MailBody").Delete
Application.DisplayAlerts = True
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 -4163, , False, False
.Cells(1).PasteSpecial -4122, , 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:=4, _
filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=0)
.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

'Does the worksheet exists
Function WorksheetExists(WSName) As Boolean
On Error Resume Next
WorksheetExists = Worksheets(WSName).Name = WSName
On Error GoTo 0
End Function
 
Upvote 0
Hi

I did similar here:

Here's the code modified for your table

HTML:
Sub Send_Table()

'Set email address as range for first loop to run down
Set rng = Range(Range("E2"), Range("E" & Rows.Count).End(xlUp))

'Get a row count to clear column H at the end
x = rng.Rows.Count

PgStart = "<html><body>"

'Create the html table and header from the first row
tableHdr = "<table border=1><tr><th>" & Range("A1").Value & "</th>" _
& "<th>" & Range("B1").Value & "</th>" _
& "<th>" & Range("C1").Value & "</th>" _
& "<th>" & Range("D1").Value & "</th>" _
& "<th>" & Range("E1").Value & "</th>" _
            & "<th>" & Range("F1").Value & "</th>" _

'Check to see if column G = 'yes' and skip mail if it does
For Each cell In rng
If cell.Value <> "" Then
    If Not cell.Offset(0, 2).Value = "yes" Then

     
    NmeRow = cell.Row

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.createitem(0)

    MailTo = cell.Value 'column E
mailcc = cell.Offset(0, -3).Value
MailSubject = "Subject?"

'Create MailBody table row for first row
MailBody = "<tr>" _
& "<td>" & cell.Offset(0, -4).Value & "</td>" _
& "<td>" & cell.Offset(0, -3).Value & "</td>" _
& "<td>" & cell.Offset(0, -2).Value & "</td>" _
& "<td>" & cell.Offset(0, -1).Value & "</td>" _
& "<td>" & cell.Value & "</td>" _
& "<td>" & cell.Offset(0, 1).Value & "</td>" _
            & "</tr>"

'Second loop checks the email addresses of all cells following the current cell in the first loop.
'Yes will be appended on any duplicate finds and another row added to the mailbody table
    For Each dwn In rng.Offset(NmeRow - 1, 0)



    If dwn.Value = cell.Value Then

'Create additional table row for each extra row found
AddRow = "<tr>" _
& "<td>" & dwn.Offset(0, -4).Value & "</td>" _
& "<td>" & dwn.Offset(0, -3).Value & "</td>" _
& "<td>" & dwn.Offset(0, -2).Value & "</td>" _
& "<td>" & dwn.Offset(0, -1).Value & "</td>" _
& "<td>" & dwn.Value & "</td>" _
& "<td>" & dwn.Offset(0, 1).Value & "</td>" _
            & "</tr>"

    dwn.Offset(0, 2).Value = "yes"
    MailBody = MailBody & AddRow  'column A

    End If
' Clear additional table row variable ready for next
AddRow = ""
Next

MsgStr = "<p>Dear " & cell.Offset(0, 1).Value & "<br><br>" _
& "Please see below</p><br>"

With OutMail
.To = MailTo
.CC=mailcc
.Subject = MailSubject
.HTMLBody = PgStart & MsgStr & tableHdr & MailBody & "</table></body></html>"
.Display
'send
End With

cell.Offset(0, 2).Value = "yes"

End If
End If


MailTo = ""
MailSubject = ""
MailBody = ""
Next

'Clear 'yes' from all appended cells in column H
Range("G2:G" & x + 1).ClearContents
End Sub
This works really well. Sorry to be a pain but if I wanted it to grab the same rows as this does but add them as an attachment rather than in the email body how could i do that?
 
Upvote 0
Can't do that with the macro that creates an the HTML table from the cell content. So the following doesn't need the RangetoHTML function.

I have to use the autofilter macro above your post but modified to place the rows in a new workbook for attaching.
Try this to see if it works.
It should attach a file based on the macro workbook name + the date. The attached files are hard coded to be .xlsx
I used your table in the initial post for testing it.

Code:
Sub Autofilter_1()

Dim MailBody As Range

'Turn Off autofilter if on
  ActiveSheet.AutoFilterMode = False

Set mWs = ThisWorkbook.Worksheets("Sheet1")

'Get this workbook name to name the attachment as this workbook and date
 Nme = (Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5))

'Set email address as range for first loop to run down
    Set rng = Range(Range("E2"), Range("E" & Rows.Count).End(xlUp))


For Each cell In rng
If cell.Value <> "" Then
If Not cell.Offset(0, 2).Value = "yes" Then

'Add New Workbook
    Set MailWb = Workbooks.Add
    
'Activate the main page and filter
    mWs.Activate
    Worksheets("Sheet1").Range("A1").AutoFilter Field:=5, Criteria1:=cell.Value

'Copy the filter rows to the new workbook including the header
    With ActiveSheet.AutoFilter.Range.Offset(0, 0)
    .Copy MailWb.Worksheets("Sheet1").Range("A1")
    End With

'Use visible cells property so only autofiltered cell rows are changed
    For Each dwn In rng.SpecialCells(xlCellTypeVisible)
    rng.Offset(0, 2).Value = "yes"
    Next

'Turn off autofilter
    ActiveSheet.AutoFilterMode = False

'Mail header parameters
    MailTo = cell.Value 'column E
    mailcc = cell.Offset(0, -3).Value
    MailSubject = "Subject?"
    

'Autofit the copied rows on the new sheet
    With MailWb.Worksheets("Sheet1")

    lRow = .Range("A" & .Rows.Count).End(xlUp).Row
    Set mailRng = .Range(.Cells(1, 1), .Cells(lRow, 6))
    .Range("A1:F2").Columns.AutoFit

  End With


'Add mail intro
    MsgStr = "Hi" & cell.Offset(0, 1).Value _
    & "<br><br> Please see attached "


 'Save the new workbook as an xlsx file
    TempFilePath = Environ$("temp") & "\"
    TempFileName = Nme & " " & Format(Now, "dd-mmm-yy h-mm-ss") & ".xlsx"
    
    
'Add mail intro
    MsgStr = "Hi" & cell.Offset(0, 1).Value _
    & vbNewLine & vbNewLine & "Please see attached: " _
    & vbNewLine & TempFileName
    
'Create mail
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

 With MailWb
        .SaveAs TempFilePath & TempFileName, FileFormat:=51
        On Error Resume Next
        With OutMail
            .to = MailTo
            .CC = mailcc
            .BCC = ""
            .Subject = MailSubject
            .Body = MsgStr
            .Attachments.Add MailWb.FullName
            .Display
            '.Send   'or use .Display
        End With
        On Error GoTo 0
        .Close savechanges:=False
    End With

'Delete the file you have sent
    Kill TempFilePath & TempFileName & FileExtStr

End If
End If


MailTo = ""
MailSubject = ""
Next

End Sub
 
Upvote 0

Forum statistics

Threads
1,215,361
Messages
6,124,497
Members
449,166
Latest member
hokjock

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