【Word VBA】書式を検索すると永久ループしてしまう場合

Word VBA のプログラミングで、書式を検索してループ処理していくコードを書いて実行すると、なぜか原因不明の永久ループになってしまったという経験は無いでしょうか?
たとえば次のコードは、Word 文書上の太字の文字を赤字にして、処理が終わったら「終了」と表示するコードです。

ほとんどの場合、上記のコードは正常に動作しますが、稀に永久ループになってしまい処理が終わらないことがあります。
太字の文字がもう文書上には見つからないにも関わらず、oFind.Execute が True を返し続けるからです。
これは文書にバグが含まれている場合に起きる現象と考えられます。

私は色々と試した結果、コードを下記のように修正することでこの問題を回避できました。

前述の不具合が起きる場合、テキストをワイルドカードで指定した上で書式検索するとその不具合をなぜか回避できます。

ワイルドカード+書式指定で検索がヒットしたら、検索位置を戻して再び(ワイルドカードを使わない)通常の書式検索をすると、正常に処理できます。

ちなみに前述の 2 つのコードは、Range.Find を使用したやり方ですが、Selection.Find を使用する場合は下記のようになります。

 

2
コメントの投稿

avatar
  購読する  
新しい順 古い順 評価順
通知を受け取る対象
youyou
ゲスト

こんにちは。
プログラミング、かなりお詳しそうですね!
僕もCをはじめたところで、まだまだ初歩的なトラブルに詰まっております^^;

そして、記事もさくさく書かれている様子。
これからも、チェックさせてもらいますー♪