先日紹介した「『○○において』 → 『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 "文字列が選択されています。"
【日本語訳】
もし、選択範囲の文字の開始位置 が 選択範囲の文字の終了位置 とは違うのならば ”文字列が選択されています。”と表示
「 <> 」は、「違う」を意味します。
数値を比較することも、文字を比較することもできます。