【问题标题】:Word 2016/VBA Highlight first use of each word from a word listWord 2016/VBA 突出显示单词列表中每个单词的首次使用
【发布时间】:2017-03-10 21:05:03
【问题描述】:

我正在为 Word 开发一个宏,该宏可以访问一个单独保存的 doc 文件,该文件包含几页的长单词列表。单词列表文档的格式如下,

FMS

心肺复苏术

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 

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    尝试使用 wdReplaceOne 代替 wdReplaceAll。

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

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

    【讨论】:

    • 谢谢。是的,我尝试更改为 wdReplaceOne,是的,它似乎使它不突出。我假设它只用replaceone查找并替换检查文档中的第一个单词。虽然我认为 wdFindContinue 会让它遍历所有可用的单词。
    • 它正在循环,我通过断点和步进代码确认了这一点。在我测试的两个版本中,仅突出显示了检查列表中的最后一个单词。然后它停止突出显示任何内容,尽管它仍在循环列表中。我被难住了。
    • 刚刚做了另一个测试。这次我用 Word 而不是 WordPad 创建了 Check doc。带有推荐编辑的代码运行良好。还是被难住了。
    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多