見出し画像

Excel VBAユーザーのためのWord VBA入門 「chapter 7. WordにはSelectionオブジェクトがある」

Wordでマクロ記録を行うと、「Selection.」で始まるコードがよく作られます。
このSelectionは、Word文書上で選択されている箇所を表すSelectionオブジェクトを取得するための、Selectionプロパティです。
chapter 7では、SelectionプロパティとSelectionオブジェクトを見ていきましょう。



この記事は『Excel VBAユーザーのためのWord VBA入門』の、chapter 7 です。「はじめに」から「chapter 6. Paragraphは段落を表す」までをお読みいただいていることを想定して記述しております。



7-1. Selectionオブジェクトとは

Word VBAのSelectionは、Word文書上で選択している範囲や、カーソルのある箇所を表すオブジェクトです。
chapter 3以降で解説してきたRangeと似た部分の多いオブジェクトです。

Selectionは選択範囲を表す

Word文書で何らかの文字列を選択しておいてから以下のコードを実行すると、選択されている文字列がメッセージボックスに表示されます。

MsgBox Selection.Text

このコードで使っている「Selection」が、Selectionオブジェクトを取得するための、グローバルメンバーのSelectionプロパティです(「.Text」については、「7-3. 単なるデータを返すSelectionの特徴的なプロパティ」で解説します)。

SelectionオブジェクトはRangeオブジェクトに似た部分が少なくありませんが、大きな違いがあります。
RangeはWord文書上での選択状態とは無関係であるのに対し、Selectionは選択している範囲やカーソルのある箇所を表す点が、大きく異なります。

このchapter 7では、本文の文字列が選択されている状態、または本文内にカーソルが置かれている状態に限定して解説します。そうではない場合、例えば図形が選択されているようなときには、このchapterの解説とは異なる挙動になることもあります。


Excel VBAと違いSelectionオブジェクトが存在する

Word VBAのSelectionは、Excel VBAのSelectionと大きな違いがあります。Excel VBAにはSelectionという名前のオブジェクトは存在しません。
それに対し、Word VBAにはSelectionオブジェクトが存在するという大きな違いがあります。

● Excel VBAのSelectionプロパティでは戻り値の型は決まっていない

Excel VBAのSlectionをあらためて確認しておきましょう。
Excel VBAのSelectionプロパティ(図7-1a)は、選択されている対象物を表す、何らかのオブジェクトを返します。
返されるオブジェクトが何なのかは、実行するまでわかりません。

図7-1a

▲ オブジェクトブラウザーの詳細ペイン1行目に「Property Selection As Object」と表示されていることから、Selectionプロパティが、(実行時まで実際の型は判明しないけれど)何らかのオブジェクトを返すことがわかります。

例えば、セルが選択されている場合にはセル範囲を表すRangeオブジェクトを、図形の一種である楕円が選択されている場合にはレガシーなオブジェクトであるOvalオブジェクトを、Excel VBAのSelectionプロパティは返します。

● Word VBAのSelectionプロパティは必ずSelectionオブジェックトを返す

それに対しWord VBAには、選択されている対象を表すSelectionオブジェクトが存在します。
Word VBAの場合、Selectionプロパティ(図7-1b)は必ずSelectionオブジェクトを返します。

図7-1b

▲ Word VBAのSelectionプロパティは、必ずSelectionオブジェクトを返しますから、オブジェクトブラウザーの詳細ペイン1行目に「Property Selection As Selection」と表示されています。


Selectionはグローバルなプロパティ

Word VBAのSelectionプロパティは、オブジェクトブラウザーで「Selection」を完全一致検索してみればわかるとおり(図7-1c)、複数のオブジェクトに用意されています。

図7-1c

アプリケーションとしてのWordを表すApplicationオブジェクトにもSelectionプロパティは存在しますから、「Application.Selection」といった書き方ができます。

しかし、chapter 2で学習したActiveDocuentプロパティやDocumentsプロパティと同じく、Selecitonプロパティもグローバルメンバー(図7-1b)ですから、「Application.」を省略して、いきなり「Selection」と書き始めるのが一般的です。

図7-1b(再掲)


7-2. SelectionはDocument - Rangeとは別系統のオブジェクト

Selectionは、本書でこれまで学習してきた「Document - Range」とは、まったく別系統の階層構造に所属するオブジェクトです。

Excel VBAでもWord VBAでも、ファイルの構造に対応したオブジェクトと、表示状態や人間の操作に強く影響されるオブジェクトは、異なる系統の階層構造として実装されています。

Excel VBAの2系統の階層

Excel VBAの、2系統の階層構造を思い出してください。
ファイルの構造に対応する階層構造のオブジェクトと、表示状態や人間の操作に強く影響される階層構造のオブジェクトの2系統です。

● ファイルの構造に対応するオブジェクト

もっとも重要なExcel VBAの階層構造「Workbook - Worksheet - Range」は、Excelで作られるファイルの構造に対応しています。
Excelで作られるブックにはワークシートが存在し、ワークシートの中にはセルが存在します。Excel VBAでブックから辿ってセルを指定する場合の、

Workbooks(1).Worksheets(1).Range("A1")

は、「Workbook – Worksheet - Range」という系統の階層構造を辿って、セルを表すRangeオブジェクトを取得するコードの1つです。

● 表示状態や人間の操作に強く影響されるオブジェクト

それに対し、選択されているシートのみを操作したい場合には、以下のコードのように「Window - Sheets」といった系統の階層を辿ります。

ActiveWindow.SelectedSheets

上記のコード「ActiveWindow.SelectedSheets」は、グローバルメンバーのActiveWindowプロパティ(図7-2a)で、Excelのウィンドウを表すWindowオブジェクトを取得し、Windowオブジェクトに用意されているSelectedSheetsプロパティ(図7-2b)で選択されているシートを表すSheetsコレクションを取得しているコードです。

図7-2a
図7-2b

ActiveWindowプロパティなどで取得できる、Excelのウィンドウを表すWindowオブジェクトが、表示状態や人間の操作に強く影響される系統の階層の中で、最上位のオブジェクトです。

Word VBAの2系統の階層

Word VBAの場合も同様です。
Wordによって作られるファイルの構造に対応する系統の階層構造に属するオブジェクトと、表示状態や人間の操作に強く影響される系統のオブジェクトの2系統があります。

ここから先は

12,628字 / 39画像

¥ 380

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