みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けにPowerPoint VBAの入門シリーズをお送りしています。
前回の記事はコチラ。
アクティブなプレゼンテーションを取得する方法についてお伝えしました。
プレゼンテーションを取得できたので、今回はその配下にある「スライド」をオブジェクトとして取得してみたいと思います。
ということで、PowerPoint VBAでプレゼンテーションのスライドを取得する方法です。
コレクションとは何か、ということも解説しますよ。
では、行ってみましょう!
全ての図形やテキストボックスのフォントを変更したい
さて、本シリーズの目標としては
「プレゼンテーションのフォントを一括変更しよう!」
を目標に進めていきます。
例えば、以下のようなプレゼンテーションがあるとしましょう。
このプレゼンテーションの全ての描画オブジェクトについて、そのフォントを変更したいのですが、どう進めましょうか?
まず、前提知識として、前々回にお伝えしたとおり、VBAでは、操作対象をオブジェクトとして取得して、メソッドやプロパティを使うことで操作をすることができます。
いくつか方法は考えられるのですが、今回はオーソドックスに
- 各スライドの図形やテキストボックスをオブジェクトとして取得する
- 取得したオブジェクトのフォントを変更するメソッドやプロパティを使う
という流れで考えてみます。
ざっくりですが。
PowerPointのオブジェクトの階層構造
となると、「各スライドの図形やテキストボックスをオブジェクトとして取得する」というのが、当面の目標となります。
その目標を達成する上で、PowerPointのオブジェクトの階層構造について理解をする必要があります。
PowerPointのオブジェクトは以下の図のように、
- Presentationオブジェクト: プレゼンテーション
- Slideオブジェクト: スライド
- Shapeオブジェクト: 図形やテキストボックスなどの描画オブジェクト
- Slideオブジェクト: スライド
というような「親子関係」「入れ子」の構造になっていることを確認しておきましょう。
もう一つ確認しておくべき点として、親オブジェクトにあたるオブジェクトが取得できていれば、その配下の子オブジェクトを取得するプロパティが用意されているということです。
今回目的となるのは、図形やテキストボックスを表すShapeオブジェクトですから、Presentationオブジェクト→Slideオブジェクト→Shapeオブジェクトという順番に取得していけば良いということになります。
コレクションとは
では、順番どおりに早速PresentationオブジェクトからSlideオブジェクトを取得しよう!…とその前にもう一つ抑えておくべきポイントがあります。
プレゼンテーションにはただ一枚のスライドがある場合もありますが、複数のスライドが存在していることも当然ながらあります。
また、同様に各スライドには複数のShapeオブジェクトが存在し得るわけです。
VBAでは、同種のオブジェクトの集合を「コレクション」と言います。
ですから、Presentationオブジェクトの配下にはSlideオブジェクトの集合つまりSlidesコレクションが存在しています。
したがって、ダンドリとしては
- Slidesコレクションを取得
- Slidesコレクションのうち何らかの方法で操作したいオブジェクトを取得
という手順が必要になります。
ちなみに、プレゼンテーションも複数立ち上げていることがありますので、Presentationsコレクションが存在しています。
もちろん、図形やテキストボックスなどの描画オブジェクトも複数存在していますので、Shapesコレクションが存在します。
つまり、以下表のようにオブジェクトに対応したコレクションが存在しているということになります。
オブジェクト | コレクション |
---|---|
Presentationオブジェクト | Presentationsコレクション |
Slideオブジェクト | Slidesコレクション |
Shapeオブジェクト | Shapesコレクション |
コレクションには複数系ということで「s」がつくのも覚えておきましょう。
また、コレクションは集合を表すオブジェクトなので、プロパティやメソッドなどで操作をすることができます。
Slidesコレクションを取得する
では、実際にPresentationオブジェクトから、Slidesコレクションを取得してみましょう。
以下のSlidesプロパティを使います。
例えば、以下プロシージャを実行すると、今回の例では「2」とイミディエイトウィンドウに表示されます。
Sub Slidesコレクションの取得()
Debug.Print ActivePresentation.Slides.Count
End Sub
Countプロパティは、その名の通り、コレクションに含まれる要素数を取得するプロパティです。
SlidesコレクションからインデックスでSlideオブジェクトを取得する
さて、Slidesコレクションは取得できましたが、コレクションからSlideオブジェクトを特定する必要があります。
一般的に、コレクションからオブジェクトを取得するには、数値型のインデックスを使う方法と、文字列型の名前を使う方法があります。
Slideコレクションの場合はインデックスを使うことが多いでしょう。
インデックスは1から始まる整数ですが、スライド開始番号を変更していなければ、Slideコレクションでいうとスライド番号となりますのでわかりやすいです。
一方で、スライド名はPowerPointが内部的に勝手に決めており、外側からスライド名を把握するのは手がかかります。
例えば、以下のようばプロシージャを実行すると、プレゼンテーションの1枚目のスライドのスライド名とインデックスを確認することができます。
Sub Slidesオブジェクトの取得()
Debug.Print ActivePresentation.Slides(1).Name
Debug.Print ActivePresentation.Slides(1).SlideIndex
End Sub
Nameプロパティ、SlideIndexプロパティはそれぞれスライド名、スライドのインデックスを取得するプロパティです。
まとめ
以上、PowerPoint VBAでスライドを取得する方法についてお伝えしました。
- PowerPointのオブジェクトの階層構造
- コレクションとは何か
- Slidesコレクションを取得する方法
- Slidesコレクションからオブジェクトを特定する方法
といったことをご理解いただけたのではないかと思います。
次回ですが、続いて描画オブジェクト、つまり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文によるループとその使い分けについて