Word 2016 / VBA突出显示单词列表中每个单词的首次使用

时间:2017-03-10 21:05:04

标签: ms-word word-vba

我正在使用Word的宏来访问单独保存的doc文件,该文件包含多个页面的长单词列表。单词列表doc的格式为,

FMS

CPR

ABC

...用换行符分隔每个单词。

宏需要突出显示列表中每个单词的首次使用。

现在,宏会突出显示该单词的每个用法,此外,当该单词成为另一个单词的一部分时,会突出显示该单词。例如,它在单词freeze中突出显示EZE,但它应该只在eze独立时突出显示。

有人可以帮忙解决问题, 1.仅限首次使用,和 2.如何确保它只捕获实际的单词,而不是所有包含该单词的其他单词?我似乎无法用VBA实现这一点。 我目前的代码:

  Sub TD()
  '
  Dim sCheckDoc As String
  Dim docRef As Document
  Dim docCurrent As Document
  Dim wrdRef As String
  Dim wrdPara As Paragraph

  sCheckDoc = "c:\check.docx"
  Set docCurrent = Selection.Document
  Set docRef = Documents.Open(sCheckDoc)
  docCurrent.Activate

  With Selection.Find
  .ClearFormatting
  .Replacement.ClearFormatting
  .Replacement.Highlight = True
  .Replacement.Text = "^&"
  .Forward = True
  .Format = True
  .MatchWholeWord = True
  .MatchCase = False
  .MatchWildcards = False
  .MatchSoundsLike = False
  .MatchAllWordForms = False
  End With

  For Each wrdPara In docRef.Paragraphs
  wrdRef = wrdPara.Range.Text
  If Asc(Left(wrdRef, 1)) > 32 Then
  ' remove the paragraph mark:
  wrdRef = Left(wrdRef, Len(wrdRef) - 1)
  With Selection.Find
  .Wrap = wdFindContinue
  .Text = wrdRef
  .Execute Replace:=wdReplaceAll
  End With
  End If
  Next wrdPara

  docRef.Close
  docCurrent.Activate
  End Sub 

1 个答案:

答案 0 :(得分:0)

尝试wdReplaceOne而不是wdReplaceAll。

.MatchWholeWord = True应该可以防止突出显示嵌入的字符串,但它似乎被忽略了。

我在ThisDocument后面的模块中测试了你的原始代码,它突出显示了来自check文档的所有实例,忽略了MatchWholeWord参数。在建议的编辑之后,代码突出显示了来自检查文档的最后一个字符串的第一个实例。现在我无法让程序工作。它运行但单词不突出显示。我从来没有在Word背后使用过VBA。希望这个改变对你有用。