VBAでMicrosoft PowerPointを操作する

VBA (Visual Basic for Applications)でMicrosoft PowerPointを操作する方法を解説します。

オブジェクト

PowerPointを操作するために、VBAには次のオブジェクトが用意されている。

PowerPointのオブジェクト
オブジェクト 説明
Application PowerPointアプリケーション全般に適用される設定やオプション、ActivePresentationやWindowなどの最上位レベルのオブジェクトを取得するプロパティが含まれる。
ColorFormat 単色、グラデーション又はパターンの塗りつぶしを持つオブジェクトの前景色又は背景色を表すオブジェクト
FillFormat 図形の塗りつぶしの書式設定を表すオブジェクト
GroupShapes グループ化された図形の中の各図形を表すコレクション
Presentaion PowerPointのプレゼンテーションを表すオブジェクト
Shape オートシェイプ、フリーフォーム、OLEオブジェクト又は図などの描画オブジェクトを表す。
Shapes スライドのすべてのShapeオブジェクトのコレクション
Slide スライドに配置されたすべての要素を表すオブジェクト
Slides プレゼンテーションのすべてのSlideオブジェクトのコレクション
TextFrame 配置及びアンカーのプロパティの指定された図形又はマスタテキストスタイルを含むTextFrameオブジェクト
TextFrame2 指定した図形範囲の配置及びアンカーのプロパティ値を含む特定のShapeオブジェクトに関連付けられたTextFrame2オブジェクトであり、値の取得のみ可能。
TextRange 図形に付加されたテキストを表すオブジェクトであり、値の取得のみ可能。

Application

Applicationオブジェクトとは、PowerPointアプリケーション全般に適用される設定やオプション、ActivePresentationやWindowなどの最上位レベルのオブジェクトを取得するプロパティが含まれるオブジェクトである。

Applicationオブジェクトのプロパティ一覧を次に示す。

ActivePresentaion
作業中のウィンドウで開かれたプレゼンテーションを表すPresentationオブジェクトであり、値の取得のみ可能。
ActivePrinter
使用可能なプリンタの名前であり、値の取得のみ可能。

Applicationオブジェクトのメソッド一覧を次に示す。

Quit
PowerPointアプリケーションを終了する。

すべてのShapeを取得する例を次に示す。

Dim sld As Slide
Dim shp As Shape

For Each sld In ActivePresentaion.Slides
  For Each shp In sld.Shapes
    ' 何らかの処理
  Next
Next

Presentaion

Presentaionオブジェクトとは、PowerPointのプレゼンテーションを表すオブジェクトである。

Presentaionオブジェクトのプロパティ一覧を次に示す。

Slides
プレゼンテーションのすべてのスライドを表すSlidesコレクションであり、値の取得のみ可能。

ColorFormat

ColorFormatオブジェクトとは、単色、グラデーション又はパターンの塗りつぶしを持つオブジェクトの前景色又は背景色を表すオブジェクトである。

ColorFormatオブジェクトのプロパティ一覧を次に示す。

RGB
RGB値

FillFormat

FillFormatオブジェクトとは、図形の塗りつぶしの書式設定を表すオブジェクトである。

FillFormatオブジェクトのプロパティ一覧を次に示す。

ForeColor
塗りつぶしの前景色、線、影を表すColorFormatオブジェクト

GroupShapes

GroupShapesオブジェクトとは、グループ化された図形の中の各図形を表すコレクションである。各図形はShapeオブジェクトで表される。このオブジェクトでItemメソッドを使用すると、それらの図形のグループ化を解除しなくても、グループ内の図形に個別に設定することができる。

Shape

Shapeオブジェクトとは、オートシェイプ、フリーフォーム、OLEオブジェクト又は図などの描画オブジェクトを表すオブジェクトである。

Shapeオブジェクトのプロパティ一覧を次に示す。

Fill
塗りつぶしのプロパティを指定した図形の書式設定が含まれるFillFormatオブジェクトであり、読み取り専用。
GroupItems
指定グループ内の各図形を表すGroupShapesオブジェクトであり、値の取得のみ可能。
Left
図形の境界ボックスの左端からスライドの左端までの距離をポイント単位で表した単精度浮動小数点(Single)の値。値の取得及び設定が可能。
TextFrame
配置及びアンカーのプロパティの指定された図形又はマスタテキストスタイルを含むTextFrameオブジェクト
TextFrame2
指定した図形範囲の配置及びアンカーのプロパティ値を含む特定のShapeオブジェクトに関連付けられたTextFrame2オブジェクトであり、値の取得のみ可能。
Top
図形の境界ボックスの上端からスライドの上端までの距離をポイント単位で表した単精度浮動小数点(Single)の値。値の取得及び設定が可能。
Type
図形範囲の図形の種類を表す。値の取得のみ可能。

TypeプロパティにはMsoShapeType列挙型の値が格納されている。

MsoShapeType列挙型
Member 説明
msoAutoShape オートシェイプ
msoCallout 吹き出し
msoCanvas キャンバス
msoChart グラフ
msoComment コメント
msoDiagram 図表
msoEmbeddedOLEObject 埋め込みOLEオブジェクト
msoFormControl フォームコントロール
msoFreeForm フリーフォーム
msoGroup グループ
msoInk インク
msoInkComment インクコメント
msoLine
msoLinkedOLEObject リンクされたOLEオブジェクト
msoLinkedPicture リンクされた図
msoMedia メディア
msoOLEControlObject OLEコントロールオブジェクト
msoPicture
msoPlaceholder プレースホルダ
msoScriptAnchor スクリプトアンカー
msoTAble
msoTextBox テキストボックス
msoTextEffect テキスト効果

Shapes

Shapesオブジェクトとは、スライドのすべてのShapeオブジェクトのコレクションである。

Indexは、最背面にある図形から順に番号が割り当てられる。通常は、図形を挿入すると最前面に配置されるので、挿入された順序に従って番号が割り当てられるが、図形の順序を入れ替えた場合はIndexも変わる。

Slide

Slideオブジェクトとは、スライドを表すオブジェクトである。

Slideオブジェクトのプロパティ一覧を次に示す。

Shapes
スライドに配置されたすべての要素を表すShapesコレクションであり、読み取り専用である。

Slides

Slidesオブジェクトとは、プレゼンテーションのすべてのSlideオブジェクトのコレクションである。

TextFrame

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

TextFrameオブジェクトのプロパティ一覧を次に示す。

HasText
指定した図形に関連したテキストがあるかどうかを示すブール型(Boolean)の値であり、値の取得のみ可能。

TextFrame2

TextFrame2オブジェクトとは、Shapeオブジェクト又はShapeRangeオブジェクトのテキストフレーム表すオブジェクトである。

TextFrame2オブジェクトのプロパティ一覧を次に示す。

TextRange
指定されたテキスト枠の中のテキストを表すTextRangeオブジェクトであり、値の取得のみ可能。

TextRange

TextRangeオブジェクトとは、図形に付加されたテキストを表すオブジェクトである。

TextRangeオブジェクトのプロパティ一覧を次に示す。

Text
指定したオブジェクトに含まれるテキストを表す文字列型(String)の値であり、値の取得および設定が可能。

PowerPoint VBAからExcelブックを操作する

既に開いているExcelブックのワークシートにアクセスする

Dim excelApplication As Object
Dim excelWorksheet As Object

On Error GoTo errorHandler

Set excelApplication = GetObject(Class:="Excel.Application")
Set excelWorksheet = excelApplication.ActiveWorkbook.ActiveSheet

excelWorksheet.Cells(1, 1).Value = "Hello world!"