WordVBAのオブジェクトモデル

Word-VBAで扱うでは、膨大な種類のオブジェクトが存在します。 これらの最上位階層は、 Application オブジェクトとなります。 Applicationオブジェクトは、Wordアプリ自体を表します。Application オブジェクトは、 Document・ Selection・ Bookmark・Rangeオブジェクトを含んでいます。

私も改めて図にしてみると、BookmarksメンバーにRangeがある一方で、RangeオブジェクトのメンバーにBookmarksオブジェクトが存在しており複雑に見えます。ただそれはBookmarkがさす範囲か、Document内の範囲にあるBookmarksかの違いがあります。
たとえば、Rangeオブジェクトに書式を設定するときも現在の選択範囲ならSelectionオブジェクト、特定の段落であればDocumentオブジェクトというように、処理を行いたい部位によってオブジェクトを選択する必要があります。
このように同じオブジェクトでもそれをメンバーとするオブジェクトによってそれぞれにさすものが異なっています。

Applicationオブジェクト

ApplicationオブジェクトはWordアプリ自体をさし、すべてのオブジェクトの親となります。 Applicationオブジェクトのメンバーは、Wordの環境をコントロールするものが多数あり、アプリ全体に適用されます。 たとえばマクロ自体の高速化を図るためによく使用される”Application.ScreenUpdating=False”の処理は、ワードアプリに適用されるため、現在開いているすべてのドキュメントの画面更新が停止します。

Selectionオブジェクト

Selection オブジェクトは、現在選択されている範囲をさすオブジェクトです。 Selection オブジェクトは、文書内に常に存在し、Wordアプリ上で 何も選択されていない場合は、挿入ポイントをさします。

Documentオブジェクト

Document オブジェクトは、文書とそのすべてのコンテンツを表します。 文書を開いたり、新規文書を起こしたりすると、新しい Document オブジェクトが作成されます。その中でも現在作業中のドキュメントを”ActiveDocument”オブジェクトとして取得することができます。

Rangeオブジェクト

Range オブジェクトは、文書内の連続した領域をさします。開始文字位置と終了文字位置によって定義されます。 Word-VBAでRange オブジェクトを扱うには次の点に注意が必要です。

  • 単独の挿入ポイント、テキストの範囲、または文書全体で構成される
  • 空白、タブ文字、段落記号などの非印刷文字を含む
  • 現在の選択範囲、または現在の選択範囲とは異なる領域を表すことができる
  • 常に表示されている選択範囲とは異なり、文書内には表示されない
  • 範囲の末尾にテキストを追加すると、Rangeオブジェクトの範囲が追加したテキストまで自動的に範囲が拡張される

Bookmarkオブジェクト

Bookmark オブジェクトは、Range オブジェクトと同様に開始位置と終了位置によって文書内の連続した領域を表します。 Range オブジェクトが連続する領域をさすにとどまるのに対し、Bookmarkオブジェクトは、文書内の場所にマークを付けたり、文書内のテキストのコンテナーとして使用したりできます。 Bookmark には、 Range オブジェクトとは異なる点は次の通りです。

  • デザイン時に、ブックマークに名前を付けることができます。
    /
  • 文章の構成要素なので、文書と共に保存されるため、コードの実行を停止したり文書を閉じたりしても、記録されている