Why is the email that VBA is generating not keeping the same font color i have in my excel sheet when copy & pasting? -

admin2025-04-18  1

This is the code (i know there's a lot of unecessary stuff) but my range from E13:H24 is a variety of colors from conditional formatting forumulas, but theyre not appearing correctly in the email generated when i run my vba code. Cant figure out where its broken.

Sub EMAIL()
    'For Tips see: .htm
    'Don't forget to copy the function RangetoHTML in the module.
    'Working in Excel 2000-2016
        Dim rng As Range, cl As Range, emailRng As Range
        Dim OutApp As Object
        Dim OutMail As Object
        Dim count_row, count_col As Integer
        Dim sTo As String
        
    
    count_row = WorksheetFunction.CountA(Range("A1", Range("A1").End(xlDown)))
    count_col = WorksheetFunction.CountA(Range("A1", Range("A1").End(xlToRight)))
    
        Set rng = Nothing
        On Error Resume Next
        'Only the visible cells in the selection
        'Set rng = Selection.SpecialCells(xlCellTypeVisible)
        'You can also use a fixed range if you want
        Set rng = Sheets("Sheet1").Range("E12:I24")
        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)
    
        str1 = "<Body style = font-size:12pt;font-family:calibri>" & "Morning,         <br><br> Please see the table below.<br>"
    
        str2 = "<br> Thank you!"
    
        On Error Resume Next
                
        'Set emailRng = Worksheets("Sheet 1").Range("B7:B9")
    
        'For Each cl In emailRng
            'sTo = sTo & ";" & cl.Value
        'Next
    
        'sTo = Mid(sTo, 2)
            
        
        With OutMail
            .To = Range("B7")
            .CC = Range("B9")
            .BCC = Range("B8")
            .Subject = Range("B6") & " " & Range("B1")
            .HTMLBody = "Executed the below for " & Range("B2") & "," & vbNewLine & vbNewLine & RangetoHTML(rng) & str2
            .Display   'or use .Send
        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


the cells in column E determine the color of the remainder of columns in the range, it appears correctly in my sheet, just not in the email.

转载请注明原文地址:http://anycun.com/QandA/1744909592a89341.html