![見出し画像](https://assets.st-note.com/production/uploads/images/159769886/rectangle_large_type_2_79e0b85f476568d5d6334d5b7889483c.png?width=1200)
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コレクションを取得できます。
![](https://assets.st-note.com/img/1729738618-8R0DZ7wazJ14XqGFjUtxLklA.png?width=1200)
BookmarksコレクションのItemメソッド(図8-1b)で、単独のブックマークを表すBookmarkオブジェクトを取得できます。
![](https://assets.st-note.com/img/1729738671-UVGYJKks5qbyanjczQDufr4E.png?width=1200)
Word VBAでアクティブなページを操作するには、このBookmarkオブジェクトを利用します。
定義済みブックマーク
ブックマークは、Wordユーザーが任意の箇所に設定するのが基本ですが、Microsoftが事前に用意している「定義済みブックマーク」もあります。
Bookmarks.Itemメソッドの引数に、定義済みのブックマークの一つ「\Page」を指定するとアクティブなページを表すBookmarkオブジェクトを取得できます。
これが先ほど実行した以下のコードの「.Item("\Page")」の意味です。
With ActiveDocument.Bookmarks.Item("\Page").Range
■ コラム:定義済みブックマークはWordでも使える
定義済みのブックマークの一つ「\Page」は、Wordで使うこともできます。下図のように、Wordの[検索と置換]ダイアログボックス-[ジャンプ]タブ-[移動先]欄で「ブックマーク」を選択して[ブックマーク名]欄に「\Page」と入力してから、
![](https://assets.st-note.com/img/1730182406-4DJPLRtEmev7hW83ulKFxcSU.png?width=1200)
[ジャンプ]ボタンを押すと、カーソルのあるページの本文全体が選択されます。
Bookmark.Rangeでページを表すRangeを取得
BookmarkオブジェクトのRangeプロパティ(図8-1c)を使うと、アクティブなページ全体の文字列範囲を表すRangeオブジェクトを取得できます。
![](https://assets.st-note.com/img/1729740242-07P3uCGFLRHIyvY9MiphQjft.png?width=1200)
これが、
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. ページごとに処理を繰り返すには
アクティブなページを取得するだけでなく、ページ単位で処理を繰り返したいというニーズもあるでしょう。その場合は次のようなコードです。
ここから先は
¥ 240
よろしければ、サポートをお願いします!!