Set of VBA Macros to Convert Microsoft Word for Windows documents to simple HTML

Description

On the face of it there's little more pointless than a set of macros to turn MS Word documents into html when the functionality is built into MS Word anyway. However I still find these useful. They are *extremely* limited in what they do and produce the simplest of html, discarding almost all formatting and other enhancements. And that is precisely the point. I like to have a lot of control of my html, so all that these macros do is to put Word Heading1 to Heading6 styles in h1 to h6 tags, convert Word tables to unformatted html tables, bring Word footnotes and endnotes into the main document and handle a couple of entity conversions I find useful. Everything else is discarded. It also doesn't produce an html document, just converts your current page so you can paste it into your chosen html editor and add details of style sheets and so on.

I must apologise for the code. This is particularly rough and ready stuff, poorly commented and very crude - mostly just simple recordings of manually converting part of the text and then tidying it up later and adding loops and so on. Its not very elegant. You could do better. Even *I* could do better, but I don't seem to need to. It's roughly in Word 2013 status, but most of it was written in Word 97 VBA. You'll also see that sometimes I have just repeated blocks of almost identical code in line when it might be more elegant to have used more functions and make the code a little more objectified. Laziness I'm afraid.

To use the macro suite paste the whole code section into an appropriate word template, either your main personal macro template, or else a custom one you will use for word conversions. From there you could edit the ribbon to add buttons for one or more macros, or you could simply run the macro manually. HTMLConversion is the main macro that runs all the others to convert your current on screen document, and if I were you I'd have a button on the toolbar for that. I find I often use crstrip for all sorts of odd jobs so I suggest you have a button for that as well. Apart from that you might find the table conversion of use on its own, but I don't think I've ever wanted to call any of the others separately.

You are probably best off taking this and using it in part and extending it in part. Portions of this code have had various roles over the years, including at one stage what amounted to a primitive CMS which handled many more html tags than are included here. However what you have here is what meets my needs now. If, as is likely, you want to do a few more wrd formatting options then I suggest you take a look at the way superscript is handled and do something similar for other styles that you need to do. These days though I am much more likely to use CSS styles than the simple basic html tags that this was designed to produce, and I'd recommend you do the same.

I must also give credit to someone whose name I have forgotten. Back in the mid 1990s I downloaded a set of wordbasic macros which converted Word files to html. I am quite confident that every last vestige of that code is long gone, and I deliberately rewrote them all from scratch into VBA for Word 97, but that download gave me the original inspiration. Whoever you were: thank you, and apologies for forgetting your name. I can't pay you back, so this is the pay forward.

I've presented this as a code secton rather than a download. I think its all translated properly for that presentation, but if you try it and find any problems please let me know.

Change History

  1. March 2014 - Initial Public Release

Code

Option Explicit
'University of Illinois/NCSA Open Source License
'Copyright (c) 1995-2014 Jim Champ
'All rights reserved.
'Jim's WordHTM
'Developed by:      Jim Champ
'Permission is hereby granted, free of charge, to any person obtaining a
'copy of this software and associated documentation files (the "Software"),
'to deal with the Software without restriction, including without
'limitation the rights to use, copy, modify, merge, publish, distribute,
'sublicense, and/or sell copies of the Software, and to permit persons to
'whom the Software is furnished to do so, subject to the following
'conditions:
' * Redistributions of source code must retain the above copyright
'   notice, this list of conditions and the following disclaimers.
' * Redistributions in binary form must reproduce the above copyright
'   notice, this list of conditions and the following disclaimers in the
'   documentation and/or other materials provided with the distribution.
' * Neither the names of Jim Champ,
'   nor the names of its contributors may be used to endorse or promote
'   products derived from this Software without specific prior written
'   permission.
'   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
'   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
'   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
'   IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR
'   ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
'   CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
'   THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE.
Sub CRStrip()
'
' crstrip Macro
' Macro recorded 17/10/05 by Jim Champ
' This macro takes single carriage returns out of a document but retains
' double carriage returns. Quite useful for reading taxt documents as well as the html suite

