ちえぞうさん のブログで、検索と置換に関するマクロの改造過程での試行錯誤が紹介されていましたので、フォローさせていただきます。
Wordマクロでの試行錯誤の過程を教えていただき、非常にありがたいことです。
これ、かなり大切なポイントですし、私も同じところでつまづきましたので、以下紹介いたします。
<目次>
困っていること
マクロの記録(または書籍・ブログ)で取得した検索と置換用のコードを改造する場合、検索条件を変更するとエラーになってしまう。
例えば、あいまい検索の場合のコートがあります。これを、ワイルドカード検索に変更(改造)する場合のことです。
これが、ちえぞうさんちえぞうさん のブログで紹介されています。
検索条件は、プロパティのTrueとFalseの変更でできそうだということは、マクロを眺めているとわかるのですが、実はそれだけではうまく動かない場合があるのですね。
その解決方法をご紹介いたします。
解決策
(1)オン(True)にする条件を一番最後に記載する
(2)同時にオンにできる条件だけを設定する
もう少し細かく
「(1)オン(True)にする条件を一番最後に記載する」について
Selection.Findオブジェクトは、検索と置換ダイアログボックス(Ctrl + H)と連動しています。
そういうわけで、検索と置換ダイアログボックスを眺めると、Selection.Findオブジェクトでできることを予想することができます。
検索と置換ダイアログボックスでできないことは、Selection.Findオブジェクトで設定することができないとお考えください。
たとえば、検索と置換ダイアログボックスでは、以下のようにワイルドカード検索とあいまい検索(日)を同時に選択することはできませんね。
まず、「あいまい検索」が選択されている状態です。
このあと、「ワイルドカードを使用する」をクリックすると、「あいまい検索」のチェックボックスが自動的にオフになります。
ところが、マクロでこれを設定する場合には、「あいまい検索」をまず最初にオフにしてから、「ワイルドカードを使用する」をオンにする、という2つのステップを踏む必要があるわけです。
さきほども申し上げましたが、Selection.Findオブジェクトは、検索と置換ダイアログボックス(Ctrl + H)と連動していますので、Selection.Findオブジェクトのマクロでの設定前の状態は、検索と置換ダイアログボックスの状態だと思ってください。
よって、検索と置換ダイアログボックスで「あいまい検索」がオンになっている場合に、Selection.Findオブジェクトにて「ワイルドカードを使用する」をオンにしようとすると(.MatchWildcards = True)、Wordは、「あいまい検索」と「ワイルドカードを使用する」を同時にオンにさせられそうになって拒否するわけですね。
これがエラーとなって出てきます。
なので、まず最初に「あいまい検索」をオフ(.MatchFuzzy = False)にして、その後に「ワイルドカードを使用する」をオン(.MatchWildcards = True)にする必要があるわけです。
マクロは指示を上から下に向かって実行しますので、以下のように記述すればいいですね。
.MatchFuzzy = False
.MatchWildcards = True
つまり、問題を回避するための考え方は以下の通りになります。
まず、オフにする条件に対応するプロパティをFalseにする
その後、オンにする条件に対応するプロパティをTrueにする
「(2)同時にオンにできる条件だけを設定する」について
これについても、上記と同じ考え方です。
検索と置換ダイアログボックスで実現できない組み合わせの条件をオンにしようとすると、エラーになることがあります。
改造するときには検証ください。
関連本
この設定についての説明は、西上原さんのマクロ本の「Wordで実践 やさしくて役に立つ「マクロ」事例集 」のP.96・97に例とともに記載があります。
この部分の意味は、上記の理由から生じますので、あわせてご覧ください。