「powerpoint vba 段落の取得」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
段落を取得するPowerPoint VBA(Visual Basic for Applications)のコードを探している方による検索です。
どの段落を取得するのか、段落を取得して何をしたいのかがわかりませんので、参考になりそうな「段落を取得する」マクロを3つご紹介します。
段落を取得するサンプルマクロ
テキストボックスに文字列を箇条書きで入力して、そのテキストボックスを選択しておいてから、下記のマクロを実行してください。テキストボックス内の、1つ目の段落が選択され、その段落内の文字列がメッセージボックスに表示されます。
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マクロです。
複数の段落が存在するテキストボックスを選択した状態で、上記のマクロを実行すると、選択されていたテキストボックス内の段落が順番に選択され、段落内の文字列がメッセージボックスに表示されます。
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内の段落を順番に取得できます。
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
アクティブなスライド上のすべての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というオブジェクトはありません。
もしもParagraphオブジェクトが存在しているのならば、オブジェクトブラウザーでParagraphFormatの上に「Paragraph」があるはずです。
では、先の「.TextRange.Paragraphs(1)」などのオブジェクト式が何を返すのかというと、TextRangeオブジェクトです。
TextRangeオブジェクトのParagraphメソッドはTextRangeオブジェクトを返すのです。
この記事の元になった、
「powerpoint vba 段落の取得」
という検索をした方が段落を取得して何をしたかったのかまではわかりませんが、PowerPoint VBAで段落関連の処理を行いたい場合、TextRange.Paragraphsメソッドが返すのは、TextRangeオブジェクトであるということはしっかり意識しておくことをおすすめします。
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » TextFrame・TextRange » PowerPoint VBAで段落を取得する