'
    Dim StripRange As Range
    Set StripRange = ActiveDocument.Range(Start:=0, End:=ActiveDocument.Range.End)
    StripRange.Find.ClearFormatting
    StripRange.Find.Replacement.ClearFormatting
    With StripRange.Find
        .Text = "^l"
        .Replacement.Text = "^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    StripRange.Find.Execute Replace:=wdReplaceAll
    With StripRange.Find
        .Text = "^p^p"
        .Replacement.Text = "~~~~"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    StripRange.Find.Execute Replace:=wdReplaceAll
    With StripRange.Find
        .Text = "^p"
        .Replacement.Text = " "
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    StripRange.Find.Execute Replace:=wdReplaceAll
    With StripRange.Find
        .Text = "~~~~"
        .Replacement.Text = "^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    StripRange.Find.Execute Replace:=wdReplaceAll
    ActiveWindow.ActivePane.LargeScroll Down:=-1
    ActiveWindow.ActivePane.LargeScroll Down:=1
End Sub



Sub HTMLConversion()
    HTMLEntities
    
    HTMLFootnoteConversion
    
    HTMLEndNoteConversion
    
    HTMLTables
    
    HTMLSuperscript
    
    HTMLStylesfromWord
    
    HtmlTidyUp
End Sub

Sub HTMLTables()
    Dim ActionComplete As Integer
    Dim rngWorkingTableArea As Range
    
    'start at the beginning
    Selection.HomeKey Unit:=wdStory
    'find a table
    Selection.GoTo what:=wdGoToTable, Which:=wdGoToNext, Count:=1, Name:=""
    ActionComplete = 0
    While ActionComplete = 0
        On Error GoTo NoMoreTables
        
        'Select our current table and define it as a named range
        Selection.Tables(1).Select
        Set rngWorkingTableArea = Selection.Range
        
        rngWorkingTableArea.Tables(1).Select
        rngWorkingTableArea.Style = ActiveDocument.Styles("Plain Text")
        rngWorkingTableArea.Rows.ConvertToText Separator:=wdSeparateByTabs
        rngWorkingTableArea.Find.ClearFormatting
        rngWorkingTableArea.Find.Replacement.ClearFormatting
        
        With rngWorkingTableArea.Find
            .Text = "^t"
            .Replacement.Text = "</td>^t<td>"
            .Forward = True
         .Wrap = wdFindStop
         .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        rngWorkingTableArea.Find.Execute Replace:=wdReplaceAll
        
        With rngWorkingTableArea.Find
            .Text = "^p"
            .Replacement.Text = "</td><tr>^p<tr><td>"
            .Forward = True
         .Wrap = wdFindStop
         .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        rngWorkingTableArea.Find.Execute Replace:=wdReplaceAll
        'NB: This has put a spurious extra <tr><td> at the end of the 
        'table, and we are lacking one at the beginning
            
        'Now start the table and put the first line start in
        Selection.GoTo what:=wdGoToObject, Name:=rngWorkingTableArea.Start
        Selection.TypeText Text:="<table>"
        Selection.TypeParagraph
        Selection.TypeText Text:="<tr><td>"
        
        'now move selection to the end of the range
        Selection.Start = rngWorkingTableArea.End
        'select the last line which is our spurious <tr><td> and delete it
        Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
        Selection.Cut
        'and finish off the table
        Selection.TypeText Text:="</table>"
        
        'and go for the next one
        Selection.GoTo what:=wdGoToTable, Which:=wdGoToNext, Count:=1, Name:=""
    
    Wend
NoMoreTables:
'Exit point for the loop
End Sub
    

