Automating a Manual Process with a Macro

Written by Allen Wyatt (last updated September 7, 2019)
This tip applies to Word 2007, 2010, 2013, 2016, 2019, and Word in Microsoft 365


1

Jason is a student editor of an academic law journal. As part of the publication process, he needs to check every sentence for plagiarism and accuracy and every citation to ensure proper formatting and support. This basically means every sentence must be supported by a citation placed in a footnote. Currently the staff manually copies and pastes every text sentence, footnote, and footnote number from the author's manuscript (a Word document) into a staff editor's Word document that is then used for checking. Jason wonders if there is a way to automate this process of copying over the "footnote number," "sentence from the article document" and "original footnote content" from the manuscript source document into the worksheet document.

Each of the tasks mentioned by Jason can be done programmatically, with some irritating exceptions. It is not that difficult to step through the footnote and endnote collections, in VBA, and extract information from them. This information can then be moved to a new document that could be used as the editor's worksheet. The irritating part is that the footnote and endnote numbers are dynamic, and therefore not that easy to access. A full discussion of this irritant can be found at this site:

http://www.vbaexpress.com/forum/showthread.php?31231

Exactly how you might go about making a macro to do the information transfer from one document to another depends, in large part, on the characteristics of the information in the author's document. For instance, does the author's document include one or two spaces after a sentence? Does it allow multiple footnotes per sentence? Does it allow endnotes in addition to footnotes? Does it include tables?

The point is that there are any number of considerations that can affect the development of a macro. This means that any macros will need to be finely tuned to the source document you are working with—which means lots of testing. To give you a starting point, however, consider the following macros. They will copy sentences, footnotes, and endnotes (if any) from a source document to a new document.

Sub FootnotesEndnotes()
    Dim fNote As Footnote
    Dim eNote As Endnote
    Dim aRange As Range
    Dim sText As String
    Dim rText As String
    Dim eRef As String
    Dim newDoc As Document
    Dim oldDoc As Document

    Set oldDoc = ActiveDocument
    Set newDoc = Documents.Add

    sText = "---------------FOOTNOTES---------------" & vbCr
    newDoc.Content.InsertAfter sText

    oldDoc.Activate
    For Each fNote In ActiveDocument.Footnotes
        Set aRange = fNote.Reference
        aRange.MoveStart unit:=wdSentence, Count:=-1
        aRange.MoveEnd unit:=wdSentence
        sText = aRange.Text
        rText = fNote.Range.Text
        With fNote.Reference.Characters.First
            .Collapse
            .InsertCrossReference wdRefTypeFootnote, _
              wdFootnoteNumberFormatted, fNote.Index
            eRef = .Characters.First.Fields(1).Result
            Selection.Start = fNote.Reference.Start - Len(eRef)
            Selection.End = fNote.Reference.Start
            Selection.Delete
        End With
        Call WriteNewdoc(newDoc, sText, rText, eRef, "Footnote Text")
    Next fNote

    sText = "---------------ENDNOTES----------------" & vbCr
    newDoc.Content.InsertAfter vbCr & vbCr & sText

    For Each eNote In ActiveDocument.Endnotes
        Set aRange = eNote.Reference
        aRange.MoveStart unit:=wdSentence, Count:=-1
        aRange.MoveEnd unit:=wdSentence
        sText = aRange.Text
        rText = eNote.Range.Text
        With eNote.Reference.Characters.First
            .Collapse
            .InsertCrossReference wdRefTypeEndnote, _
              wdEndnoteNumberFormatted, eNote.Index
            eRef = .Characters.First.Fields(1).Result
            Selection.Start = eNote.Reference.Start - Len(eRef)
            Selection.End = eNote.Reference.Start
            Selection.Delete
        End With
        Call WriteNewdoc(newDoc, sText, rText, eRef, "Endnote Text")
    Next eNote

    newDoc.Activate
End Sub

