2

其目的是在 word 文档中查找 myWord 的所有出现并向它们添加相同的注释。我得到了两个不需要的效果:1)代码在单词的每个实例上添加了超过 1 个注释(它似乎添加了与该单词实例数相同数量的 commens),以及 2)代码跳过了大写的单词字母。

Sub CheckWrd()
For Each myWord in wordArray            'wrdArray is a list of words loaded elsewhere
  With Selection.Find
   .Text = "[^13^11 ]" & wrd & "[^13^11 ,-.]"
   .Forward = True
   .Wrap = wdFindContinue
   .MatchCase = False
   .MatchWholeWord = True
  End With
  Do While Selection.Find.Execute = True
    ActiveDocument.Comments.Add Selection.range, myComment
  Loop
Next myWord

此外,如果我将 Do While 构造更改为 and If then,它只会将注释添加到 myWord 的第一个实例。

4

2 回答 2

0

答案:

在 While 添加一个 .Execute 以移动事物。我真的不知道这是如何或为什么起作用的,但确实如此(这是巫毒魔法)。

(...) Do While Selection.Find.Execute = True ActiveDocument.Comments.Add Selection.range, myComment .Execute Loop

于 2014-12-31T13:02:59.410 回答
0

尝试将execute循环保持在with语句内。此代码适用于我(使用具有多种大小写变化的测试文件):

Sub find_test()
    i = 1
    With ActiveDocument.Content.Find
        .Text = "test"
        .Forward = True
        .Wrap = wdFindStop
        .MatchCase = False
        .MatchWholeWord = True
        While .Execute() = True
            .Parent.Select
            ActiveDocument.Comments.Add Selection.Range, "test" & i
            i = i + 1
        Wend
    End With
End Sub
于 2012-11-08T01:05:33.857 回答