Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » PowerPoint VBAでParagraphFormat2オブジェクトを取得するには

PowerPoint VBAでParagraphFormat2オブジェクトを取得するには

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013

PowerPoint VBAでParagraphFormat2オブジェクトを取得するには

「パワポマクロ paragraphformat2を使えるようにするには」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

PowerPoint VBAで、ParagraphFormat2オブジェクトを取得するにはどうしたらいいのかを探している方による検索です。

[スポンサードリンク]

ParagraphFormat2オブジェクトとは

まずはParagraphFormat2が、どんなオブジェクトなのかを確認しておきましょう。

ParagraphFormat2オブジェクトとは、図形内の文字列の段落書式を表すオブジェクトです。

2003までのPowerPoint VBAでも、Shape内の文字列の段落書式を表す「2」のつかないParagraphFormatオブジェクトが存在していました。下図は、PowerPoint 2003のVBE(Visual Basic Editor)でオブジェクトブラウザーを表示して、ParagraphFormatオブジェクトを選択したところです。

PowerPoint VBAでParagraphFormat2オブジェクトを取得するには

Office 2007で図形関連のオブジェクトが一新されたことによって、新たに登場したのがParagraphFormat2オブジェクトです。下図は、PowerPoint 2007のVBEでオブジェクトブラウザーを表示して、ParagraphFormat2オブジェクトを選択したところです。ParagraphFormat2オブジェクトの上にはParagraphFormatオブジェクトも存在していることが確認できます。

PowerPoint VBAでParagraphFormat2オブジェクトを取得するには

ParagraphFormatもParagraphFormat2も、段落書式を表すオブジェクトであるという点では同じですが、持っているプロパティが微妙に異なっています

「パワポマクロ paragraphformat2を使えるようにするには」
という検索をした方はParagraphFormat2オブジェクトを取得する方法・コードの書き方を探していらしたわけですが、ParagraphFormat2オブジェクトはOffice 2007で登場したオブジェクトですから、2003などの古いPowerPointではそもそも存在していませんから使うことは当然できません。ParagraphFormat2が使えるのは2007・2010・2013です。

TextRange2オブジェクトのParagraphFormtプロパティでParagraphFormt2オブジェクトを取得する

まず結論からいってしまうとParagraphFormat2オブジェクトを取得するには、TextRange2オブジェクトのParagraphFormatプロパティを使います。

ParagraphFormat2オブジェクトを取得するので、何らかのオブジェクトのParagraphFormat2プロパティを使うと考えてしまいがちですが、ParagraphFormat2という名前のプロパティは存在しません。下図はオブジェクトブラウザーで「ParagraphFormat2」を検索したところですが、ParagraphFormat2オブジェクトしか[検索結果]ペインには表示されていません。

PowerPoint VBAでParagraphFormat2オブジェクトを取得するには

ParagraphFormat2オブジェクトを取得するには、TextRange2オブジェクトのParagraphFormatプロパティを利用します。

PowerPoint VBAでParagraphFormat2オブジェクトを取得するには

ParagraphFormat2オブジェクトを取得するために必要な、そのTextRange2オブジェクトを取得するオブジェクト階層の辿り方は、大きく分類すると2つあります。

一つはSelectionオブジェクトから辿る経路、もう一つはShapeオブジェクトのTextFrame2プロパティから辿る経路です。

それぞれのサンプルを2つずつ合計4つのマクロご紹介しておきます。

Selection.TextRange2プロパティ経由でParagraphFormat2オブジェクトを利用するサンプルマクロ

まずは、SelectionオブジェクトのTextRange2プロパティでTextRange2オブジェクトを取得して、TextRange2.ParagraphFormatプロパティでParagraphFormat2オブジェクトを取得するサンプルです。

文字列の入力されているShapeを選択しておいて下記のマクロを実行すると、選択されていたShape内の文字列にインデントが設定されます。

Sub Selection_TextRange2のサンプル_1()

 ActiveWindow _
 .Selection.TextRange2.ParagraphFormat _
 .LeftIndent = 50

End Sub

