[検索と置換]ダイアログボックスを起動する際に、[検索する文字列]欄に文字列が自動入力される場合とされない場合があります。
(参考:【Word】[検索する文字列]欄に自動入力する場合としない場合の差)
これに対処するには、[検索と置換]ダイアログボックスを起動する前に、選択中の文字列を[Ctrl]+[C]でクリップボードに入れて、ダイアログボックス起動後に[Ctrl]+[V]で文字列を貼り付ける必要があります。
ただ、このようにショートカットキーを連打するのは面倒ですよね。セミナーの受講生の方からの要望でマクロを作ってみました。
なお、[検索と置換]ダイアログボックスの強化版である「山猫の手」を使えば、このような問題は一切ありません。
<目次>
このマクロでできること
マクロを実行すると、[検索と置換]ダイアログボックスを起動が起動します。このとき、選択されている文字列が1単語を超える長さの場合であっても[検索する文字列]欄に自動的に入力されます。
マクロの解説
5行目のとおり、Selection.Typeプロパティで文字列が選択されているのかどうかを判定しています。wdSelectionIPというのはカーソルが文字列を選択していない状態を示しています。
文字列が選択されていない状態でSelection.Textにより文字列を取得しようとすると、カーソルの右側にある文字列を取得してしまうため、意図しない文字列が[検索する文字列]欄に入ってしまいます。
これを回避するための仕組みです。
16行目のメソッドで[検索と置換]ダイアログボックスを起動します。これは便利です。
以下の記事で[検索と置換]ダイアログボックスの[置換]タブを表示するメソッドの解説をしています。この記事と同じ理由から、[検索]タブを表示する場合にもこのメソッドを利用しています。
(参考:【コード】「検索と置換」ダイアログボックスを表示させる(けっこう重要))
マクロ
Sub 検索する文字列を自動入力するWordマクロ() '検索する文字列を取得 Dim myString As String If Selection.Type = wdSelectionIP Then myString = "" Else myString = Selection.Text End If '[検索と置換]ダイアログボックスを表示 With Selection.Find .Text = myString '検索する文字列 .Replacement.Text = "" '置換後の文字列(空欄) End With CommandBars.FindControl(ID:=141).Execute End Sub