
photo credit: Jewelry making supplies findings. Natural wood for pendants, earrings, necklaces, rings, bracelets, brooches, charms, keychains, magnets … via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでPowerPointを操作する方法についてシリーズでお伝えしています。
前回はコチラの記事でした。
エクセルVBAでPowerPointプレゼンテーションを開き、スライドを取得するというところまでお伝えしました。
PowerPointのオブジェクト構造はアプリケーション→プレゼンテーション→スライドという階層構造になっているのですが、今回はスライドの配下にあるシェイプについてお伝えしていきたいと思います。
エクセルVBAでPowerPointスライドのシェイプ一覧を取得する方法です。
では、行ってみましょう。
シェイプとは何か
PowerPointを操作すると言ったら、テキストボックスの中のテキストを入力したり、円や四角形のオブジェクトを移動したりコピーしたり、エクセルからグラフをコピーして貼り付けしたり、といった操作になります。
PowerPointではそれらのテキストボックス、円や四角形のオブジェクト、グラフなどスライドに配置するアイテムは全て「シェイプ」と言います。
英語ではshapeと書きまして、「形、形状、かっこう」といった意味ですが、PowerPointにおけるシェイプとはMicrosoftによると
PowerPoint プレゼンテーションはスライドの集合で構成されていますが、一般的に PowerPoint スライドは 1 つまたは複数の Shape オブジェクトで構成されています。ピクチャ、タイトル、テキスト、OLE オブジェクト、オートシェイプなど、スライドに含まれるアイテムはすべて Shape オブジェクトです。
と説明されています。
PowerPointスライド上のシェイプ名を書き出すプログラム
では、そんなシェイプを操作していきたいと思いますが、こちらのプログラムを実行してみましょう。
Sub PowerPointシェイプのNameを出力する() Dim ppApp As New PowerPoint.Application ppApp.Visible = True Dim ppPrs As PowerPoint.Presentation Set ppPrs = ppApp.Presentations.Open(ThisWorkbook.Path & "\ひな形.pptx") Dim ppSld As PowerPoint.Slide 'スライドオブジェクト Set ppSld = ppPrs.Slides(1) '1ページ目のスライドをセット Dim shp As Object For Each shp In ppSld.Shapes Debug.Print shp.Name Next shp ppApp.Quit Set ppApp = Nothing End Sub
10行目までは前回のプログラムと同様です。
- PowerPointアプリケーション、プレゼンテーション、スライドの各オブジェクトを準備
- 「ひな形.pptx」を開き、1ページ目をppSldにセット
という動作ですね。
Shapesオブジェクト
その先の部分ですがShapesオブジェクトというものが出てきますね。
と指定することで、指定したスライド上のShapeオブジェクトのコレクションを表します。
ShapesオブジェクトはPowerPointの操作でかなり頻繁に使うので覚えておいてください。
言い換えると
- スライド上のアイテム全体の集まり:Shapesオブジェクト
- アイテムの一つ一つ:Shapeオブジェクト
とも言えます。
Shapeオブジェクトの名前を取得する
For Each文でそれらのコレクション内のShapeオブジェクト一つ一つについて繰り返しをして、そのNameプロパティを出力します。
例として、「ひな形.pptx」のスライド1がこちらのスライドだった場合
上記プログラムを実行すると、イミディエイトウィンドウにこのように出力されます。
Slide Number Placeholder 2
TextBox 4
Oval 3
Right Arrow 5
Cloud Callout 6
Nameプロパティは、その名の通りシェイプの名前を表すのですが、シェイプが作成されたときにそのシェイプには「種類 番号」という形式の名前が自動的に割り振られます。
それらが出力されたということになるわけです。つまり、今回の場合はそれぞれ
というような名前が付けられていたということになります。
まとめ
エクセルVBAでPowerPointスライドのシェイプ一覧を取得する方法についてお伝えしました。
PowerPointのオブジェクト構造として
- PowerPointアプリケーション
- プレゼンテーション
- スライド
- シェイプ
- スライド
- プレゼンテーション
となっていること、またシェイプのコレクションとしての、Shapesオブジェクトが存在することなどをご理解頂ければと思います。
次回はシェイプのインデックス番号を調べてテキストの操作をしていきたいと思います。
どうぞお楽しみに!