Word VBAでWithステートメントを使って同一オブジェクトの表記をスッキリ書く方法


with

photo credit: Tambako the Jaguar Two pigs, one carrot! via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Word VBAで入力を便利するマクロの作り方を初心者向けにお伝えしています。

前回はコチラの記事。

Word VBA初心者にちゃんと理解して欲しいスタイルとその設定をする方法
Word VBA初心者向けに入力を便利にする簡単マクロの作り方をお伝えしています。今回はWord VBAで知っておくべきスタイルのこと、またstyleプロパティで段落のスタイルを変更をする方法についてです。

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

選択範囲の前に「—– ここから —–」という段落、後に「—– ここまで —–」という段落を挿入するというものです。

ただ、以下のような選択範囲のときに実行すると

Word文書の選択範囲

以下のように、InsertAfterで挿入した段落に、インデントが適用されてしまうのです。

Word VBAによるマクロを実行

今回は、これを解決していきます。

選択範囲の最後の段落を取得する

オーケー、オーケー。

最後の段落なら以下の記事で紹介していますよ。

Word VBAで選択範囲の最初の段落&最後の段落を取得する方法
初心者向けWord VBAを使って便利な入力ツールを作る方法をお伝えしています。 今回はWord VBAで選択範囲の中から最初の段落と最後の段落を取得して、その文字列を出力する方法をお伝えします。

つまり、Paragraphsコレクションの中で、最後のインデックス番号の段落

Paragraphsコレクション(Selection.Paragraphs.Count)

または

Paragraphsコレクション.Last

で取得できます。

こうして取得した最後の段落についてのインデントをなんとかする方法を考えればよいですね。

「標準」スタイルのインデントを確認する

あとはインデントを戻す方法なのですが、いろいろと手段はあります。ただ、今回はシンプルに最初の段落に設定しているように、「標準」スタイルに設定することでインデントを解除していきます。

というのも、「標準」スタイルを設定している段落にカーソルを置いた状態で、「段落の設定」を見てみます。リボンの以下の図の位置をクリックです。

Wordのリボンから段落の設定

すると、今カーソルがある位置の段落の設定を見ることができます。

Wordの段落ウィンドウ

  • 左インデント:0字
  • 右インデント:0字
  • 最初の行:なし

となっていますので、インデント関連の設定は何もないことが確認できますね。

選択範囲の最後の段落にスタイルを適用する

ということで、選択範囲の最後の段落に「標準」スタイルを適用していけばよいということですね。

その部分を追加したプロシージャがこちらです。

Sub insertText()

Selection.InsertBefore "----- ここから -----" & vbCr
Selection.InsertAfter "----- ここまで -----" & vbCr
Selection.Paragraphs.First.Style = wdStyleNormal
Selection.Paragraphs.Last.Style = wdStyleNormal

End Sub

実際に課題となっていた選択範囲の状態で実行してみますと

Word VBAでマクロを実行

無事に最後の段落のインデントが解除されていますね。

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ステートメントです。

書き方はこうです。

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 VBAで入力を便利にするマクロの作り方を初心者向けということでお送りしています。今回は、Word VBAでフォームを表示する方法、またコマンドボタンでマクロを呼び出す法についてお伝えします。

どうぞお楽しみに!

連載目次:初心者向けWord VBAで文字入力をしてみよう

お仕事でよく使う文書作成ソフトWord。実は、WordでもVBAでプログラミングができるんです。本シリーズでは、初心者向けとしてWord VBAで文字入力をする方法をお伝えしていきます。
  1. Word VBA入門の最初の一歩!マクロ作成準備の6つのステップ
  2. Word VBAでカーソル位置に文字を入力するとっても簡単なプログラム
  3. Word VBA初心者がまず押さえておくべき段落記号の入力方法
  4. Word VBAで選択範囲の前後に文字列で挿入するマクロを作る方法
  5. Word VBAで作成したマクロをショートカットキーに登録する方法
  6. Word VBAを使うなら知っておくべき「段落」の話とその操作方法
  7. Word VBAで選択範囲の最初の段落&最後の段落を取得する方法
  8. Word VBA初心者にちゃんと理解して欲しいスタイルとその設定をする方法
  9. Word VBAでWithステートメントを使って同一オブジェクトの表記をスッキリ書く方法
  10. Word VBAでフォームを表示&コマンドボタンでマクロを実行する方法
  11. Word VBAでフォームをEscキーで閉じるようにするテクニック

タイトルとURLをコピーしました