この記事を新しいサイトに転記しました
----------------------------------------
先日紹介した「『○○において』 → 『in the ○○』の置換マクロ 」という記事がありまして、その中でマクロを紹介しました。
そのマクロの冒頭で、文中で文字列を選択していない場合には、プログラムを終了するように記載しました。
If Selection.Text = vbNullString Then End
間違いで失礼いたしました。
意図していたのは、「選択範囲の文字が「何もない」であるのならば終了する」だったのですが、失敗。
実は、Selection.Text で、何も選択されていない場合には、カーソルの右側の1文字が代わりにに選択されてしまいます。
見た目には選択されていません!!でも、マクロを実行しているときには、選択されたことになっています。
よって、上記の書き方だと、見た目で文字列が選択されていない場合でも、プログラムを終了することができません。
誤作動を起こしてしまいますね。みなさん、気をつけましょう(笑)。
で、その教訓を生かして、以下のように修正します。
【1行マクロ】
If Selection.Start = Selection.End Then End
【日本語訳】
もし、選択範囲の文字の開始位置 = 選択範囲の文字の終了位置 ならば 終了
つまり、何も選択されていない状態であれば、上記の関係が成り立つわけです。
【応用編】
If Selection.Start <> Selection.End Then MsgBox "文字列が選択されています。"
【日本語訳】
もし、選択範囲の文字の開始位置 が 選択範囲の文字の終了位置 とは違うのならば ”文字列が選択されています。”と表示
「 <> 」は、「違う」を意味します。
数値を比較することも、文字を比較することもできます。
▼関連記事
「○○において」 → 「in the ○○」の置換マクロ 「○○において」 → 「in the ○○」の置換マクロ (2)