Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » PowerPoint VBAで段落を取得する

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013

「powerpoint vba 段落の取得」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

段落を取得するPowerPoint VBA(Visual Basic for Applications)のコードを探している方による検索です。

どの段落を取得するのか、段落を取得して何をしたいのかがわかりませんので、参考になりそうな「段落を取得する」マクロを3つご紹介します。

[スポンサードリンク]

段落を取得するサンプルマクロ

テキストボックスに文字列を箇条書きで入力して、そのテキストボックスを選択しておいてから、下記のマクロを実行してください。テキストボックス内の、1つ目の段落が選択され、その段落内の文字列がメッセージボックスに表示されます。

Sub 個々の段落を取得する()

 Dim trg As TextRange

 With ActiveWindow.Selection

  If .Type = ppSelectionNone _
  Or .Type = ppSelectionSlides Then Exit Sub

  Set trg = _
   .ShapeRange.TextFrame.TextRange.Paragraphs(1)
  trg.Select
  MsgBox trg.Text

 End With

End Sub

何も選択されていない場合や、スライドが選択されている場合は、マクロを終了しています。
  If .Type = ppSelectionNone _
  Or .Type = ppSelectionSlides Then Exit Sub
すなわち、テキストボックスなどShapeが選択されているときだけ、段落を取得する処理に入ります。

段落を取得しているのは、
  Set trg = _
   .ShapeRange.TextFrame.TextRange.Paragraphs(1)
の部分です。

TextRangeオブジェクトのParagraphsメソッドで、1つ目の段落を取得しています。Paragraphsの引数を「2」や「3」などに変更して実行していただければ、引数で指定された数値に対応する段落が取得できることを確認できるでしょう。

段落を順番に取得するサンプルマクロ

次は、ループ処理を使った段落を順番に取得するPowerPointマクロです。

複数の段落が存在するテキストボックスを選択した状態で、上記のマクロを実行すると、選択されていたテキストボックス内の段落が順番に選択され、段落内の文字列がメッセージボックスに表示されます。

Sub 選択されているShape内の段落を順番に取得する()

 Dim trg As TextRange

 With ActiveWindow.Selection

  If .Type = ppSelectionNone _
  Or .Type = ppSelectionSlides Then Exit Sub

  For Each trg _
  In .ShapeRange.TextFrame.TextRange.Paragraphs
   trg.Select
   MsgBox trg.Text
  Next trg

 End With

End Sub

なにも選択されていない場合やスライドが選択されている場合にマクロを終了するのは、
  If .Type = ppSelectionNone _
  Or .Type = ppSelectionSlides Then Exit Sub
先にご紹介したマクロと同じです。

このあとのFor Each~Nextループが、段落を順番に取得するメインの処理です。

選択されていたテキストボックス内の、すべての段落に対してループを回して、
  For Each trg _
  In .ShapeRange.TextFrame.TextRange.Paragraphs
各段落の文字列を選択しています。

スライド内の段落を順番に選択するサンプルマクロ

以下のようなマクロで、アクティブなスライド上の、全Shape内の段落を順番に取得できます。

Sub スライド上の段落を順番に取得する()

 Dim shp As Shape
 Dim trg As TextRange

 For Each shp In _
 ActiveWindow.Selection.SlideRange.Shapes

  For Each trg _
  In shp.TextFrame.TextRange.Paragraphs
   trg.Select
   MsgBox trg.Text
  Next trg

 Next shp
 End With

End Sub

アクティブなスライド上のすべてのShapeを対象にFor Each~Nextループを回して、
 For Each shp In _
 ActiveWindow.Selection.SlideRange.Shapes

そのループ処理の中で、先にご紹介した、選択されているテキストボックス内の段落を順番に取得するマクロと同じ処理を行っています。
  For Each trg _
  In shp.TextFrame.TextRange.Paragraphs

TextRangeオブジェクトのParagraphsメソッドが返すのはTextRangeオブジェクト

VBAにある程度慣れている方の中には、上記のマクロを見て「Paragraph」という名前のオブジェクトが返されるのだろうと思っている方がいらっしゃるかもしれませんが、それは違います。

PowerPointには、段落を表すParagraphという名前のオブジェクトは存在しません
段落書式を表すParagraphFormatオブジェクトは存在していますが、Paragraphというオブジェクトはありません。

PowerPoint VBAで段落を取得する

もしもParagraphオブジェクトが存在しているのならば、オブジェクトブラウザーでParagraphFormatの上に「Paragraph」があるはずです。

では、先の「.TextRange.Paragraphs(1)」などのオブジェクト式が何を返すのかというと、TextRangeオブジェクトです。

PowerPoint VBAで段落を取得する

TextRangeオブジェクトのParagraphメソッドはTextRangeオブジェクトを返すのです。

この記事の元になった、
「powerpoint vba 段落の取得」
という検索をした方が段落を取得して何をしたかったのかまではわかりませんが、PowerPoint VBAで段落関連の処理を行いたい場合、TextRange.Paragraphsメソッドが返すのは、TextRangeオブジェクトであるということはしっかり意識しておくことをおすすめします。

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » PowerPoint VBAで段落を取得する

「TextFrame・TextRange」の記事一覧

検索


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

.