杰森(Jason)是学术法律期刊的学生编辑。在发布过程中,他需要检查每个句子的抄袭和准确性,以及每个引用,以确保正确的格式和支持。

基本上,这意味着每个句子都必须由脚注中的引用来支持。当前,工作人员手动将作者手稿(Word文档)中的每个文本语句,脚注和脚注编号粘贴并粘贴到工作人员编辑的Word文档中,然后进行检查。 Jason想知道是否有一种方法可以自动完成将手稿源文档中的“脚注编号”,“文章文档中的句子”和“原始脚注内容”复制到工作表文档中的过程。

Jason提到的每个任务都可以通过编程方式完成,但有一些令人讨厌的例外。在VBA中逐步浏览脚注和尾注集合并从中提取信息并不难。然后,可以将此信息移到可用作编辑者工作表的新文档中。令人烦恼的是脚注和尾注的编号是动态的,因此不那么容易访问。

可以在以下站点找到有关该刺激物的完整讨论:

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

确切地说,如何制作宏以将信息从一个文档传输到另一文档,很大程度上取决于作者文档中信息的特性。例如,作者的文档在句子后面是否包含一两个空格?每个句子是否允许多个脚注?除脚注外,还允许尾注吗?它包括表格吗?

关键是有许多因素可以影响宏的开发。这意味着任何宏都需要根据您正在使用的源文档进行微调,这意味着需要进行大量测试。但是,为了给您一个起点,请考虑以下宏。他们会将句子,脚注和尾注(如果有)从源文档复制到新文档。

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

(再次)这只是一个起点。您将需要测试和调整宏与您的文档,以确保它们能够执行您期望的操作。

如果您正在寻找其他资源来帮助开发此类宏,则可以尝试本书。它是一个免费赠品,它可能具有一些可以满足您特定目的的宏(或示例):

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

如果您的宏随着时间变得非常复杂,请不要感到惊讶。只要您创建一个宏来执行人类可以用很少的思想就可以完成的任务,这是可以预期的。

注意:

如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。

_WordTips_是您进行经济有效的Microsoft Word培训的来源。

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(12724)适用于Microsoft Word 2007、2010、2013、2016、2019和Office 365中的Word。