Automating a Manual Process with a Macro

by Allen Wyatt
(last updated November 16, 2013)

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 infomraiton 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 ther 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.

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, and 2013.

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

Counting Precedents and Dependents

Do you need to know how many precedents or dependents there are on a worksheet? You could count them manually, or you could ...

Discover More

Setting a Default for the Object Browser

Does it bother you that when you press Ctrl+Page Up or Ctrl+Page Down you aren't always taken to the top of the previous or ...

Discover More

Understanding the For ... Next Structure

Spend any time creating Word macros, and sooner or later you will need to repeat some of your programming code a certain ...

Discover More

Learning Made Easy! Quickly teach yourself how to format, publish, and share your content using Word 2013. With Step by Step, you set the pace, building and practicing the skills you need, just when you need them! Check out Microsoft Word 2013 Step by Step today!

More WordTips (ribbon)

Determining Differences Between Dates

Do you need to do some simple math using dates in a your macro? One of the easy functions you can use is the DateDiff ...

Discover More

Converting Text to Uppercase in a Macro

Macros are often used to process documents. If part of the processing involves making text selections uppercase, Word ...

Discover More

Determining the Length of a String

Need to find out in a macro how long a particular text string is? You can figure it out by using the Len function, described ...

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}] in your comment text. You’ll be prompted to upload your image when you submit the comment. Maximum image size is 8Mpixels. 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 0 + 7?

2013-11-16 07:30:13

Ken Endacott

Many citations refer to a web page and as part of the checking process it is necessary to determine that the referred web page exists and is relevant. If the reference contains a hyperlink then it is simply a matter of clicking on the hyperlink.

However, documents prepared for publication must have the urls in text form and checking these requires copying and pasting the url text into a browser.

The Fields module of the free macros at www.editordie.com.au/editorkae has the ability to find text urls in a document and with one click open a browser at the appropriate page.


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.

Newest Tips
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.