みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けのWord VBAのシリーズということで便利な文字を入力するマクロの作り方をお伝えしています。
前回の記事はこちら。
Word VBAで作成したマクロをショートカットキーに設定する方法をお伝えしました。
これで、文書を作りながらガンガンマクロの活用ができるというもの…!
と思いきや、これまで作ってきたマクロですが、状況によってうまく動作しないときがあるのです…。
それを解決するためには、Wordでいうと非常に重要な概念である「段落」、Word VBAで言うところのParagraphオブジェクトについて理解をする必要があります。
今回は、Word VBAで段落を表すParagraphオブジェクトとは何かについてお伝えしていきます。
文字列を挿入するWordマクロ
前回までに作ったマクロですが、選択範囲の前後に文字列を挿入するというものです。
百聞は一見にしかず、こちらのアニメをご覧ください。
素敵ですね。
実際のコードはこちら。
Sub insertText()
Selection.InsertBefore "----- ここから -----" & vbCr
Selection.InsertAfter "----- ここまで -----" & vbCr
End Sub
もう連載6回目なのに、たったの二行…Word VBA深いですね。
うまく動作してくれない例
さて、このマクロなのですが、一部の状況において、うまく動作をしないことがあります。
例えば、以下のように箇条書きスタイルになっている段落を選択範囲としている場合です。
この状態でマクロを実行すると…以下のように、InsertBeforeメソッドで挿入した段落にも箇条書きスタイルが適用されてしまっています。スタイル適用されなくていいのに…。
別の例もあります。
以下図のように、段落の冒頭がインデントされている段落を選択範囲としているときです。
この状態でマクロを実行すると、これまたInsertBeforeで挿入した段落にインデントが適用されてしまっています。インデントされなくていいのに…
Wordの文字書式と段落書式
これの現象を解決するためには、Wordの「段落」について理解をしておく必要があります。
Wordでの書式設定は、実は2種類あります。フォントの種類、フォントのサイズ、太字や下線などは、文字単位で設定をする「文字書式」と言われています。一方で、スタイル(箇条書き、見出しなど)、インデント、配置などは、段落単位で設定する「段落書式」です。
つまり、段落書式を変更したいなら、段落を操作するのですよ。
この違いを理解せずに、全部文字単位で書式設定できちゃうと勘違いしていると、Wordはかなり使いづらいですし、当然ながらWord VBAの習得も大変です。
今回の例では、スタイルやインデントを調整したいわけですから、この場合もVBAで段落書式を操作していきたいということになります。
Paragraphオブジェクトを操作する
Wordの段落を取り扱うにはParagraphオブジェクトを使います。
Paragraphオブジェクトについてイメージをつかむために
- 現在の文書から段落を取得
- 特定の段落の配置を変える
という処理をしてみたいと思います。
では、以下コマンドをイミディエイトウィドウで入力して Enter してみましょう。
ThisDocument.Paragraphs(3).Alignment = wdAlignParagraphCenter
ちょっと長いですが、それぞれちゃんとメンバー補完が効きます。困ったら Ctrl + Space ですよ~。
さて、これを実行すると以下のように、一つの段落が中央揃えになりました。
ドキュメント全体の段落を取得する
先ほどの命令を解説していきましょう。
まず、ThisDocumentは現在マクロを記述しているドキュメントを表すオブジェクト名です。かなり便利によく使うと思いますので、覚えておきましょう。
次いで、そのドキュメントについてのParagraphsコレクションをつかんでいます。
コレクションは同種のオブジェクトの集合ですから、これで現在のドキュメントに含まれる全ての段落を集合として取得したということです。
段落の配置を変更する
コレクションの要素には、インデックス番号という1から始まる整数が振られています。
Paragraphsコレクションに対して、インデックス番号を指定してParagraphオブジェクトを取得するには
とします。今回の例では、インデックス番号3のオブジェクトをつかんだということですね。
また、段落の配置を変更するには、ParagraphオブジェクトのAlignmentプロパティを設定します。
配置に関しては以下の定数を参照ください。補完が効くとはいえ…長い。
定数 | 配置 |
---|---|
wdAlignParagraphLeft | 左揃え |
wdAlignParagraphCenter | 中央揃え |
wdAlignParagraphRight | 右揃え |
wdAlignParagraphJustify | 両端揃え |
wdAlignParagraphDistribute | 均等割り付け |
Paragraphsコレクションのインデックス番号
今回、インデックス番号が3の段落を中央揃えしたわけですが、よーく文書を眺めると、なんとなく気づくのですが、Paragraphsコレクションのインデックス番号は文書の最初から順番に振られているんですね。
つまり、以下のようなナンバリングです。
この特性を利用すれば、段落操作も楽になるというものです。
まとめ
今回は以上ですが、Word VBAでの段落の考え方と操作について、ある程度イメージができたのではないかと思います。
- Wordの書式には文字書式と段落書式がある
- 段落操作にはParagraphオブジェクトを使う
- Paragraphsコレクションは上から順にインデックス番号が振られている
などといったことが今回のポイントです。
では、次回は選択範囲の中の段落について操作をしていきたいと思います。
どうぞお楽しみに!
連載目次:初心者向け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キーで閉じるようにするテクニック