Sub HTMLStylesfromWord()
    Selection.EndKey Unit:=wdStory
    Selection.TypeParagraph
    Selection.Style = ActiveDocument.Styles("Plain Text")
    Selection.HomeKey Unit:=wdStory
    Do
        Selection.Find.ClearFormatting
        Selection.Find.Style = ActiveDocument.Styles("Normal")
        With Selection.Find
            .Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found = True Then
                Selection.Style = ActiveDocument.Styles("Plain Text")
                Selection.Cut
                Selection.TypeParagraph
                Selection.MoveUp Unit:=wdLine, Count:=1
                Selection.TypeText Text:="<p>"
                Selection.Paste
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
                Selection.TypeText Text:="</p>"
                Selection.MoveDown Unit:=wdLine, Count:=1
                Selection.Find.ClearFormatting
                With Selection.Find
                    .Text = "^p"
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = True
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                Selection.Find.Execute
                Selection.Delete Unit:=wdCharacter, Count:=1
            Else
                Exit Do
            End If
            
    
        End With
    Loop
    
    
    Selection.HomeKey Unit:=wdStory
    Do
        Selection.Find.ClearFormatting
        Selection.Find.Style = ActiveDocument.Styles("Heading 1")
        With Selection.Find
            .Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found = True Then
                Selection.Style = ActiveDocument.Styles("Plain Text")
                Selection.Cut
                Selection.TypeParagraph
                Selection.MoveUp Unit:=wdLine, Count:=1
                Selection.TypeText Text:="<h1>"
                Selection.Paste
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
                Selection.TypeText Text:="</h1>"
                Selection.MoveDown Unit:=wdLine, Count:=1
                Selection.Find.ClearFormatting
                With Selection.Find
                    .Text = "^p"
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = True
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                Selection.Find.Execute
                Selection.Delete Unit:=wdCharacter, Count:=1
            Else
                Exit Do
            End If
            
    
        End With
    Loop
    
    Selection.HomeKey Unit:=wdStory
    Do
        Selection.Find.ClearFormatting
        Selection.Find.Style = ActiveDocument.Styles("Heading 2")
        With Selection.Find
            .Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found = True Then
                Selection.Style = ActiveDocument.Styles("Plain Text")
                Selection.Cut
                Selection.TypeParagraph
                Selection.MoveUp Unit:=wdLine, Count:=1
                Selection.TypeText Text:="<h2>"
                Selection.Paste
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
                Selection.TypeText Text:="</h2>"
                Selection.MoveDown Unit:=wdLine, Count:=1
                Selection.Find.ClearFormatting
                With Selection.Find
                    .Text = "^p"
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = True
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                Selection.Find.Execute
                Selection.Delete Unit:=wdCharacter, Count:=1
            Else
                Exit Do
            End If
            
    
        End With
    Loop
    
    Selection.HomeKey Unit:=wdStory
    Do
        Selection.Find.ClearFormatting
        Selection.Find.Style = ActiveDocument.Styles("Heading 3")
        With Selection.Find
            .Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found = True Then
                Selection.Style = ActiveDocument.Styles("Plain Text")
                Selection.Cut
                Selection.TypeParagraph
                Selection.MoveUp Unit:=wdLine, Count:=1
                Selection.TypeText Text:="<h3>"
                Selection.Paste
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
                Selection.TypeText Text:="</h3>"
                Selection.MoveDown Unit:=wdLine, Count:=1
                Selection.Find.ClearFormatting
                With Selection.Find
                    .Text = "^p"
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = True
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                Selection.Find.Execute
                Selection.Delete Unit:=wdCharacter, Count:=1
            Else
                Exit Do
            End If
            
    
        End With
    Loop
    
    Selection.HomeKey Unit:=wdStory
    Do
        Selection.Find.ClearFormatting
        Selection.Find.Style = ActiveDocument.Styles("Heading 4")
        With Selection.Find
            .Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found = True Then
                Selection.Style = ActiveDocument.Styles("Plain Text")
                Selection.Cut
                Selection.TypeParagraph
                Selection.MoveUp Unit:=wdLine, Count:=1
                Selection.TypeText Text:="<h4>"
                Selection.Paste
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
                Selection.TypeText Text:="</h4>"
                Selection.MoveDown Unit:=wdLine, Count:=1
                Selection.Find.ClearFormatting
                With Selection.Find
                    .Text = "^p"
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = True
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                Selection.Find.Execute
                Selection.Delete Unit:=wdCharacter, Count:=1
            Else
                Exit Do
            End If
            
    
        End With
    Loop
    
    Selection.HomeKey Unit:=wdStory
    Do
        Selection.Find.ClearFormatting
        Selection.Find.Style = ActiveDocument.Styles("Heading 5")
        With Selection.Find
            .Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found = True Then
                Selection.Style = ActiveDocument.Styles("Plain Text")
                Selection.Cut
                Selection.TypeParagraph
                Selection.MoveUp Unit:=wdLine, Count:=1
                Selection.TypeText Text:="<h5>"
                Selection.Paste
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
                Selection.TypeText Text:="</h5>"
                Selection.MoveDown Unit:=wdLine, Count:=1
                Selection.Find.ClearFormatting
                With Selection.Find
                    .Text = "^p"
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = True
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                Selection.Find.Execute
                Selection.Delete Unit:=wdCharacter, Count:=1
            Else
                Exit Do
            End If
            
    
        End With
    Loop
    
    Selection.HomeKey Unit:=wdStory
    Do
        Selection.Find.ClearFormatting
        Selection.Find.Style = ActiveDocument.Styles("Heading 6")
        With Selection.Find
            .Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found = True Then
                Selection.Style = ActiveDocument.Styles("Plain Text")
                Selection.Cut
                Selection.TypeParagraph
                Selection.MoveUp Unit:=wdLine, Count:=1
                Selection.TypeText Text:="<h6>"
                Selection.Paste
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
                Selection.TypeText Text:="</h6>"
                Selection.MoveDown Unit:=wdLine, Count:=1
                Selection.Find.ClearFormatting
                With Selection.Find
                    .Text = "^p"
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = True
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                Selection.Find.Execute
                Selection.Delete Unit:=wdCharacter, Count:=1
            Else
                Exit Do
            End If
            
    
        End With
    Loop
    
