【初心者向けPowerPoint VBA】Shapeオブジェクトのテキストを取得する方法


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けPowerPoint VBAのシリーズとして、図形やテキストオブジェクトのフォントを変更するマクロを作成する方法をお伝えしています。

前回の記事はコチラ。

PowerPoint VBAでShapeコレクションについてFor Eachループを回す方法
初心者向けPowerPoint VBAの入門シリーズをお伝えしています。今回は、PowerPoint VBAでFor Eachループを使って、コレクション内のShapeオブジェクトを取得する方法です。

スライドのShapeコレクションについてループを回す方法をお伝えしました。

今回はこうして取得した各Shapeオブジェクトに入力されているテキストを取得してみたいと思います。

PowerPoint VBAでShapeオブジェクトのテキストを取得するプロシージャを紹介していきます。

では、行ってみましょう!

スポンサーリンク

前回のおさらいと目標

題材として使用するプレゼンテーションはコチラです。

プレゼンテーションの例

それで、このプレゼンテーションには2枚のスライドがあって、それぞれにいくつかの描画オブジェクトがありますが、全てについてフォントを変更するというのを目標に進めています。

それで、[前回]まで色々学んできたコードはコチラですね。

Sub Shapesコレクションのループ()

Dim shp As Shape
For Each shp In ActivePresentation.Slides(1).Shapes
    Debug.Print shp.Name
Next shp

End Sub

1枚目のスライドについて、全ての描画オブジェクトすなわちShapesコレクションについてループ処理をするというところまで来ました。

目標はフォントを操作することなのですが、そのためにはもうひと手間必要です。

Shapeオブジェクトの構造

さて、ここまで掘って掘ってようやくShapeオブジェクトまでたどりついたのですが、実はこの先がまだまだ全然あります。

具体的には以下のような入れ子構造になっています。

  • 描画オブジェクト: Shapeオブジェクト
    • レイアウト枠: TextFrameオブジェクト
      • テキスト範囲: TextRangeオブジェクト
        • フォント設定: Fontオブジェクト

うわ~…いっぱいありますね。まだ、だいぶ掘らないといけませんね。

今回はTextRangeオブジェクトの取得を目指していきます。順番に解説していきましょう。

レイアウト枠を表すTextFrameオブジェクト

TextFrameオブジェクトは、Shapeオブジェクトのレイアウト枠を表すオブジェクトです。

ご存知の通り、Shapeオブジェクトには、テキストを入力することができます。

TextFrameオブジェクトはその「枠」として、例えば

  • テキストボックスの垂直方向の配置は?
  • 上下左右の余白は?
  • 図形内でテキストを折り返す?

などといったことを司り、それらを操作するプロパティが用意されています。

つまり、「図形の書式設定」の「文字のオプション」→「テキストボックス」での設定項目を設定できるオブジェクトと考えていただくと良いでしょう。

図形の書式設定の文字のオプションのテキストボックスの設定項目

Shapeオブジェクトに対して、レイアウト枠すなわちTextFrameオブジェクトを取得するには、TextFrameプロパティを使います。

Shapeオブジェクト.TextFrame

テキスト範囲を表すTextRangeオブジェクト

Shapeオブジェクトのテキスト範囲を表すのがTextRangeオブジェクトです。

TextRangeオブジェクト内に、文字列が入力されているというイメージで

  • テキスト範囲内の文字列を取得する
  • テキスト範囲をコピー、削除する
  • テキスト範囲に日付、時刻、スライド番号を挿入する
  • テキスト範囲のフォント設定を取得する

といった役割を持ちます。

TextRangeオブジェクトは、レイアウト枠であるTextFrameオブジェクトの配下にありますので、TextFrameオブジェクトに対するTextRangeプロパティで取得します。

TextFrameオブジェクト.TextRange

Shapeオブジェクトのテキストを取得する

TextRangeオブジェクトまで取得できれば、Shapeオブジェクト内の文字列も取得できますので、取得してみましょう。

TextRangeオブジェクトのTextプロパティを使います。

TextRangeオブジェクト.Text

冒頭のプロシージャを少し変更して、Shapeオブジェクトの名前ではなくて、文字列を表示してみましょう。

コードはコチラです。

Sub Shapesコレクションのループでテキストを表示()

Dim shp As Shape
For Each shp In ActivePresentation.Slides(1).Shapes
    Debug.Print shp.TextFrame.TextRange.Text
Next shp

End Sub

実行すると、以下のような出力が得られます。

PowerPointのShapeオブジェクトの文字列

まとめ

以上、PowerPoint VBAでShapeオブジェクトのテキストを取得する方法をお伝えしました。

  • レイアウト枠を表すTextFrameオブジェクト
  • テキスト範囲を表すTextRangeオブジェクト
  • テキストを取得するTextプロパティ

などお伝えしてきました。

階層はちょっと深いですが、それほど難しいものではないと思いますので、最初のうちはお決まり文句的に理解いただいても良いです。

次回、いよいよフォントを操作していきますよ。

PowerPoint VBAでフォント設定をするFontオブジェクトを取得する
初心者向けPowerPoint VBAのシリーズとして、全てのシェイプについてフォントを変更するマクロの作成を目指しています。今回はフォントを設定するFontオブジェクトを取得する方法をお伝えします。

どうぞお楽しみに!

連載目次:初心者向けPowerPoint VBAのはじめの一歩

PowerPointはお仕事で非常によく使うプレゼンテーション作成ソフトですよね。実は、PowerPointでもVBAでプログラミングができるんです。本シリーズでは、初心者向けにPowerPoint VBAの初め方についてお伝えしていきます。
  1. 初心者向けPowerPoint VBAを始める際にはじめにやっておくべきセッティングと手順
  2. 【初心者向け】はじめてのPowerPoint VBAを作成して実行してみよう
  3. 【初心者向けPowerPoint VBA】オブジェクト・プロパティ・メソッドって何?
  4. PowerPoint VBAでアクティブなプレゼンテーションを取得する方法
  5. 【初心者向けPowerPoint VBA】SlidesコレクションとSlideオブジェクトを取得する
  6. PowerPoint VBAでShapeコレクションについてFor Eachループを回す方法
  7. 【初心者向けPowerPoint VBA】Shapeオブジェクトのテキストを取得する方法
  8. PowerPoint VBAでフォント設定をするFontオブジェクトを取得する
  9. PowerPoint VBAでシェイプのフォント設定をする色々なプロパティまとめ
  10. PowerPoint VBAのFor Each文とFor文によるループとその使い分けについて

タイトルとURLをコピーしました