みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Word VBAで入力を便利するマクロの作り方を初心者向けにお伝えしています。
前回はコチラの記事。
Word VBAでスタイルを取り扱う基本についてお伝えしています。
さて、今回ですが、ちょっと複雑になってきたWord VBAのプロシージャ…Selectionに次ぐSelection、何度も同じオブジェクトを書くの面倒なんですよね。
Withステートメントを使えば同じオブジェクトの表記を1回にまとめることができます。
ということで今回は、Word VBAで同一オブジェクトの表記をまとめるWithステートメントの使い方です。
すっきりプログラムを書くことができるようになりますよ!
では、行ってみましょう。
前回のおさらいとお題
前回作成した便利マクロですが、選択範囲の前後に文字列を挿入するというものでした。
Sub insertText()
Selection.InsertBefore "----- ここから -----" & vbCr
Selection.InsertAfter "----- ここまで -----" & vbCr
Selection.Paragraphs.First.Style = wdStyleNormal
End Sub
選択範囲の前に「—– ここから —–」という段落、後に「—– ここまで —–」という段落を挿入するというものです。
ただ、以下のような選択範囲のときに実行すると
以下のように、InsertAfterで挿入した段落に、インデントが適用されてしまうのです。
今回は、これを解決していきます。
選択範囲の最後の段落を取得する
オーケー、オーケー。
最後の段落なら以下の記事で紹介していますよ。
つまり、Paragraphsコレクションの中で、最後のインデックス番号の段落
または
で取得できます。
こうして取得した最後の段落についてのインデントをなんとかする方法を考えればよいですね。
「標準」スタイルのインデントを確認する
あとはインデントを戻す方法なのですが、いろいろと手段はあります。ただ、今回はシンプルに最初の段落に設定しているように、「標準」スタイルに設定することでインデントを解除していきます。
というのも、「標準」スタイルを設定している段落にカーソルを置いた状態で、「段落の設定」を見てみます。リボンの以下の図の位置をクリックです。
すると、今カーソルがある位置の段落の設定を見ることができます。
- 左インデント:0字
- 右インデント:0字
- 最初の行:なし
となっていますので、インデント関連の設定は何もないことが確認できますね。
選択範囲の最後の段落にスタイルを適用する
ということで、選択範囲の最後の段落に「標準」スタイルを適用していけばよいということですね。
その部分を追加したプロシージャがこちらです。
Sub insertText()
Selection.InsertBefore "----- ここから -----" & vbCr
Selection.InsertAfter "----- ここまで -----" & vbCr
Selection.Paragraphs.First.Style = wdStyleNormal
Selection.Paragraphs.Last.Style = wdStyleNormal
End Sub
実際に課題となっていた選択範囲の状態で実行してみますと
無事に最後の段落のインデントが解除されていますね。
Withステートメントで同一オブジェクトの表記をまとめる
これでバッチリ…なのですが、プロシージャをもう一回見てください。
Sub insertText()
Selection.InsertBefore "----- ここから -----" & vbCr
Selection.InsertAfter "----- ここまで -----" & vbCr
Selection.Paragraphs.First.Style = wdStyleNormal
Selection.Paragraphs.Last.Style = wdStyleNormal
End Sub
なんだか、Selectionに次ぐSelection…正直ウザイですよね。
VBAには同一オブジェクトの表現を一つにまとめる便利なステートメントがあります。
それが、Withステートメントです。
書き方はこうです。
’処理
End With
上記「処理」の中で、Withの後に指定したオブジェクトに対するプロパティやメソッドを指定するときは、そのオブジェクトの表記を省略してピリオド(.)から書き始めることができるようになります。
例えば、今回のプロシージャであれば
Sub insertText()
With Selection
.InsertBefore "----- ここから -----" & vbCr
.InsertAfter "----- ここまで -----" & vbCr
.Paragraphs.First.Style = wdStyleNormal
.Paragraphs.Last.Style = wdStyleNormal
End With
と書き換えることができます。ちょっとスッキリしましたでしょ?
まとめ
以上、Word VBAでWithステートメントを使って同一オブジェクトの表記をスッキリ書く方法でした。
Word VBAですが、ThisDocumentとか、Selectionとか、Paragraphとか、けっこうオブジェクトの表記が長くなりがちなんですよね。
オブジェクト変数を使う方法もありますが、今回紹介したWithステートメントが活躍する局面も多くあると思いますので、ぜひ使ってあげてください。
次回ですが、今回作成したマクロをフォームボタンから呼び出す方法についてお伝えしたいと思います。
どうぞお楽しみに!
連載目次:初心者向けWord VBAで文字入力をしてみよう
お仕事でよく使う文書作成ソフトWord。実は、WordでもVBAでプログラミングができるんです。本シリーズでは、初心者向けとしてWord VBAで文字入力をする方法をお伝えしていきます。- Word VBA入門の最初の一歩!マクロ作成準備の6つのステップ
- Word VBAでカーソル位置に文字を入力するとっても簡単なプログラム
- Word VBA初心者がまず押さえておくべき段落記号の入力方法
- Word VBAで選択範囲の前後に文字列で挿入するマクロを作る方法
- Word VBAで作成したマクロをショートカットキーに登録する方法
- Word VBAを使うなら知っておくべき「段落」の話とその操作方法
- Word VBAで選択範囲の最初の段落&最後の段落を取得する方法
- Word VBA初心者にちゃんと理解して欲しいスタイルとその設定をする方法
- Word VBAでWithステートメントを使って同一オブジェクトの表記をスッキリ書く方法
- Word VBAでフォームを表示&コマンドボタンでマクロを実行する方法
- Word VBAでフォームをEscキーで閉じるようにするテクニック