End Sub
Sub HTMLEndNoteConversion()
    Dim i As Integer
    If ActiveDocument.Endnotes.Count < 1 Then
        Exit Sub
    End If
    If ActiveWindow.ActivePane.View.Type = wdPageView Or _
    ActiveWindow.ActivePane.View.Type = wdOnlineView Or _ 
	ActiveWindow.ActivePane.View.Type = wdPrintPreview Then
        ActiveWindow.View.SeekView = wdSeekEndnotes
    Else
        ActiveWindow.View.SplitSpecial = wdPaneEndnotes
    End If
 For i = ActiveDocument.Endnotes.Count To 1 Step -1
     Selection.GoTo what:=wdGoToEndnote, Which:=wdGoToAbsolute, Count:=i
     Selection.TypeText Text:="(" & Trim(Str(i)) & ")"
    Selection.Delete Unit:=wdCharacter, Count:=1
    
 Next
    Selection.WholeStory
    Selection.Copy
    If ActiveWindow.ActivePane.View.Type = wdPageView Or _
    ActiveWindow.ActivePane.View.Type = wdOnlineView Or _
    ActiveWindow.ActivePane.View.Type = wdPrintPreview Then
        ActiveWindow.View.SeekView = wdSeekMainDocument
    Else
        ActiveWindow.Panes(2).Close
    End If
    Selection.EndKey Unit:=wdStory
    Selection.TypeText Text:="EndNotes"
    Selection.Style = ActiveDocument.Styles("Heading 2")
    Selection.TypeParagraph
    Selection.Paste
 
 For i = ActiveDocument.Endnotes.Count To 1 Step -1
        Selection.GoTo what:=wdGoToEndnote, Which:=wdGoToFirst, Count:=i
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "^f"
            .Replacement.Text = "(" & Trim(Str(i)) & ")"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute Replace:=wdReplaceOne
            .Style = ActiveDocument.Styles("Plain Text")
        End With
Next
   Selection.HomeKey Unit:=wdStory
    Do
        Selection.Find.ClearFormatting
        Selection.Find.Style = ActiveDocument.Styles("EndNote Text")
        With Selection.Find
            .Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found = True Then
                Selection.Style = ActiveDocument.Styles("Plain Text")
                Selection.Cut
                Selection.TypeParagraph
                Selection.MoveUp Unit:=wdLine, Count:=1
                Selection.TypeText Text:="<p>"
                Selection.Paste
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
                Selection.TypeText Text:="</p>"
                Selection.MoveDown Unit:=wdLine, Count:=1
                Selection.Find.ClearFormatting
                With Selection.Find
                    .Text = "^p"
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = True
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                Selection.Find.Execute
                Selection.Delete Unit:=wdCharacter, Count:=1
            Else
                Exit Do
            End If
    End With
Loop
End Sub

Sub HTMLFootnoteConversion()
    Dim i As Integer
    
    If ActiveDocument.Footnotes.Count < 1 Then
        Exit Sub
    End If
    If ActiveWindow.ActivePane.View.Type = wdPageView Or _
    ActiveWindow.ActivePane.View.Type = wdOnlineView Or _
    ActiveWindow.ActivePane.View.Type = wdPrintPreview Then
        ActiveWindow.View.SeekView = wdSeekFootnotes
    Else
        ActiveWindow.View.SplitSpecial = wdPaneFootnotes
    End If
 For i = ActiveDocument.Footnotes.Count To 1 Step -1
     Selection.GoTo what:=wdGoToFootnote, Which:=wdGoToAbsolute, Count:=i
     Selection.TypeText Text:="(" & Trim(Str(i)) & ")"
    Selection.Delete Unit:=wdCharacter, Count:=1
    
 Next
    Selection.WholeStory
    Selection.Copy
    If ActiveWindow.ActivePane.View.Type = wdPageView Or _
    ActiveWindow.ActivePane.View.Type = wdOnlineView Or _
    ActiveWindow.ActivePane.View.Type = wdPrintPreview Then
        ActiveWindow.View.SeekView = wdSeekMainDocument
    Else
        ActiveWindow.Panes(2).Close
    End If
    Selection.EndKey Unit:=wdStory
    Selection.TypeText Text:="Footnotes"
    Selection.Style = ActiveDocument.Styles("Heading 2")
    Selection.TypeParagraph
    Selection.Paste
 
 For i = ActiveDocument.Footnotes.Count To 1 Step -1
        Selection.GoTo what:=wdGoToFootnote, Which:=wdGoToFirst, Count:=i
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "^f"
            .Replacement.Text = "(" & Trim(Str(i)) & ")"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute Replace:=wdReplaceOne
            .Style = ActiveDocument.Styles("Plain Text")
        End With
