Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか


ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013

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を取得するオブジェクト式をどうやって見つけたのか

このParagraphFormat2オブジェクトを取得する何らかのプロパティやメソッドがあるはずですから、とりあえず「2」を除いた「paragraphformat」で再度検索をしてみます。

するとParagraphFormatプロパティが、3つ見つかりました。

ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか

オブジェクトブラウザーの詳細ペインで、それぞれが何を返すのかを確認しながら3つのParagraphFormatプロパティを順番に選択していくと、TextRange2オブジェクトのParagraphFormatプロパティだけが、ParagraphFormat2オブジェクトを返すことがわかります。

ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか

つまり、ParagraphFormat2オブジェクトを取得するには、TextRange2オブジェクトを取得しなければならない、ということがわかったわけです。

TextRange2を探す

つづいて、そのTextRange2オブジェクトを取得する方法を見つけるために「textrange2」を検索してみます。

すると、SelectionオブジェクトがTextRange2オブジェクトを返すTextRange2プロパティを持っていることがわかります。

ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか

PowerPointの重要な階層関係、
 DocumentWindowオブジェクト
  └Selectionオブジェクト
    └各種○○Rangeオブジェクト
を理解できていれば、SelectionオブジェクトのTextRange2プロパティを使ったオブジェクト式を、この時点で思いつくことができます。

更に、もう一つの重要な階層関係である、
 Presentationオブジェクト
  └Slideオブジェクト
    └Shapeオブジェクト
      └TextFrameオブジェクト
        └TextRangeオブジェクト
を知っていると、SelectionオブジェクトにしかTextRange2オブジェクトを返すプロパティが存在しているとは、到底思えません。ShapeオブジェクトからTextRange2オブジェクトを取得できる経路が必ずあるはずです。

そこで「TextRange2」から「2」を除いた「textrange」を検索してみます。いくつかのオブジェクトにTextRangeプロパティが存在していることがわかります。

ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか

詳細ペインを見ながら、これらのTextRangeプロパティが返すものを確認していくと、TextFrame2オブジェクトのTextRangeプロパティがTextRange2オブジェクトを返すことがわかります。

ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか

つまり、ParagraphFormat2オブジェクトを取得するのに、TextFrame2オブジェクトのTextRangeプロパティを使ってTextRange2オブジェクトを取得する経路も存在することが、わかったわけです。

TextFrame2を探す

つづいては、そのTextFrame2オブジェクトを取得するオブジェクト式を見つけなければなりません。

「textframe2」を検索してみると、PowerPoint VBAではよくお世話になる、ShapeオブジェクトやShapeRangeオブジェクトがTextFrame2プロパティを持っていることがわかります。

ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか

念のために詳細ペインを確認すると、確かにTextFrame2オブジェクトを返します。

ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか

これで、
 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

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか

TrackBack:0

TrackBack URL

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » ParagraphFormat2を取得するオブジェクト式をどうやって見つけたのか

「TextFrame・TextRange」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.