【问题标题】:Macro to convert intext notes to endnotes in MS Word在 MS Word 中将文本注释转换为尾注的宏
【发布时间】:2022-03-26 18:29:27
【问题描述】:

我正在尝试将文本注释(文本正文中的注释和引用)转换为具有现有尾注的 MS Word 文档中的尾注的方法,这是我几十年来的第一个宏。 我的文本注释可以被识别,因为它们在大括号之间是深蓝色的。到目前为止,我设法为单个步骤记录了一个宏:搜索模式、剪切模式、插入尾注、粘贴模式、在尾注中再次搜索模式、删除花括号、焦点回到文档的开头(在尾注之外)。

这是它的外观:

Sub inline2endnote()
Selection.Find.ClearFormatting
Selection.Find.Font.Color = 6299648
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "\{(*?)\}"
    .Replacement.Text = "\1"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
End With
Selection.Find.Execute
Selection.Cut
With Selection
    With .EndnoteOptions
        .Location = wdEndOfDocument
        .NumberingRule = wdRestartContinuous
        .StartingNumber = 1
        .NumberStyle = wdNoteNumberStyleArabic
    End With
    .Endnotes.Add Range:=Selection.Range, Reference:=""
End With
Selection.PasteAndFormat (wdFormatOriginalFormatting)
Selection.Find.ClearFormatting
Selection.Find.Font.Color = 6299648
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "\{(*?)\}"
    .Replacement.Text = "\1"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
End With
Selection.Find.Execute
With Selection
    If .Find.Forward = True Then
        .Collapse Direction:=wdCollapseStart
    Else
        .Collapse Direction:=wdCollapseEnd
    End If
    .Find.Execute Replace:=wdReplaceOne
    If .Find.Forward = True Then
        .Collapse Direction:=wdCollapseEnd
    Else
        .Collapse Direction:=wdCollapseStart
    End If
    .Find.Execute
End With
Selection.HomeKey Unit:=wdStory
End Sub

我不得不重新关注顶部,因为我需要退出尾注部分并返回正文。另外,我不知道最后一个“With”部分是什么意思。 现在我想循环这个模式以修复所有的内联注释,但我似乎无法找到。我使用this thread 作为参考,但我无法弄清楚如何正确设置我的范围并为我的迭代定义字段。 我还想知道是否有一种更简洁的方法来编写这些步骤,例如直接粘贴不带大括号的内容,例如将我的查找存储在一个变量中并使用第二个带有剥离内容的变量。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    试试:

    Sub Demo()
    Application.ScreenUpdating = False
    Dim Rng As Range, E_Nt As Endnote
    With ActiveDocument.Range
      With .Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "\{[!\{]@\}"
        .Font.Color = 6299648
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Format = True
        .MatchWildcards = True
        .Execute
      End With
      Do While .Find.Found
        Set Rng = .Duplicate
        With Rng
          .Start = .Start + 1
          .End = .End - 1
        End With
        Set E_Nt = .Endnotes.Add(.Duplicate)
        E_Nt.Range.FormattedText = Rng.FormattedText
        E_Nt.Range.Font.ColorIndex = wdAuto
        .Text = vbNullString
        .Collapse wdCollapseEnd
        .Find.Execute
      Loop
    End With
    Application.ScreenUpdating = True
    End Sub
    

    【讨论】:

    • 哇,它非常高效和快速!我几乎没有设法循环 Do while .Find.Found 但它无法去除尾注中的括号。问题是它会为卷曲括号中的所有文本创建一个尾注,而不仅仅是蓝色的,我不明白为什么。
    • 代码已更新。就像将 '.Format = False' 更改为 '.Format = True' 一样简单。
    • 谢谢,它成功了。请问我在哪里可以找到您用于搜索的正则表达式的引用?我可以看到它避免了嵌套的花括号,这是我需要注意的事情,因为我没有发现任何关于 @ 的信息,除了它在电子邮件地址中用作文字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多