目的是在word文档中找到myWord的所有ocurrance并向它们添加相同的注释。我得到了两个不需要的效果:1)代码在单词的每个实例上添加了多个注释(它似乎添加了与该单词的实例数相同的共数数),以及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构造更改为和If,那么它只会添加到myWord的第一个实例。
答案 0 :(得分: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
答案 1 :(得分:0)
答案:
在While中添加一个.Execute来移动东西。我不知道这是如何或为什么有效,但确实如此(它的伏都教魔法)。
(...)
Do While Selection.Find.Execute = True
ActiveDocument.Comments.Add Selection.range, myComment
.Execute
Loop