Next
   Selection.HomeKey Unit:=wdStory
    Do
        Selection.Find.ClearFormatting
        Selection.Find.Style = ActiveDocument.Styles("Footnote Text")
        With Selection.Find
            .Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found = True Then
                Selection.Style = ActiveDocument.Styles("Plain Text")
                Selection.Cut
                Selection.TypeParagraph
                Selection.MoveUp Unit:=wdLine, Count:=1
                Selection.TypeText Text:="<p>"
                Selection.Paste
                Selection.MoveLeft Unit:=wdCharacter, Count:=1
                Selection.TypeText Text:="</p>"
                Selection.MoveDown Unit:=wdLine, Count:=1
                Selection.Find.ClearFormatting
                With Selection.Find
                    .Text = "^p"
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = True
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                Selection.Find.Execute
                Selection.Delete Unit:=wdCharacter, Count:=1
            Else
                Exit Do
            End If
    End With
Loop
End Sub



Sub HtmlTidyUp()
'
' TidyHtml Macro
' Macro recorded 08/03/10 by Jim Champ
'
    Selection.WholeStory
    With Selection.Font
        .Name = "Courier New"
        .Size = 10
        .Bold = False
        .Italic = False
        .Underline = wdUnderlineNone
        .StrikeThrough = False
        .DoubleStrikeThrough = False
        .Outline = False
        .Emboss = False
        .Shadow = False
        .Hidden = False
        .SmallCaps = False
        .AllCaps = False
        .ColorIndex = wdAuto
        .Engrave = False
        .Superscript = False
        .Subscript = False
    End With
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "?"
        .Replacement.Text = "..."
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "?"
        .Replacement.Text = "-"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
    CRStrip
    
    With Selection.Find
        .Text = "/p>"
        .Replacement.Text = "/p>^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
    With Selection.Find
        .Text = "</tr>"
        .Replacement.Text = "</tr>^p"
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
    With Selection.Find
        .Text = "<tr>"
        .Replacement.Text = "^p<tr>"
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
    
    With Selection.Find
        .Text = "<td>"
        .Replacement.Text = "^p^t<td>"
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Sub HTMLEntities()
'
' htmlEntities Macro
' Macro recorded 05/11/11 by Jim Champ
'
    Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    
    With Selection.Find
        .Text = " & "
        .Replacement.Text = " &amp; "
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
    With Selection.Find
        .Text = """"
        .Replacement.Text = "&quot;"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "¸"
        .Replacement.Text = "&copy;"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "'"
        .Replacement.Text = "&#39;"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub



Sub HTMLSuperscript()
'
' HTMLSuperscript Macro
' Macro recorded 05/11/11 by Jim Champ
    Do
        Selection.Find.ClearFormatting
        With Selection.Find.Font
            .Superscript = True
        End With
        With Selection.Find
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
                .Execute
                If .Found = True Then
                    Selection.MoveLeft Unit:=wdCharacter, Count:=1
                    Selection.TypeText Text:="<sup>"
                    Selection.Find.ClearFormatting
                    With Selection.Find.Font
                        .Superscript = False
                    End With
                    With Selection.Find
                        .Forward = True
                        .Wrap = wdFindContinue
                        .Format = True
                        .MatchCase = False
                        .MatchWholeWord = False
                        .MatchWildcards = False
                        .MatchSoundsLike = False
                        .MatchAllWordForms = False
                    End With
                    Selection.Find.Execute
                    Selection.MoveRight Unit:=wdCharacter, Count:=1
                    Selection.TypeText Text:="</sup>"
    
                Else
                    Exit Do
                End If
        End With
    Loop
End Sub


These snippets and utilities are licensed under the University of Illinois/NCSA Open Source License. Here is the text of the license as it applies to this code.

To contact the writer please use this form, or if you prefer use Linked In or even Facebook.

HTML check . CSS check

© Jim Champ, last edit