PowerPoint VBAで、選択されている図形や、選択されているスライドにだけ処理を行う場合に、
 ActiveWindow.Selecttion.ShapeRange
 ActiveWindow.Selecttion.SlideRange
といったオブジェクト式を書きます。その仲間のコードです。

上記のマクロで使われている
 ActiveWindow.Selection.TextRange2
というオブジェクト式で、アクティブなウィンドウの選択されている図形のTextRange2オブジェクトを取得できます。

PowerPoint VBAでParagraphFormat2オブジェクトを取得するには

取得したTextRange2オブジェクトのParagraphFormatプロパティでParagraphFormat2オブジェクトを取得しているのが、
 ActiveWindow.Selection.TextRange2.ParagraphFormat
というオブジェクト式です。

以下のようなFor Each~Nextループにすれば、選択されている複数の図形内文字列にインデントを設定できます。

Sub Selection_TextRange2のサンプル_2()

 Dim trng As TextRange2

 For Each trng In _
 ActiveWindow.Selection.TextRange2
  trng.ParagraphFormat.LeftIndent = 50
 Next trng

End Sub

TextRange2オブジェクトはコレクションでもあるので、For Each~NextループでTextRange2コレクションオブジェクトに含まれる個々のTextRange2オブジェクトを取得して、ParagraphFormat2オブジェクトのLeftIndentプロパティを設定しています。

Shape.TextFrame2プロパティ経由でParagraphFormat2オブジェクトを利用するサンプルマクロ

つづいては、ShapeオブジェクトのTextFrame2プロパティから辿るサンプルです。

アクティブなプレゼンテーションの1枚目のスライドに、Shapeを1個だけ作成して文字列を入力しておいてから、以下のマクロを実行してみてください。Shapeに入力されていた文字列がインデントされます。

Sub ParagraphFormat2オブジェクトを取得するサンプル2()

 ActivePresentation.Slides(1).Shapes(1) _
 .TextFrame2.TextRange.ParagraphFormat _
 .LeftIndent = 50

End Sub

以下の部分は、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オブジェクトを返すことがわかります。

PowerPoint VBAでParagraphFormat2オブジェクトを取得するには

TextRange2オブジェクトのParagraphFormatプロパティがParagraphFormat2オブジェクトを返すのは、先に確認したとおりです。

以下のようなマクロにすれば、1枚目のスライド上の全Shape内文字列のインデントが設定されます。

Sub TextFrame2_TextRangeのサンプル_2()

 Dim shp As Shape

 For Each shp In _
 ActivePresentation.Slides(1).Shapes
  shp.TextFrame2.TextRange _
  .ParagraphFormat.LeftIndent = 50
 Next shp

End Sub

Shapesコレクションオブジェクトに含まれる個々のShapeオブジェクトの設定変更を行うPowerPointでよくお目にかかる処理ですが、この中で使われている「.TextFrame2.TextRange.ParagraphFormat」というオブジェクト式がポイントです。これは先の1個のShape内文字列のインデントを設定するマクロのオブジェクト式と同じです。

文法と階層構造の理解が必要

「パワポマクロ paragraphformat2を使えるようにするには」
という検索をした方は、例えば、何かの参照設定をしたりするとParagraphFormat2オブジェクトを使えると考えていらしたのかもしれませんが、そうではありません。

PowerPointマクロでParagraphFormat2を使うために必要なことは、結局、オブジェクト式の文法を理解してオブジェクトの階層構造を自分自身の頭に叩き込むことです。

利用するプロパティの名前とプロパティの返すオブジェクトの名前が異なっている部分があるため大変だとは思いますが、上記のサンプルを参考にしつつ、自分の手でオブジェクトブラウザー動かしてどのプロパティが何を返すのかを調べながら、どのプロパティがどんなオブジェクトを返すのかといった情報を含んだ階層図を書いたりしながら、頑張ってください!

(この記事で利用しているオブジェクト式をどうやって見つけたのかをまとめました。2015-08-19追記)

最終更新日時:2019-06-12 09:55

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » PowerPoint VBAでParagraphFormat2オブジェクトを取得するには

「TextFrame・TextRange」の記事一覧

検索


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

.