先日は、文書中の金額表示(半角数字+円)を赤色文字に変換させる処理を例にして、
そのWordマクロのVBAコードを紹介する記事を書きました。
半角数字を赤色に変換するマクロの記事は、
⇒ こちらをご覧ください。
マクロで検索を実行するには、Find を使います。
このFind の使い方は、
【1】Rnageオブジェクトの Find プロパティ を利用する
【2】Selectionオブジェクトの Find プロパティ を利用する
と、2つの方法があります。
この2つの方法においては、何が違うかというと、
検索箇所がその都度、選択状態になるかどうか、ということです。
【1】方式では、検索箇所は選択状態にならないのに対し、
【2】方式では、検索された箇所は、その都度選択状態になります。
ですが、どちらの方式においても、処理が行われた後の、最後の結果自体に違いは出てきません。ですから、この違いを意識する必要はないと思います。
ですが、こと、両者の振る舞いに関しては、決定的な違いがあります。ですから、この振る舞いの違いは知っておく必要があります。
その決定的な違いというのは、
Wordアプリの「検索と置換」ダイアログボックスと連動しているかどうか、
ということです。
つまり、
【1】のRange方式では、連動しない
【2】のSelection方式では、連動する
この違いがあるのです。
Selection方式では、「検索と置換」ダイアログボックスと連動するので、VBAコードを書くときに、一つ、重要な注意点が出てきます。
それは、ワイルドカード(「?」や「*」、「[]」など)を使うときです。
.MatchWildcards = True の1行を書く前に、
必ず、.MatchFuzzy = False の1行が必要になる、
ということです。
「検索と置換」ダイアログボックスにおいては、.MatchFuzzy = True が既定値となっているため、
.MatchFuzzy = False を書かないことには、ワイルドカードを使えないのです。
「検索と置換」ダイアログボックス中の、
「ワイルドカード検索」と
「あいまい検索」の
2つのチェックボックスの、2つとも同時にチェックを付ける(Trueにする)ことはできません。
ですから、
.MatchFuzzy = False としないままに、ワイルドカードを使うと、エラーが出るのです。
これに対し、Range方式では、単に
.MatchWildcards = True の1行だけで済み、
.MatchFuzzy = False の記述は不要です。
「検索と置換」ダイアログボックスとの連動がなくて、VBAで独立しているからです。
この解説、仕組みを理解できない方は、
いったん、「いつも隣にITのお仕事」というWebサイト中の
「Word VBAでワイルドカードを使ったパターン検索をする方法」のページを読んでください。
そのページは、⇒ こちらです。
以上の理由により、私がWordマクロでFindを使うときは、いつもRangeオブジェクトのFindプロパティを使っています。
Selectionオブジェクトの Find プロパティを使うことは、まずありません。
それでは、また次の記事で
■■■■ goosyun ■■■■
最近の「VBAプログラミング・マクロ」カテゴリーもっと見る
最近の記事
カテゴリー
バックナンバー
人気記事