パソコン悪戦苦闘記録

Wordマクロ 処理対象の特定(VBAの基礎)

 Wordには、様々なオブジェクトが存在します。
 その様々な「オブジェクトを操作する」命令文、指示文がマクロコードです。




第1 オブジェクトの階層構造
 このようなWordを構成しているオブジェクトは、すべて横一線の対等な関係ではありません。例えば、文書中の「段落」(Paragraphオブジェクト)は、段落内の個々の文字(Fontオブジェクト)より、上位に当たる「親」です。
 そして、「段落」のさらに上位に個々の「文書」があり、文書オブジェクトは段落の「親」となります。
 これは、「段落」(Paragraph)というオブジェクトが、「文書」(Document)というオブジェクトに属していることを意味します。このように、Wordオブジェクト同士は、階層的につながっています。
 つまり、Wordのオブジェクトは、すべてが階層的な構造の中に位置しているのです。
 
 「Word」アプリケーションはオブジェクトの集合体であって、Word自身も最上位に位置するオブジェクトです。Wordを終了するなどの操作は、Wordそのものに対しての操作だからです。VBAでは、WordそのものをApplicationというオブジェクト名で表します。

第2 コレクション
 Wordでは、一度に複数の文書を開くことができます。このような同種のオブジェクトグループを「コレクション」と呼びます。
 例えば、現在Wordで開いている複数の文書のグループは文書コレクションで、その名前は、「Documents」(Documentの複数形)です。
 1個の文書の中の複数の段落は段落コレクションで、その名前は「Paragraphs」(Paragraphの複数形)です。
 コレクションもオブジェクトであって、
  Documentsは、Application(Word)の下位オブジェクト
  Paragraphsは、個々の文書Documentの下位オブジェクト
です。

第3 処理対象のオブジェクトの特定
 マクロの中味(コード)は、「何(オブジェクト)をどうする」を書いた命令文です。したがって、オブジェクト名が分かれば、処理対象を特定できるだろうと、最初は思ってしまいます。ですが、そうではありません。最初につまずくのがここです。
 例えば、「文書内の2番目の段落を処理したい」という場合、単に「Paragraph」と書いても、どの文書のどの段落なのか、分かりません。これでは、処理対象が特定できないのです。
 そこで、上位のオブジェクトからたどっていって、次のよう方法で段落を特定します。
  Documents("作業報告書.docx").Paragraphs(2)
※ 正確な表現は、Application.Documents("作業報告書.docx").Paragraphs(2)
なのですが、「Application」の表記は省略できて、上記のようにDocumentsから始めることができます。


 「Documents("作業報告書.docx")」は、
現在開かれている文書コレクション(Documents)の中の「作業報告書.docx」という文書を表し、
 「Paragraphs(2)」は、
その文書に含まれる段落コレクション(Paragraphs)のうち、2番目の段落を表します。

 この例文のように、階層構造の上位のオブジェクトから下位オブジェクトへとたどっていって、オブジェクト同士を半角ドットで連結すると、処理対象を特定できるのです。

 Documents("作業報告書.docx").Paragraphs(2).Alignment = wdAlignParagraphCenter
とすると、作業報告書という文書の第2段落の配置が中央揃えになります。
 Alignmentは、段落の行配置プロパティで、このプロパティに中央の意味のCenterの値を設定することで、段落配置を中央揃えにできます。

第4 バックグランド処理
 マクロを利用せずに、手作業でWordを操作するには、まず対象オブジェクト選択して、それから操作します。
 例えば、文書本文の文字色を赤色に変更するには、目的文書をまず選択してアクティブにして、マウスカーソルで本文を選択し、フォントカラーを赤にします。
 このように、マクロを使用しない手作業のユーザー操作では、アクティブになっていない文書を操作することはできません。
 ところが、マクロでは、階層構造になっている上位と下位のオブジェクト同士を連結する方法により対象オブジェクトを特定すると、アクティブになっていない別のオブジェクトを処理対象とすることができます。
 複数の文書を開いている状況で、「作業報告書」という名前の文書の文字色を変えるには、手作業では、いったん「作業報告書」をアクティブにする必要があります。ですが、マクロでの処理だと、目の前の文書が作業報告書でない別の文書であっても、「作業報告書」をアクティブにしないまま、その文字色を変更できます。
 つまり、バックグランドで処理が実行されるということです。画面表示は、別の文書であっても、その裏側で、目に見えないところで処理が実行されるのです。
 操作対象をマウスなどでいちいち選択する手作業が不要となります。

ところで、
 私も愛用しているAmazon製のタブレット Fire (私は、Fire HD 8です。)
 その Fire HD 10 にNewモデルが出ます。
 発売日は2019年10月30日。

【1】 Fire HD 10 は、10.1インチ高解像度フルHDディスプレイ。前世代機より30%早く、サクサクと。大画面で迫力のエンターテイメントを楽しめます。
【2】 32GBと64GBの選べる大容量ストレージに加え、512GBまでのmicroSDカード(別売)に対応。最大12時間の長稼働バッテリーで映画やドラマ・ブラウジング・読書・音楽をどこでも楽しめます
【3】 Alexa搭載で、「アレクサ、AKB48の音楽かけて」と話しかけることで操作ができます。
【4】 USB-C接続で、充電も簡単です。
 内蔵ストレージ32GBモデルでは、価格は、¥15,980 です。ちょ~、やっすぅ。
 Amazonプライム会員なら、さらに20%OFFのクーポン適用があります。

【Newモデル】Fire HD 10 タブレット ブラック (10インチHDディスプレイ) 32GB
価格:¥15,980
Amazon


 それでは、また次の記事で。
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「VBAプログラミング・マクロ」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事