見出し画像

Excel VBAユーザーのためのWord VBA入門 「chapter 2. Documentは文書を表す」

chapter 2では、Word文書を表すDocumentオブジェクトと、Documentsコレクションについて解説します。
DocumentオブジェクトはExcel VBAのWorkbookオブジェクトに、DocumentsコレクションはWorkbooksコレクションに、それぞれ似た部分のあるオブジェクトです。




このnoteは『Excel VBAユーザーのためのWord VBA入門』の、chapter 2 です。「はじめに」と「chapter 1. Excel VBAとWord VBAの違い」をお読みいただいていない方は、先にこれらの無料記事をお読みください。



2-1. ActiveDocumentでアクティブ文書を取得する

アクティブなWord文書を表すDocumentオブジェクトを取得するプロパティ「ActiveDocument」から見ていきましょう。
ActiveDocumentは、Excel VBAのActiveWorkbookに似たプロパティです。


ActiveDocumentはActiveWorkbookに似ている

Excel VBAの場合、ActiveWorkbookプロパティ(図2-1a)で、アクティブなブックを表すWorkbookオブジェクトを取得できます。

図2-1a

同様にWord VBAでは、ActiveDocumentプロパティ(図2-1b)を使うと、アクティブなWord文書を表すDocumentオブジェクトを取得できます。

図2-1b

▲ オブジェクトブラウザーの詳細ペイン1行目に「Property ActiveDocument As Document」と表示されていることから、ActiveDocumentプロパティの戻り値がDocument型のオブジェクトであることがわかります。

● ActiveDocumentを使ったサンプル

以下のWordマクロを実行すると、アクティブなWord文書の名前と保存先のパスが、メッセージボックスに表示されます。

Sub アクティブなDocumentNamePathを取得する()
    MsgBox ActiveDocument.Name
    MsgBox ActiveDocument.Path
End Sub

Cドライブのtempフォルダーに保存されたchapter_2.docmがアクティブな場合は、文書名「chapter_2.docm」と、保存先のパス「C:\temp」が順番に表示されます。
未保存のWord文書がアクティブな場合、「文書1」などと表示されたメッセージボックスと、空白のメッセージボックスが順番に表示されます。
ここで使用している「.Name」「.Path」については、「2-2. 単なるデータを返すDocumentの特徴的なプロパティ」で解説します。

この挙動は、次のExcelマクロを実行すると、アクティブなブックの名前と保存先のパスが順番にメッセージボックスに表示されるのと、よく似ています。

Sub アクティブなWorkbookNamePathを取得する()
    MsgBox ActiveWorkbook.Name
    MsgBox ActiveWorkbook.Path
End Sub


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

ActiveDocumentプロパティは、Word VBAの最上位オブジェクトである、ワープロソフトWordを表すApplicationオブジェクト(図2-1c)にも用意されています。

図2-1c

ですから先ほどのSubプロシージャ内のコード

MsgBox ActiveWorkbook.Name
MsgBox ActiveWorkbook.Path

は、以下のように書いても同じ結果になります。

MsgBox Application.ActiveDocument.Name
MsgBox Application.ActiveDocument.Path

しかし、ActiveDocumentプロパティはグローバルメンバー(図2-1b)でもあるため、

図2-1b(再掲)

「Application.」を省略して、いきなり「ActiveDocument」と書き始めるのが一般的です。

これはExcel VBAのActiveWorkbookを書く場合と同じです。
ActiveWorkbookプロパティは、Excel VBAの最上位オブジェクトであるApplicationにも用意されていますが、グローバルメンバーであるため(図2-1a)、通常はいきなり「ActiveWorkbook」と書き始めます。

図2-1a(再掲)

これと同様にWord VBAでは「Application.」を書かずにいきなり「ActiveDocument」と書き始めるのが一般的です。


2-2. 単なるデータを返す
Documentの特徴的なプロパティ

ActiveDocumentプロパティで取得できる、Documentオブジェクトに用意されているプロパティの中で、「単なるデータを返すプロパティ」からいくつか見ていきましょう。
DocumentはWord文書を表すオブジェクトですから、Word文書に関連するデータを取得するためのプロパティが、たくさん用意されています。

