
photo credit: chrisjohnbeckett Writing in the sand, San Sebastian via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けにWord VBAで様々な文字入力をするマクロの作り方をシリーズでお伝えしています。
前回の記事はこちら!
Wordで段落記号を入力する方法についてお伝えしまして、これでカーソル位置や選択範囲に文字列や段落記号を入力することができるようになりました。
ですが、とある選択範囲の前後に文字列を挿入したい場合はどうすればよいでしょうか?
「—– ここから —–」~「—– ここまで —–」みたいなやつです。
これ、マクロ化してショートカットキーに登録できたら、けっこう便利だったりしませんか?
ということで今回は、Word VBAで選択範囲の前後に文字列を挿入する方法です。
では、行ってみましょう!
選択範囲の前後に文字列を挿入したい
以下のようなWord文書があります。ちょうど、HTMLのimgタグが入力されている段落範囲を選択している状態です。
この状態のときに、何らからのショートカットキーが入力されたら、その瞬間に以下の図のようにしたいのです。
つまり
- 選択範囲の前に「—– ここから —–」
- 選択範囲の後に「—– ここまで —–」
とそれぞれ入力したいということです。
選択範囲に対するtypeTextメソッドは差し替えになる
選択範囲はSelectionオブジェクトで表せます。文字入力なら、前回までお伝えしてきたtypeTextメソッドがあるのですが、うっかり以下のようなプロシージャを作成して実行してしまうと…
Sub insertText() Selection.typeText "----- ここから -----" End Sub
選択範囲が、うっかり全部消えてしまいます…!
typeTextメソッドを使うと、選択範囲の差し替えになっちゃうんでしたね。
だから今回のケースでは、typeTextメソッドは使えないのです。
insertBeforeメソッドで選択範囲の前に文字列を挿入する
今回のケースでは、選択範囲の「前」または「後」に文字列を挿入したいわけですよね。
まず、選択範囲の前に文字列を挿入する場合、Word VBAではinsertBeforeメソッドを使います。
書き方はこちら。
では、早速…imgタグの段落範囲を選択した状態で、以下プロシージャを作成して実行してみましょう。
Sub insertText() Selection.InsertBefore "----- ここから -----" End Sub
実行すると…おや?
改行…つまり段落記号を入力したいですよね。
そんな場合は、前回記事の組み込み定数vbCrを使って
Sub insertText() Selection.InsertBefore "----- ここから -----" & vbCr End Sub
とします。これで実行をしますと…
このように想定通りの入力がされました。
ここで、一点注目してほしいのですが、選択範囲が元の選択範囲よりも前方向に広がっていますよね?
そうなんです。insertBeforeメソッドで挿入した文字列も選択範囲に吸収されて選択範囲が広がるんですね。
この特性はかなり重要なので、よ~く覚えておいて下さいね。
insertAfterメソッドで選択範囲の後に文字列を挿入する
さて、続いて後ろに「—– ここまで —–」と挿入していきましょう。
選択範囲の後に文字列を挿入する場合、insertAfterメソッドを使います。
書き方はこうです。
先ほどのinsertBeforeに続ける形で処理を追加しましょう。というのも、insertBeforeを実行した後でも選択範囲のEndは変わりませんでしたからね。都合が良いです。
では、imgタグの段落範囲を選択した状態で、以下プロシージャを作成して実行です。
Sub insertText() Selection.InsertBefore "----- ここから -----" & vbCr Selection.InsertAfter "----- ここまで -----" vbCr End Sub
Word文書を見てみると、無事に前後に目的通りの文字列が挿入されています。
そして、insertAfterメソッドでも同様に、元の選択範囲に加えて挿入した文字列のところまで選択範囲が広がっていますよね。
insertBeforeメソッド、insertAfterメソッドはともにSelectionオブジェクトの範囲が広がりますので、この特性を覚えておくと良いです。
なにせ、じゃんじゃん選択範囲を広げながら、文字列を追加できますからね。
まとめ
Word VBAで選択範囲の前後に文字列を挿入する方法をお伝えしました。
insertBeforeメソッドで選択範囲の前、insertAfterメソッドで選択範囲の後に文字列を挿入します。
また、これらのメソッドを実行した結果、挿入した文字列分まで選択範囲が広がるという特性もぜひ覚えておいてくださいね。typeTextメソッドでは選択範囲がクリアされますからね。
さて次回ですが、せっかく作ったこのマクロ…これをショートカットキーに登録する方法についてお伝えします。
どうぞお楽しみに!