Vba 为术语列表中的每个匹配项向word文档添加匹配注释

Vba 为术语列表中的每个匹配项向word文档添加匹配注释,vba,ms-word,Vba,Ms Word,我有一份包含各种术语的文件,这些术语在整个文件中使用,以及它们的定义 格式:术语=术语定义 我希望能够在此列表中添加术语和定义,并通过编程添加注释,说明文档其余部分中该术语的所有实例的定义,以便在我阅读文档时手头有该定义 例如: [文件中的某个地方]。。。。“术语”…[本款其余部分] 突出显示术语,并添加注释和术语和定义列表中的定义 我希望我已经解释了足够的细节,但请让我知道,如果你需要任何其他澄清。非常感谢您在这方面提供的帮助。当您的问题提到要为每个学期添加注释时,我认为添加超链接会更简洁。这

我有一份包含各种术语的文件,这些术语在整个文件中使用,以及它们的定义

格式:术语=术语定义

我希望能够在此列表中添加术语和定义,并通过编程添加注释,说明文档其余部分中该术语的所有实例的定义,以便在我阅读文档时手头有该定义

例如:

[文件中的某个地方]。。。。“术语”…[本款其余部分]

突出显示术语,并添加注释和术语和定义列表中的定义


我希望我已经解释了足够的细节,但请让我知道,如果你需要任何其他澄清。非常感谢您在这方面提供的帮助。

当您的问题提到要为每个学期添加注释时,我认为添加超链接会更简洁。这应该是一个可以接受的替代品,因为超链接有一个
屏幕提示
,当您将鼠标移到链接上时会显示该提示。因此,我们只需将每个术语的定义添加为屏幕提示,使其与注释一样易于访问

下面的代码将临时将文档中第一个表中的术语和定义成对保存,然后循环文档中的所有单词,并为每个具有该定义的术语添加一个链接作为屏幕提示

如果您只有术语及其定义的excel列表,您可以将其作为表格粘贴回合同的开头。只要将其设置为
[term][definition]
,就应该可以了


如果术语和定义使用两列表,则可以使用如下宏:

Sub Demo()
Application.ScreenUpdating = False
Dim strFnd As String, strTip As String, r As Long
With ActiveDocument
  For r = 2 To .Tables(1).Rows.Count
    strFnd = Split(.Tables(1).Cell(r, 1).Range.Text, vbCr)(0)
    strTip = Split(.Tables(1).Cell(r, 2).Range.Text, vbCr)(0)
    With .Range(.Tables(1).Range.End, .Range.End)
      With .Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Format = False
        .Text = strFnd
        .Wrap = wdFindStop
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchCase = True
        .Execute
      End With
      Do While .Find.Found
        .Hyperlinks.Add Anchor:=.Duplicate, Address:=.Duplicate, ScreenTip:=strTip, TextToDisplay:=.Text
        .Start = .Hyperlinks(1).Range.End
        .Find.Execute
      Loop
    End With
  Next
End With
Application.ScreenUpdating = True
End Sub

请注意,宏假设:(a)术语和定义是文档中的第一个表,每个术语及其定义都有一个单独的行,并且只检查该表之后的术语;(b) 只处理精确匹配(意味着将跳过复数);(c) 这些术语位于表的第一列,周围没有双引号-可以满足带引号的术语,但我们必须知道您使用的是智能引号还是纯引号;(d)术语和定义只占单元格的第一段。

如果是word文档,则注释位于右侧,并且假设您有很多术语和定义,我认为它将开始变得“混乱”。实际上,看起来您可以使用超链接,因为它们有“屏幕提示”选项思考我将如何做到这一点:有一个术语和定义相邻的表格,循环浏览表格中的每个单词,为每个单词添加一个书签,然后搜索整个文档并在每次查找单词时添加超链接感谢marcucciboy2,我不太担心它会变得混乱,因为我将使用注释版本作为与原始版本分开的版本。这个屏幕提示的想法看起来很有希望,我必须想一想,但看起来它仍然是一个手动过程,在大量的条款中添加它们。我有100多条路要走。通过宏实现自动化的某种方法是理想的。术语列在文档的开头。该文件是一份合同,因此在开始时将包含所有定义和术语,这些定义和术语将在主合同中提及。我希望能够在屏幕提示中添加术语和定义,或者在主体的每个实例中添加注释。如果有帮助的话,我已经设法将这些定义作为表格输入excel了?如果需要,可以提取术语和定义并将其置于幕后。所有工作都将在一份合同副本上完成,因此,如果有助于解决问题,维护合同的完整性并不重要。我就知道你会来这里收拾我的烂摊子!这或多或少是我采取的第一种方法,但是关于选择在
过程中如何变化的文档有0个。Find
@macropod他在最后一条评论中说他的列表也在excel中
Sub Demo()
Application.ScreenUpdating = False
Dim strFnd As String, strTip As String, r As Long
With ActiveDocument
  For r = 2 To .Tables(1).Rows.Count
    strFnd = Split(.Tables(1).Cell(r, 1).Range.Text, vbCr)(0)
    strTip = Split(.Tables(1).Cell(r, 2).Range.Text, vbCr)(0)
    With .Range(.Tables(1).Range.End, .Range.End)
      With .Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Format = False
        .Text = strFnd
        .Wrap = wdFindStop
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchCase = True
        .Execute
      End With
      Do While .Find.Found
        .Hyperlinks.Add Anchor:=.Duplicate, Address:=.Duplicate, ScreenTip:=strTip, TextToDisplay:=.Text
        .Start = .Hyperlinks(1).Range.End
        .Find.Execute
      Loop
    End With
  Next
End With
Application.ScreenUpdating = True
End Sub