みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けPowerPoint VBAの入門シリーズとして、図形やテキストボックスのフォントを変えるマクロの作成を目指しています。
前回の記事はコチラ。
スライドオブジェクトを取得する方法をお伝えしました。
Presentationオブジェクト→Slideオブジェクト…と来ましたので、次はいよいよ図形やテキストボックスなどの描画オブジェクトを表すShapeオブジェクトですね。
では、PowerPoint VBAでShapeオブジェクトを取得する方法です。
For Each文でループを回す方法を使いますよ。
でじゃ、行ってみましょう!
前回までのおさらい
以下のプレゼンテーションを題材として使用します。
2枚のスライドがありますが、両方のスライドに配置してある、全ての図形、テキストボックスについて、そのフォントを変更するマクロを目指していきます。
前回までで、以下のようにSlideオブジェクトの取得まではできるようになりました。
Sub Slidesオブジェクトの取得()
Debug.Print ActivePresentation.Slides(1).Name
Debug.Print ActivePresentation.Slides(1).SlideIndex
End Sub
今回は描画オブジェクト、つまりShapeオブジェクトの取得を目指していきます。
Shapeオブジェクトとは
PowerPoint VBAでは図形、オートシェイプ、テキストボックス、図など、スライドに配置する描画オブジェクトは、全てShapeオブジェクトとして取り扱うことができます。
当然ながら、スライド上には複数のShapeオブジェクトが存在する可能性がありますので、まずはShapesコレクションとして取得する必要があります。
Shapesコレクションを取得する
SlideオブジェクトからShapesコレクションを取得するには、Shapesプロパティを使います。
例えば、以下のプロシージャを前述のプレゼンテーションについて実行をすると、イミディエイトウィンドウに「6」と表示されます。
Sub Shapesコレクションの取得()
Debug.Print ActivePresentation.Slides(1).Shapes.Count
End Sub
CountプロパティはShapesコレクションの要素数を取得するものです。
ShapesコレクションからShapeオブジェクトを取得する
これでShapesコレクションが取得できたので、その中からShapeオブジェクトを特定してみましょう!
…って、どうするんですかね?
前回の記事でコレクションからオブジェクトを取得するには、インデックスか名前かを使うとお伝えしたのですが、どちらもわかりません…
Shapeコレクションについてループを回す
そんなときには、コレクションに含まれる全てのShapeオブジェクトについてループを回すという方法があります。
VBAではコレクション内のオブジェクトを一つ一つ取り出して繰り返し処理をするFor Each文という構文があります。
’処理
Next 変数
まず、コレクションからオブジェクトを一つ取り出して、それを変数にセットします。
変数というのは、値やオブジェクトを入れることができるものです。
For Each文内(For Eachブロックといいます)で、そのオブジェクトを指し示すものとして利用できます。
そのオブジェクトについてFor Eachブロックの処理が終われば、また別のオブジェクトを変数にセットして、ブロック内の処理をします。
このようにコレクションから全てのオブジェクトを取り出し終わるまで繰り返します。
Shapesコレクションについて繰り返し処理をするプロシージャ
では、このFor Each文を実際に使ってみましょう。
以下のプロシージャを作成して実行してみます。
Sub Shapesコレクションのループ()
Dim shp As Shape
For Each shp In ActivePresentation.Slides(1).Shapes
Debug.Print shp.Name
Next shp
End Sub
すると、イミディエイトウィンドウに以下のように出力がされます。
なお、NameプロパティはShapeオブジェクトの名前を取得するものです。
Shapeオブジェクトの名前も、Slideオブジェクトのそれと同様、PowerPointが内部的に決めているもので、外側からは把握することができません。
今回のようなマクロを実行して調べる、ということはよくやります。
変数の宣言
コードの3行目ですが、変数の宣言を行っています。
先ほどもお伝えしましたが、変数とは、値やオブジェクトを入れることができるものです。
For Each文内では「shp」という変数を使用しています。
こちらの記事でお伝えした通り、「変数の宣言を強制する」ようにしましたので、「これからこの変数を、このタイプで使うよ」という宣言が必要なのです。
変数の宣言はDimステートメントで行います。
なお、変数名は基本的に好きに決めることができます。日本語も使えますが、一般的にはアルファベットを使うことが多いです。
まとめ
以上、PowerPoint VBAでShapeコレクションについてループを回す方法をお伝えしました。
これで、Shapeオブジェクトも取得して操作をすることができるようになりました。
次は、Shapeオブジェクトからテキストを取得する方法を見ていきます。
次回、進めていきます!
どうぞお楽しみに!
連載目次:初心者向け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文によるループとその使い分けについて