見出し画像

Excel VBAユーザーのためのWord VBA入門 「chapter 8. ページを扱うには」

3-1. Document下の構造はExcelと異なる」で、Wordのページは仮想的な平面空間に過ぎないことをお伝えしました。
そうはいっても、Wordマクロでページを扱いたいというニーズはあります。chapter 8ではページを扱うWord VBAのコードを紹介します。




この記事は『Excel VBAユーザーのためのWord VBA入門』の、chapter 8 です。「はじめに」から「chapter 7. WordにはSelectionオブジェクトがある」までをお読みいただいていることを想定して記述しております。



8-1. アクティブページを表すRangeを取得する

まずは、アクティブなページを表すRangeオブジェクトを取得するコードを実行しましょう。

以下のコードを実行すると、表示モードが「印刷レイアウト」になり、アクティブページの本文がすべて選択され、アクティブページに入力されている文字列がメッセージボックスに表示されます。

ActiveWindow.View.Type = wdPrintView

With ActiveDocument.Bookmarks.Item("\Page").Range
    .Select
    MsgBox .Text
End With

アクティブページに、大量の文字列が入力されている場合には、MsgBox関数の仕様に従い、表示可能な長さの文字列がメッセージボックスに表示されます。

実行したコードを精読しましょう。

表示モードを印刷レイアウトに

最初に、「印刷レイアウト」ではないときに正しく動作しないことがあるため、View.Typeプロパティ(「7-2. SelectionはDocument-Rangeとは別系統のオブジェクト」参照)を使って表示モードを変更しています。

ActiveWindow.View.Type = wdPrintView


BookmarksとBookmark

ページ数の多い文書の作成時などに便利な、「ブックマーク」という機能がWordにはあります。ブックマークをVBAで操作する際に使うのが、BookmarksコレクションとBookmarkオブジェクトです。

DocumentオブジェクトのBookmarksプロパティ(図8-1a)を使うと、文書に含まれるすべてのブックマークを表すBookmarksコレクションを取得できます。

図8-1a

BookmarksコレクションのItemメソッド(図8-1b)で、単独のブックマークを表すBookmarkオブジェクトを取得できます。

図8-1b

Word VBAでアクティブなページを操作するには、このBookmarkオブジェクトを利用します。


定義済みブックマーク

ブックマークは、Wordユーザーが任意の箇所に設定するのが基本ですが、Microsoftが事前に用意している「定義済みブックマーク」もあります。

Bookmarks.Itemメソッドの引数に、定義済みのブックマークの一つ「\Page」を指定するとアクティブなページを表すBookmarkオブジェクトを取得できます。
これが先ほど実行した以下のコードの「.Item("\Page")」の意味です。

With ActiveDocument.Bookmarks.Item("\Page").Range


 ■ コラム:定義済みブックマークはWordでも使える

定義済みのブックマークの一つ「\Page」は、Wordで使うこともできます。下図のように、Wordの[検索と置換]ダイアログボックス-[ジャンプ]タブ-[移動先]欄で「ブックマーク」を選択して[ブックマーク名]欄に「\Page」と入力してから、

[検索と置換]ダイアログボックス-[ジャンプ]タブ

[ジャンプ]ボタンを押すと、カーソルのあるページの本文全体が選択されます。

 

Bookmark.Rangeでページを表すRangeを取得


BookmarkオブジェクトのRangeプロパティ(図8-1c)を使うと、アクティブなページ全体の文字列範囲を表すRangeオブジェクトを取得できます。

図8-1c

これが、

With ActiveDocument.Bookmarks.Item("\Page").Range

の「.Range」の意味です。

Bookmark.Rangeプロパティで取得できるのは、これまで本書で学習してきたRangeオブジェクトですから、Selectメソッドで選択したり、Textプロパティで文字列を取得したりできます。

With ActiveDocument.Bookmarks.Item("\Page").Range
    .Select
    MsgBox .Text
End With


8-2. ページごとに処理を繰り返すには

アクティブなページを取得するだけでなく、ページ単位で処理を繰り返したいというニーズもあるでしょう。その場合は次のようなコードです。

ここから先は

1,321字 / 1画像

¥ 240

よろしければ、サポートをお願いします!!