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