Vba .find添加多个注释

Vba .find添加多个注释,vba,while-loop,ms-word,find,Vba,While Loop,Ms Word,Find,目的是在word文档中查找myWord的所有文档,并向其添加相同的注释。我得到了两个不想要的效果:1)代码在单词的每个实例上添加了超过1条注释(它似乎添加了与该单词实例数量相同的commos),2)代码跳过了大写字母的单词 Sub CheckWrd() For Each myWord in wordArray 'wrdArray is a list of words loaded elsewhere With Selection.Find .Text = "[^1

目的是在word文档中查找myWord的所有文档,并向其添加相同的注释。我得到了两个不想要的效果:1)代码在单词的每个实例上添加了超过1条注释(它似乎添加了与该单词实例数量相同的commos),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的第一个实例添加逗号。

请尝试将
execute
循环保留在
with
语句中。这段代码适合我(使用一个测试文件,在大小写上有多种变化):


答案是:

在此期间,添加一个.Execute以移动内容。我真的不知道这是怎么回事,也不知道为什么,但它确实起作用了(这是巫毒魔法)

(……)

Do While Selection.Find.Execute=True
ActiveDocument.Comments.Add Selection.range,myComment
.执行

循环

尝试从文档顶部开始,并将
的值更改为
wdFindStop
Kevin,谢谢您的回答。那个代码仍然会对我产生同样不想要的效果。我应该指出,与您的代码不同,我的程序的这一部分对于每个循环都是whithin a,如上所示。这是我从您的建议和我将代码更改为的内容中看到的唯一区别。此外,当每个单词有1个时,使用vbFindStop可以很好地工作,但不会捕获该单词的任何后续重复,即如果在“This is a test1,test1,test1”中查找“test1”它只会突出显示第一个测试1。很有趣-也许我不理解这个问题。对我来说,在Word 2010中,我的代码向测试文档中的每个“test”实例添加了一条注释,而不管该实例的大小写如何。
wordArray
是否有多个您试图注释的单词的实例?嗯,奇怪。在进一步的测试中,我发现使用
Selection.Find
对象并不能得到我所期望的结果,因此我使用了
ActiveDocument.Content.Find
,但必须为找到的每个对象运行
.Parent.Select
。祝你好运,很抱歉我帮不了你!
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