代码之家  ›  专栏  ›  技术社区  ›  Tadej Gr

在word中将引用替换为尾注文本

  •  -1
  • Tadej Gr  · 技术社区  · 6 年前

    我在word中有一个文本,它包含了对尾注的引用(1,2,3,…)。对交叉引用创建的相同尾注(例如,有若干个1s)有多个引用。

    我想用尾注文本替换所有引用。

    在互联网上我找到了一个能做到这一点的代码。问题是,如果对同一个尾注有多个引用,则仅引用文档中第一个位置的引用将被文本替换(例如仅前1个,其他1S不)。

    我需要帮助如何用适当的尾注文本替换所有引用。

    Sub endnotes2()
      Dim Note As Endnote
      Dim NoteReference As String
      Dim NoteText As String
    
      For Each Note In ActiveDocument.Endnotes
        With Note
          NoteText = .Range.Text
          NoteReference = .Index
          Call Selection.SetRange(.Reference.End, .Reference.End)
          Selection.Font.Superscript = True
          Selection.TypeText (NoteText)
          Selection.Font.Superscript = False
        End With
      Next Note
    
      Do While ActiveDocument.Endnotes.Count > 0
        Call ActiveDocument.Endnotes(1).Delete
      Loop
    
     Selection.Find.ClearFormatting
      Selection.Find.Font.Superscript = True
      Selection.Find.Replacement.ClearFormatting
      Selection.Find.Replacement.Font.Superscript = False
      With Selection.Find
        .Text = ""
        .Replacement.Text = " (^&)" 'The ^& here refers to the "found text", so if we found "abc" we will replace it with "(abc)"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
      End With
      Selection.Find.Execute Replace:=wdReplaceAll
    End Sub
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Cindy Meister Prabhuprasad NG    6 年前

    在我的简单测试中,以下内容对我很有用。

    因为尾注的交叉引用 默认情况下使用上标搜索上标不是可靠的标准。另外,其他的东西也可以上标。交叉引用由Word使用 Ref 领域 ,这些是指 书签 Insert cross-reference 使用命令。

    这样的书签以 _Ref 后面跟着一个长数字。尾注的字段使用 NoteRef .因此,为终结符引用获取书签名称是有意义的(可能不止一个),检查它们是否使用 _参考 模式然后搜索文档以使用书签。

    为了“找到”一个字段编码模式 ^d 使用。因此,搜索项是,后跟字段代码(noteref)的名称和书签名称。如果搜索成功,则删除字段代码,并在此位置写入尾注文本。然后搜索从这一点继续到文档的结尾。

    因此,代码通过所有的尾注循环,得到每个人的引用,获取所有的书签,循环书签,检查名称(如上所述),并搜索NoTeEF字段(如上所述)。

    最后,原始尾注引用被尾注文本替换。

    Sub WriteEndNoteToAllEndNoteRefs()
        Dim sEndNoteText As String
        Dim rngEndNoteRef As Word.Range, rngSearch As Word.Range
        Dim doc As Word.Document
        Dim en As Word.Endnote
        Dim bkm As Word.Bookmark
        Dim bFound As Boolean
    
        Set doc = ActiveDocument
        For Each en In doc.Endnotes
            Set rngEndNoteRef = en.Reference
            sEndNoteText = en.Range.Text
            For Each bkm In rngEndNoteRef.Bookmarks
                 If Left(bkm.Name, 4) = "_Ref" Then
                    Set rngSearch = doc.content
                    rngSearch.TextRetrievalMode.IncludeFieldCodes = True
                    Do
                        With rngSearch.Find
                            .Text = "^d NoteRef " & bkm.Name
                            .wrap = wdFindStop
                            bFound = .Execute
                            If bFound Then
                                rngSearch.Fields(1).Delete
                                rngSearch.Text = sEndNoteText
                                rngSearch.End = doc.content.End
                            End If
                        End With
                    Loop While bFound
                 End If
            Next
            rngEndNoteRef = sEndNoteText
        Next
    
    End Sub