Written by Allen Wyatt (last updated July 17, 2024)
This tip applies to Word 2007, 2010, 2013, 2016, 2019, and Word in Microsoft 365
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:
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.
Create Custom Apps with VBA! Discover how to extend the capabilities of Office 2013 (Word, Excel, PowerPoint, Outlook, and Access) with VBA programming, using it for writing macros, automating Office applications, and creating custom applications. Check out Mastering VBA for Office 2013 today!
Want to give your macros a different name than they currently use? It's easy to do using the VBA Editor as described here.
Discover MoreDo you need to copy, within a macro, a range of pages? Because pages can be so fluid in Word, this can be a bit tricky. ...
Discover MoreProgramming structures are an important tool used by any programmer. The VBA language used by Word's macros includes ...
Discover MoreFREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."
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!
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.
Visit the WordTips channel on YouTube
FREE SERVICE: Get tips like this every week in WordTips, a free productivity newsletter. Enter your address and click "Subscribe."
Copyright © 2024 Sharon Parq Associates, Inc.
Comments