「パワポマクロ paragraphformat2を使えるようにするには」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
PowerPoint VBAで、ParagraphFormat2オブジェクトを取得するにはどうしたらいいのかを探している方による検索です。
ParagraphFormat2オブジェクトとは
まずはParagraphFormat2が、どんなオブジェクトなのかを確認しておきましょう。
ParagraphFormat2オブジェクトとは、図形内の文字列の段落書式を表すオブジェクトです。
2003までのPowerPoint VBAでも、Shape内の文字列の段落書式を表す「2」のつかないParagraphFormatオブジェクトが存在していました。下図は、PowerPoint 2003のVBE(Visual Basic Editor)でオブジェクトブラウザーを表示して、ParagraphFormatオブジェクトを選択したところです。
Office 2007で図形関連のオブジェクトが一新されたことによって、新たに登場したのがParagraphFormat2オブジェクトです。下図は、PowerPoint 2007のVBEでオブジェクトブラウザーを表示して、ParagraphFormat2オブジェクトを選択したところです。ParagraphFormat2オブジェクトの上にはParagraphFormatオブジェクトも存在していることが確認できます。
ParagraphFormatもParagraphFormat2も、段落書式を表すオブジェクトであるという点では同じですが、持っているプロパティが微妙に異なっています。
「パワポマクロ paragraphformat2を使えるようにするには」
という検索をした方はParagraphFormat2オブジェクトを取得する方法・コードの書き方を探していらしたわけですが、ParagraphFormat2オブジェクトはOffice 2007で登場したオブジェクトですから、2003などの古いPowerPointではそもそも存在していませんから使うことは当然できません。ParagraphFormat2が使えるのは2007・2010・2013です。
TextRange2オブジェクトのParagraphFormtプロパティでParagraphFormt2オブジェクトを取得する
まず結論からいってしまうとParagraphFormat2オブジェクトを取得するには、TextRange2オブジェクトのParagraphFormatプロパティを使います。
ParagraphFormat2オブジェクトを取得するので、何らかのオブジェクトのParagraphFormat2プロパティを使うと考えてしまいがちですが、ParagraphFormat2という名前のプロパティは存在しません。下図はオブジェクトブラウザーで「ParagraphFormat2」を検索したところですが、ParagraphFormat2オブジェクトしか[検索結果]ペインには表示されていません。
ParagraphFormat2オブジェクトを取得するには、TextRange2オブジェクトのParagraphFormatプロパティを利用します。
ParagraphFormat2オブジェクトを取得するために必要な、そのTextRange2オブジェクトを取得するオブジェクト階層の辿り方は、大きく分類すると2つあります。
一つはSelectionオブジェクトから辿る経路、もう一つはShapeオブジェクトのTextFrame2プロパティから辿る経路です。
それぞれのサンプルを2つずつ合計4つのマクロご紹介しておきます。
Selection.TextRange2プロパティ経由でParagraphFormat2オブジェクトを利用するサンプルマクロ
まずは、SelectionオブジェクトのTextRange2プロパティでTextRange2オブジェクトを取得して、TextRange2.ParagraphFormatプロパティでParagraphFormat2オブジェクトを取得するサンプルです。
文字列の入力されているShapeを選択しておいて下記のマクロを実行すると、選択されていたShape内の文字列にインデントが設定されます。
ActiveWindow _
.Selection.TextRange2.ParagraphFormat _
.LeftIndent = 50
PowerPoint VBAで、選択されている図形や、選択されているスライドにだけ処理を行う場合に、
ActiveWindow.Selecttion.ShapeRange
ActiveWindow.Selecttion.SlideRange
といったオブジェクト式を書きます。その仲間のコードです。
上記のマクロで使われている
ActiveWindow.Selection.TextRange2
というオブジェクト式で、アクティブなウィンドウの選択されている図形のTextRange2オブジェクトを取得できます。
取得したTextRange2オブジェクトのParagraphFormatプロパティでParagraphFormat2オブジェクトを取得しているのが、
ActiveWindow.Selection.TextRange2.ParagraphFormat
というオブジェクト式です。
以下のようなFor Each~Nextループにすれば、選択されている複数の図形内文字列にインデントを設定できます。
Dim trng As TextRange2
For Each trng In _
ActiveWindow.Selection.TextRange2
trng.ParagraphFormat.LeftIndent = 50
Next trng
TextRange2オブジェクトはコレクションでもあるので、For Each~NextループでTextRange2コレクションオブジェクトに含まれる個々のTextRange2オブジェクトを取得して、ParagraphFormat2オブジェクトのLeftIndentプロパティを設定しています。
Shape.TextFrame2プロパティ経由でParagraphFormat2オブジェクトを利用するサンプルマクロ
つづいては、ShapeオブジェクトのTextFrame2プロパティから辿るサンプルです。
アクティブなプレゼンテーションの1枚目のスライドに、Shapeを1個だけ作成して文字列を入力しておいてから、以下のマクロを実行してみてください。Shapeに入力されていた文字列がインデントされます。
ActivePresentation.Slides(1).Shapes(1) _
.TextFrame2.TextRange.ParagraphFormat _
.LeftIndent = 50
以下の部分は、PowerPointで1枚目のスライドの1個目のShapeを指定する典型的なオブジェクト式です。
ActivePresentation.Slides(1).Shapes(1) _
次の部分がこのマクロのポイントです。
.TextFrame2.TextRange.ParagraphFormat _
ShapeオブジェクトのTextFrame2プロパティでTextFrame2オブジェクトを取得して、TextFrame2.TextRangeプロパティでTextRange2オブジェクトを取得して、TextRange2.ParagraphFormatプロパティでParagraphFormat2オブジェクトを取得しています。
オブジェクトブラウザーで確認すると、TextFrame2オブジェクトのTextRangeプロパティは、TextRangeオブジェクトではなくTextRange2オブジェクトを返すことがわかります。
TextRange2オブジェクトのParagraphFormatプロパティがParagraphFormat2オブジェクトを返すのは、先に確認したとおりです。
以下のようなマクロにすれば、1枚目のスライド上の全Shape内文字列のインデントが設定されます。
Dim shp As Shape
For Each shp In _
ActivePresentation.Slides(1).Shapes
shp.TextFrame2.TextRange _
.ParagraphFormat.LeftIndent = 50
Next shp
Shapesコレクションオブジェクトに含まれる個々のShapeオブジェクトの設定変更を行うPowerPointでよくお目にかかる処理ですが、この中で使われている「.TextFrame2.TextRange.ParagraphFormat」というオブジェクト式がポイントです。これは先の1個のShape内文字列のインデントを設定するマクロのオブジェクト式と同じです。
文法と階層構造の理解が必要
「パワポマクロ paragraphformat2を使えるようにするには」
という検索をした方は、例えば、何かの参照設定をしたりするとParagraphFormat2オブジェクトを使えると考えていらしたのかもしれませんが、そうではありません。
PowerPointマクロでParagraphFormat2を使うために必要なことは、結局、オブジェクト式の文法を理解してオブジェクトの階層構造を自分自身の頭に叩き込むことです。
利用するプロパティの名前とプロパティの返すオブジェクトの名前が異なっている部分があるため大変だとは思いますが、上記のサンプルを参考にしつつ、自分の手でオブジェクトブラウザー動かしてどのプロパティが何を返すのかを調べながら、どのプロパティがどんなオブジェクトを返すのかといった情報を含んだ階層図を書いたりしながら、頑張ってください!
最終更新日時:2019-06-12 09:55
- Newer:VBAのコレクションはItemとCountを必ず持つ
- Older:二次元配列の次元ごとの要素数を取得する
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » PowerPoint VBAでParagraphFormat2オブジェクトを取得するには