ParagraphFormat2オブジェクトを取得するPowerPoint VBA(Visual Basic for Applications)のオブジェクト式をご紹介しました。
私はこの記事を書く前からParagraphFormat2オブジェクトについて熟知していたわけではありません。
「パワポマクロ paragraphformat2を使えるようにするには」
という検索キーワードをGoogel Analyticsで見つけ、私自身もParagraphFormat2オブジェクトについてはよくわかっていなかったので、いい機会だと捉え、いろいろ調べて記事にしたのです。
ParagraphFormat2オブジェクトを取得する大きく分類して2つ経路があることをご紹介していますが、これをどうやって見つけたのか、手順をまとめておきます。
PowerPointの主たるオブジェクトモデルの階層関係
私は、ParagraphFormat2オブジェクトについてはよく知りませんでしたが、PowerPoint VBAの主たるオブジェクトモデルの階層関係は頭に入っていました。
一つは、
Presentationオブジェクト
└Slideオブジェクト
└Shapeオブジェクト
└TextFrameオブジェクト
└TextRangeオブジェクト
という階層関係、もう一つは、
DocumentWindowオブジェクト
└Selectionオブジェクト
└各種○○Rangeオブジェクト
という階層関係です。
ParagraphFormat2を探す
まず私は、オブジェクトブラウザーで「paragraphformat2」を検索しました。
すると「paragraphformat2」という文字列を含んでいるのは、ParagraphFormat2オブジェクトだけであることがわかります。
このParagraphFormat2オブジェクトを取得する何らかのプロパティやメソッドがあるはずですから、とりあえず「2」を除いた「paragraphformat」で再度検索をしてみます。
するとParagraphFormatプロパティが、3つ見つかりました。
オブジェクトブラウザーの詳細ペインで、それぞれが何を返すのかを確認しながら3つのParagraphFormatプロパティを順番に選択していくと、TextRange2オブジェクトのParagraphFormatプロパティだけが、ParagraphFormat2オブジェクトを返すことがわかります。
つまり、ParagraphFormat2オブジェクトを取得するには、TextRange2オブジェクトを取得しなければならない、ということがわかったわけです。
TextRange2を探す
つづいて、そのTextRange2オブジェクトを取得する方法を見つけるために「textrange2」を検索してみます。
すると、SelectionオブジェクトがTextRange2オブジェクトを返すTextRange2プロパティを持っていることがわかります。
PowerPointの重要な階層関係、
DocumentWindowオブジェクト
└Selectionオブジェクト
└各種○○Rangeオブジェクト
を理解できていれば、SelectionオブジェクトのTextRange2プロパティを使ったオブジェクト式を、この時点で思いつくことができます。
更に、もう一つの重要な階層関係である、
Presentationオブジェクト
└Slideオブジェクト
└Shapeオブジェクト
└TextFrameオブジェクト
└TextRangeオブジェクト
を知っていると、SelectionオブジェクトにしかTextRange2オブジェクトを返すプロパティが存在しているとは、到底思えません。ShapeオブジェクトからTextRange2オブジェクトを取得できる経路が必ずあるはずです。
そこで「TextRange2」から「2」を除いた「textrange」を検索してみます。いくつかのオブジェクトにTextRangeプロパティが存在していることがわかります。
詳細ペインを見ながら、これらのTextRangeプロパティが返すものを確認していくと、TextFrame2オブジェクトのTextRangeプロパティがTextRange2オブジェクトを返すことがわかります。
つまり、ParagraphFormat2オブジェクトを取得するのに、TextFrame2オブジェクトのTextRangeプロパティを使ってTextRange2オブジェクトを取得する経路も存在することが、わかったわけです。
TextFrame2を探す
つづいては、そのTextFrame2オブジェクトを取得するオブジェクト式を見つけなければなりません。
「textframe2」を検索してみると、PowerPoint VBAではよくお世話になる、ShapeオブジェクトやShapeRangeオブジェクトがTextFrame2プロパティを持っていることがわかります。
念のために詳細ペインを確認すると、確かにTextFrame2オブジェクトを返します。
これで、
ShapeまたはShapeRangeオブジェクト
└TextFrame2オブジェクト
└TextRange2オブジェクト
という経路から、ParagraphFormat2オブジェクトが取得できることがわかったわけです。
このような手順で、私はParagraphFormat2オブジェクトを取得する経路を見つけ、先日ご紹介したサンプルマクロを作ったわけです。
オブジェクトの階層関係を探る方法について
オブジェクトの名前がわかっていて、そのオブジェクトを取得する階層関係・上位のオブジェクトやプロパティ・メソッドがわかっていないときには、概ね上記のような手順で探っていくことになるはずです。PowerPointに限らず、WordでもExcelでも、マクロ記録でコードが作られないような場合は同じような手順を踏むことになるはずです。(この手順よりも簡単・確実な方法があるのなら私も知りたいです)
今回のケースでは、プロパティの名前と、プロパティが返すオブジェクトの名前が一致していないことが、とても重要なポイントです。TextRange2オブジェクトを取得するにはTextFrame2.TextRangeプロパティを、ParagraphFormat2オブジェクトを取得するにはTextrRange2.ParagraphFormatプロパティを、それぞれ利用しなければならないという部分です。
このことをしっかり理解するために、TextFrameとTextFrame2の比較、TextRangeとTextRange2の比較、ParagraphFormatとParagraphFormat2の比較を行い一覧表を作成したという側面も実はあります。
最終更新日時:2019-06-13 07:56
- Newer:少人数制で質問等聞きやすかった
- Older:VBAのコレクションはItemとCountを必ず持つ
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか