みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けPowerPoint VBAのシリーズとして、図形やテキストオブジェクトのフォントを変更するマクロを作成する方法をお伝えしています。
前回の記事はコチラ。
スライドの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オブジェクト
うわ~…いっぱいありますね。まだ、だいぶ掘らないといけませんね。
今回はTextRangeオブジェクトの取得を目指していきます。順番に解説していきましょう。
レイアウト枠を表すTextFrameオブジェクト
TextFrameオブジェクトは、Shapeオブジェクトのレイアウト枠を表すオブジェクトです。
ご存知の通り、Shapeオブジェクトには、テキストを入力することができます。
TextFrameオブジェクトはその「枠」として、例えば
- テキストボックスの垂直方向の配置は?
- 上下左右の余白は?
- 図形内でテキストを折り返す?
などといったことを司り、それらを操作するプロパティが用意されています。
つまり、「図形の書式設定」の「文字のオプション」→「テキストボックス」での設定項目を設定できるオブジェクトと考えていただくと良いでしょう。
Shapeオブジェクトに対して、レイアウト枠すなわちTextFrameオブジェクトを取得するには、TextFrameプロパティを使います。
テキスト範囲を表すTextRangeオブジェクト
Shapeオブジェクトのテキスト範囲を表すのがTextRangeオブジェクトです。
TextRangeオブジェクト内に、文字列が入力されているというイメージで
- テキスト範囲内の文字列を取得する
- テキスト範囲をコピー、削除する
- テキスト範囲に日付、時刻、スライド番号を挿入する
- テキスト範囲のフォント設定を取得する
といった役割を持ちます。
TextRangeオブジェクトは、レイアウト枠であるTextFrameオブジェクトの配下にありますので、TextFrameオブジェクトに対するTextRangeプロパティで取得します。
Shapeオブジェクトのテキストを取得する
TextRangeオブジェクトまで取得できれば、Shapeオブジェクト内の文字列も取得できますので、取得してみましょう。
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 VBAでShapeオブジェクトのテキストを取得する方法をお伝えしました。
- レイアウト枠を表すTextFrameオブジェクト
- テキスト範囲を表すTextRangeオブジェクト
- テキストを取得するTextプロパティ
などお伝えしてきました。
階層はちょっと深いですが、それほど難しいものではないと思いますので、最初のうちはお決まり文句的に理解いただいても良いです。
次回、いよいよフォントを操作していきますよ。
どうぞお楽しみに!
連載目次:初心者向けPowerPoint VBAのはじめの一歩
PowerPointはお仕事で非常によく使うプレゼンテーション作成ソフトですよね。実は、PowerPointでもVBAでプログラミングができるんです。本シリーズでは、初心者向けにPowerPoint VBAの初め方についてお伝えしていきます。- 初心者向けPowerPoint VBAを始める際にはじめにやっておくべきセッティングと手順
- 【初心者向け】はじめてのPowerPoint VBAを作成して実行してみよう
- 【初心者向けPowerPoint VBA】オブジェクト・プロパティ・メソッドって何?
- PowerPoint VBAでアクティブなプレゼンテーションを取得する方法
- 【初心者向けPowerPoint VBA】SlidesコレクションとSlideオブジェクトを取得する
- PowerPoint VBAでShapeコレクションについてFor Eachループを回す方法
- 【初心者向けPowerPoint VBA】Shapeオブジェクトのテキストを取得する方法
- PowerPoint VBAでフォント設定をするFontオブジェクトを取得する
- PowerPoint VBAでシェイプのフォント設定をする色々なプロパティまとめ
- PowerPoint VBAのFor Each文とFor文によるループとその使い分けについて