2

その意図は、Word 文書内の myWord のすべての出現箇所を見つけて、それらに同じコメントを追加することです。2 つの不要な影響があります。1) コードは単語の各インスタンスに 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 コンストラクトを and If then に変更すると、myWord の最初のインスタンスにのみコメントが追加されます。

4

2 に答える 2

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 に答える
0

答え:

While に .Execute を追加して、物事を進めます。これがどのように、またはなぜ機能するのかはよくわかりませんが、機能します(ブードゥーの魔法です)。

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

于 2014-12-31T13:02:59.410 に答える