Word VBAでもプロパティは2種類に分類できます。
「単なるデータを返すプロパティ」と、「オブジェクトを返すプロパティ」です。プロパティが2種類あることをご存じない方は、拙著『いちばんやさしいExcelVBAの教本』の、「Lesson 52. プロパティは2種類あることを知っておきましょう」などをご参照ください。


NameプロパティでWord文書の名前を取得

Excel VBAでは、WorkbookオブジェクトのNameプロパティを使ってブックの名前を取得できます。
Word VBAの場合も、Documentオブジェクトに用意されているNameプロパティ(図2-2a)でWord文書の名前(ファイル名)を取得できます。

図2-2a

▲ オブジェクトブラウザーの詳細ペイン1行目に「Property Name As String」と表示されていることから、Nameプロパティの戻り値がString型のデータであることがわかります。 2行目の「読み取り専用」表示から、Nameプロパティを使って設定はできないこともわかります。

「2-1. ActiveDocumentでアクティブ文書を取得する」で実行した、以下のコードで使用していた「.Name」が、DocumentオブジェクトのNameプロパティです。

MsgBox ActiveDocument.Name


●「.Name」の省略はおすすめしません

オブジェクトブラウザーのメンバーペインに表示されているアイコンや、詳細ペインの「Word.Documentの既定メンバー」表示(図2-2a)からわかるとおり、NameプロパティはDocumentオブジェクトの既定メンバーです。

図2-2a(再掲)

ですから「.Name」を省略した以下のコードでも、アクティブなWord文書の名前がメッセージボックスに表示されます。

MsgBox ActiveDocument

ですが、この書き方は可読性が低下するだけですから、おすすめできません。以下のように「.Neme」まで、しっかりと書きましょう。

MsgBox ActiveDocument.Name


Pathプロパティで保存先フォルダーのパスを取得

Excel VBAでは、WorkbookオブジェクトのPathプロパティを使ってブックの保存先フォルダーのパスを取得することができます。
Word VBAの場合も、Documentオブジェクトに用意されているPathプロパティ(図2-2b)で、Word文書の保存先フォルダーのパスを取得できます。

図2-2b

▲ オブジェクトブラウザーの詳細ペイン1行目に「Property Path As String」と表示されていることから、Pathプロパティの戻り値がString型のデータであることがわかります。 2行目の「読み取り専用」表示から、Pathプロパティを使って設定はできないこともわかります。

「2-1. ActiveDocumentでアクティブ文書を取得する」で実行した以下のコードで使用していた「.Path」が、DocumentオブジェクトのPathプロパティです。

MsgBox ActiveDocument.Path


FullNameプロパティで保存先パス+文書名を取得

NameプロパティとPathプロパティの戻り値を合わせたデータを返してくれるプロパティもあります。FullNameプロパティです。
DocumentオブジェクトのFullNameプロパティ(図2-2c)を使うと、パスを含んだWord文書の名前を取得できます。

図2-2c

▲ オブジェクトブラウザーの詳細ペイン1行目に「Property FullName As String」と表示されていることから、FullNameプロパティの戻り値がString型のデータであることがわかります。 2行目の「読み取り専用」表示から、FullNameプロパティを使って設定はできないこともわかります。


本書で学習するDocumentが持つその他のプロパティ

Documentオブジェクトにはたくさんのプロパティが用意されています。その中で、次のような「オブジェクトを返すプロパティ」を、chapter 8までは学習します。

  • Bookmarksプロパティ(chapter 8)

  • Charactersプロパティ(chapter 3)

  • Paragraphsプロパティ(chapter 6)

  • Sentencesプロパティ(chapter 3)

  • Wordsプロパティ(chapter 3)

これらを学習するにつれて、Word文書を表すDocumentオブジェクトの理解が、少しずつ深まっていくはずです。


2-3. Documentをローカルウィンドウで確認しよう

Documentオブジェクトがどのようなデータなのかを、ローカルウィンドウで確認しましょう。
VBEのメニュー[表示]-[ローカルウィドウ]でローカルウィンドウを表示してから、以下のSubプロシージャを、ステップ実行してください。

Sub Documentを確認する()
    Dim doc As Document
    Set doc = ActiveDocument
End Sub

ここから先は

7,432字 / 14画像

¥ 340

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