Home » ワードマクロ・Word VBAの使い方 » Selection » VBAでWord文書のページ全体を取得・選択する

VBAでWord文書のページ全体を取得・選択する

対象:Word2007, Word2010, Word2013

「ワード vba ページ全体選択」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがあります。

いずれかのページ全体を選択する、Word VBA(Visual Basic for Applications)のコードを探している方による検索でしょうか。

[スポンサードリンク]

任意のページ全体を選択するサンプルマクロ

以下のようなマクロで、アクティブな文書の1ページ目全体を選択することができます。

Sub 任意のページ全体を選択する()

 With ActiveWindow
  .View.Type = wdPrintView
  .ActivePane.Pages(1).Rectangles(1).Range.Select
 End With

End Sub

上記のマクロの、
  .ActivePane.Pages(1).Rectangles(1).Range.Select
の部分を、
  .ActivePane.Pages(2).Rectangles(1).Range.Select
とすれば、2ページ目が選択されます。

サンプルマクロのオブジェクト式について

Windowオブジェクトの子オブジェクトであるPaneオブジェクトからページを表すPageオブジェクトを取得する部分と、PageオブジェクトのRectanglesコレクションから本文部分を取得する部分が、ポイントです。

Wordのページは、単なる見た目にすぎないためです。
この感覚は、作文用紙のような決まったフォーマットに文字を書くツールとしてWordを捉えてしまうと、決して理解できないところだと思いますが。

ですから、
  .View.Type = wdPrintView
と、まず表示状態を印刷レイアウトモードにする必要があります。

そのうえで、
  .ActivePane.Pages(1).Rectangles(1).Range.Select
Pageオブジェクトの、Rectangleオブジェクトの、Rangeプロパティでページ全体を表すRangeオブジェクトを取得して、選択を行っています。

ページ全体を順番に選択するサンプルマクロ

以下のようなマクロにすれば、アクティブな文書の全ページを、順番に選択することもできます。

Sub 一ページずつ順番に選択する()

 Dim pg As Page

 With ActiveWindow
  .View.Type = wdPrintView
  For Each pg In .ActivePane.Pages
   pg.Rectangles(1).Range.Select
   MsgBox Selection.Text
  Next pg
 End With

End Sub

上記のマクロを実行するとアクティブ文書内のページが、1ページずつ順番に選択され、そのページ本文の文字列がメッセージボックスに表示されます。

ただし、MsgBox関数の第1引数に指定できる最大文字数は約1024文字という仕様のため、あまりに長い文字列は途中で途切れて表示されます。

上記のマクロはWord 2016では、Rectangleオブジェクトの扱いが変わってしまっているようで、上手く動作しないこともあるようです。(Word 2016のバグではないかと思っていますが...)

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Selection » VBAでWord文書のページ全体を取得・選択する

「Selection」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.