RangetoHTML stopped working

lburmz

New Member
Joined
May 16, 2019
Messages
1
Hi.
I use the RangetoHTML-Sub from rondebruin.nl to paste the selected range in Outlook. It has been working perfectly for months, but has suddenly stopped.

This is the code I have been using

Code:
Sub SendEmailToStores()


    Dim SendEmail   As Variant
    
    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object
    
    Dim strBody As String
    Dim strSignature As String


    Set rng = Nothing
    On Error Resume Next
    'Only the visible cells in the selection
    
    Worksheets("TEMP").Activate
    last_row = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
    last_col = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
    
    Set rng = Sheets("TEMP").Range(Cells(1, 1), Cells(last_row, last_col)).SpecialCells(xlCellTypeVisible)
'    Set rng = Sheets("TEMP").Range("A1:F3").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
    
    strBody = "Please will you order the following for us:" & "

"
    strSignature = "

" & "Thank you"
    
    SendEmail = MsgBox("Would you like to review the order email to stores before sending it?", vbYesNoCancel, "Review email")
        With OutMail
        .To = {email address}
        .CC = ""
        .BCC = ""
        .Subject = "Canine Genetics Order"
        .HTMLBody = strBody & RangetoHTML(rng) & strSignature
'        .HTMLBody = strBody & RangetoHTML(rng) & strSignature
            If SendEmail = vbCancel Then Exit Sub
            If SendEmail = vbYes Then
             'compile but don't send email
                .Display
            End If
            If SendEmail = vbNo Then
             'compile and send email
                .Send   'or use .Display
            End If
        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"
Debug.Print TempFile


    '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

By stepping over the code line by line I realised that it gets to this specific point in the RangetoHTML function, and then skips the rest of the function entirely, and continues with the SendEmailToStores subroutine.
Code:
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         Filename:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)

Does anyone have any ideas why this was working, and has suddenly stopped?
 

Some videos you may like

Excel Facts

How to calculate loan payments in Excel?
Use the PMT function: =PMT(5%/12,60,-25000) is for a $25,000 loan, 5% annual interest, 60 month loan.

Watch MrExcel Video

Forum statistics

Threads
1,114,084
Messages
5,545,867
Members
410,711
Latest member
Josh324
Top