Export to a HTML-file

 1999-10-13    Import & Export    0    319

With the macro below you can export values or formulas from a worksheet range to a HTML-file:

Sub ExportRangeAsHTML(SourceRange As Range, TargetFile As String, _
    TableSize As String, UseRangeColumnWidths As Boolean, _
    TableBorderSize As Integer, CellPadding As Integer, _
    CellSpacing As Integer, IncludeEmptyCells As Boolean)
' Exports the data in SourceRange to the textfile TargetFile in HTML format
' Example:     ExportRangeAsHTML Range("A3:E23"), "C:\FolderName\HtmlText.htm", "", True, 1, 5, 0, True
Dim A As Integer, r As Long, c As Integer, totr As Long, pror As Long
Dim fn As Integer, LineString As String, tLine As String, CellColumnWidth As Long
Dim BoldCell As Boolean, ItalicCell As Boolean, CellAlignment As Integer
    ' validate the input data if necessary
    If SourceRange Is Nothing Then Exit Sub
    If Len(TargetFile) = 0 Then Exit Sub
    If Application.WorksheetFunction.CountA(SourceRange) = 0 Then
        If Not IncludeEmptyCells Then Exit Sub
    End If
    On Error Resume Next
    Kill TargetFile
    On Error GoTo 0
    If Len(Dir(TargetFile)) > 0 Then
        MsgBox TargetFile & " already exists, rename, move or delete the file before you try again.", vbInformation, "Export range to textfile"
        Exit Sub
    End If
    
    ' perform export
    On Error GoTo NotAbleToExport
    fn = FreeFile
    Open TargetFile For Append As #fn ' open textfile for new input
    On Error GoTo 0
    ' determine the total number of rows to process
    totr = 0
    For A = 1 To SourceRange.Areas.Count
        totr = totr + SourceRange.Areas(A).Rows.Count
    Next A
    ' start the HTML file
    Print #fn, "<html>"
    Print #fn, "<head>"
    Print #fn, "<meta name=""DESCRIPTION"" content=""Description of content"">"
    Print #fn, "<meta name=""KEYWORDS"" content=""Keywords"">"
    Print #fn, "<title>Range to HTML from " & ActiveWorkbook.Name & "</title>"
    Print #fn, "</head>"
    Print #fn,
    Print #fn, "<body>"
    Print #fn, "<h1>Range to HTML from " & ActiveWorkbook.Name & "</h1>"
    Print #fn,
    If TableSize = "" Then
        Print #fn, "<table border=""" & TableBorderSize & """ cellpadding=""" & CellPadding & """ cellspacing=""" & CellSpacing & """>"
    Else
        Print #fn, "<table border=""" & TableBorderSize & """ cellpadding=""" & CellPadding & """ cellspacing=""" & CellSpacing & """ width=""" & TableSize & """>"
    End If
    ' start writing the HTML-file
    pror = 0
    For A = 1 To SourceRange.Areas.Count
        For r = 1 To SourceRange.Areas(A).Rows.Count
            If pror Mod 50 = 0 Then
                Application.StatusBar = "Writing the HTML-file " & Format(pror / totr, "0 %") & "..."
            End If
            Print #fn, "  <tr>"
            For c = 1 To SourceRange.Areas(A).Columns.Count
                LineString = "    "
                CellAlignment = 0
                tLine = ""
                On Error Resume Next
                With SourceRange.Areas(A).Cells(r, c)
                    tLine = Trim(.Text)
                    BoldCell = .Font.Bold
                    ItalicCell = .Font.Italic
                    CellAlignment = .HorizontalAlignment
                End With
                On Error GoTo 0
                If (tLine = "" Or tLine = " ") And IncludeEmptyCells Then tLine = " "
                If tLine <> "" Then
                    LineString = LineString & "<td"
                    If UseRangeColumnWidths Then
                        CellColumnWidth = CLng(Cells(1, c + 1).Left - Cells(1, c).Left)
                        LineString = LineString & " width=""" & CellColumnWidth & """"
                    End If
                    If CellAlignment = xlHAlignGeneral Then
                        Select Case Asc(tLine)
                            Case 45, 48 To 57
                                CellAlignment = xlHAlignRight
                        End Select
                    End If
                    If CellAlignment = xlHAlignCenter Then LineString = LineString & " align=""center"""
                    If CellAlignment = xlHAlignRight Then LineString = LineString & " align=""right"""
                    LineString = LineString & ">"
                    If BoldCell Then LineString = LineString & "<b>"
                    If ItalicCell Then LineString = LineString & "<i>"
                    LineString = LineString & tLine
                    If ItalicCell Then LineString = LineString & "</i>"
                    If BoldCell Then LineString = LineString & "</b>"
                    LineString = LineString & "</td>"
                    Print #fn, LineString
                End If
            Next c
            Print #fn, "  </tr>"
            pror = pror + 1
        Next r
    Next A
    ' end the HTML file
    Print #fn, "</table>"
    Print #fn,
    Print #fn, "</body>"
    Print #fn, "</html>"
    Close #fn ' close the targetfile
NotAbleToExport:
    Set SourceRange = Nothing
    Application.StatusBar = False
End Sub