Sub WriteNewdoc(newDoc As Document, sText As String, rText As String, _
       eRef As String, aStyle As String)
    Dim sText1 As String
    Dim sText2 As String
    Dim dRange As Range
    Dim k As Long
    Dim curDoc As Document

    Set curDoc = ActiveDocument
    newDoc.Activate
    k = InStr(sText, Chr(2))
    If k = 1 Then sText = Mid(sText, 2) 'in case previous sentence has note
    sText = Trim(sText)
    k = InStr(sText, Chr(2))
    If k = 0 Then
        sText = sText & Chr(2)
        k = Len(sText)
    End If
    If k > 1 Then
        sText1 = Left(sText, k - 1)
    Else
        sText1 = ""
    End If
    If k = Len(sText) Then
        sText2 = ""
    Else
        sText2 = Mid(sText, k + 1)
    End If
    If Len(sText2) > 0 Then
        If Mid(sText2, Len(sText2), 1) = Chr(13) Then
            sText2 = Left(sText2, Len(sText2) - 1)
        End If
    End If
    Set dRange = newDoc.Content
    dRange.Collapse Direction:=wdCollapseEnd
    dRange.Select
    With Selection
        .InsertAfter vbCr & sText1
        .Font.Superscript = False
        .Collapse Direction:=wdCollapseEnd
        .InsertAfter eRef
        .Font.Superscript = True
        .Collapse Direction:=wdCollapseEnd
        .InsertAfter " " & sText2 & vbCr
        .Font.Superscript = False
        .Collapse Direction:=wdCollapseEnd
        .InsertAfter eRef
        .Font.Superscript = True
        .Collapse Direction:=wdCollapseEnd
        .InsertAfter " " & rText & vbCr & vbCr
        .Font.Superscript = False
        .Style = aStyle
    End With
    curDoc.Activate
End Sub

This is (again) just a starting point. You will need to test and tweak the macros with your documents to make sure they do what you expect.

If you are looking for additional resources to aid in developing such a macro, you might try this book. It is a freebie, and it may have some macros (or examples) that you can adapt to your specific purposes:

http://www.archivepub.co.uk/book.html

Don't be surprised if your macro becomes quite complex over time. This is to be expected anytime you create a macro to perform tasks that humans can do with relatively little thinking.

Note:

If you would like to know how to use the macros described on this page (or on any other page on the WordTips sites), I've prepared a special page that includes helpful information. Click here to open that special page in a new browser tab.

WordTips is your source for cost-effective Microsoft Word training. (Microsoft Word is the most popular word processing software in the world.) This tip (12724) applies to Microsoft Word 2007, 2010, 2013, 2016, 2019, and Word in Microsoft 365.

Author Bio

Allen Wyatt

With more than 50 non-fiction books and numerous magazine articles to his credit, Allen Wyatt is an internationally recognized author. He is president of Sharon Parq Associates, a computer and publishing services company. ...

MORE FROM ALLEN

Creating a Master Document Using Existing Subdocuments

If you decide to create a master document, it is easy to do by just adding one or more subdocuments to an existing ...

Discover More

Selecting Random Names

Got a ton of names from which you need to select a few random names? There are several ways you can extract what you ...

Discover More

Finding a Worksheet with a Specific Value in a Specific Cell

If you have a lot of worksheets in workbook, finding the exact one you want can be a bit tricky. This tip looks at ...

Discover More

The First and Last Word on Word! Bestselling For Dummies author Dan Gookin puts his usual fun and friendly candor back to work to show you how to navigate Word 2013. Spend more time working and less time trying to figure it all out! Check out Word 2013 For Dummies today!

More WordTips (ribbon)

Counting Open Document Windows

When creating macros, it is sometimes necessary to know how many documents are open in Word. This is relatively easy to ...

Discover More

Removing a Directory

Your macro, in the course of doing some processing, may create a directory that you later need to delete. Here's how to ...

Discover More

Toggling Font Assignments in a Macro

If you need to quickly switch a text selection from one typeface to another, one way you can do it is with a macro. This ...

Discover More
Subscribe

FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."

View most recent newsletter.

Comments

If you would like to add an image to your comment (not an avatar, but an image to help in making the point of your comment), include the characters [{fig}] (all 7 characters, in the sequence shown) in your comment text. You’ll be prompted to upload your image when you submit the comment. Maximum image size is 6Mpixels. Images larger than 600px wide or 1000px tall will be reduced. Up to three images may be included in a comment. All images are subject to review. Commenting privileges may be curtailed if inappropriate images are posted.

What is five more than 3?

2020-07-12 15:33:26

Kat

Hi, is there a way to do this but maintain the formatting of the original sentence/footnote/endnote? I noticed that it doesn't bring over italics, underlining, etc.

Is there another resource I should look at for adding these values into a form document as fields?

Thanks!


This Site

Got a version of Word that uses the ribbon interface (Word 2007 or later)? This site is for you! If you use an earlier version of Word, visit our WordTips site focusing on the menu interface.

Videos
Subscribe

FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."

(Your e-mail address is not shared with anyone, ever.)

View the most recent newsletter.