【Word VBA】文書中で文字列を選択しているかどうか調べるWordマクロ

2010年6月18日

先日紹介した「『○○において』 → 『in the ○○』の置換マクロ 」という記事がありまして、その中でマクロを紹介しました。

そのマクロの冒頭で、文中で文字列を選択していない場合には、プログラムを終了するように記載しました。

If Selection.Text = vbNullString Then End

間違いで失礼いたしました。

意図していたのは、「選択範囲の文字が「何もない」であるのならば終了する」だったのですが、失敗。

実は、Selection.Text で、何も選択されていない場合には、カーソルの右側の1文字が代わりにに選択されてしまいます

見た目には選択されていません!!でも、マクロを実行しているときには、選択されたことになっています。

よって、上記の書き方だと、見た目で文字列が選択されていない場合でも、プログラムを終了することができません。

 

誤作動を起こしてしまいますね。みなさん、気をつけましょう(笑)。

で、その教訓を生かして、以下のように修正します。

マクロ

If Selection.Start = Selection.End Then End

【日本語訳】

もし、選択範囲の文字の開始位置 = 選択範囲の文字の終了位置 ならば 終了

つまり、何も選択されていない状態であれば、上記の関係が成り立つわけです。

注('16-07-14追記)
上記の文字列が選択されているか否かの判定には、Typeプロパティを使えます。

If Selection.Type = wdSelectionIP Then

としてもいいですね。

【応用編】

If Selection.Start <> Selection.End Then MsgBox "文字列が選択されています。"

【日本語訳】

もし、選択範囲の文字の開始位置 が 選択範囲の文字の終了位置 とは違うのならば ”文字列が選択されています。”と表示

<> 」は、「違う」を意味します。

数値を比較することも、文字を比較することもできます。

関連ページ

-コード
-,