Excel VBAでオブジェクト指向プログラミング(PowerPoint VBA編)

2024-01-05

■PowerPoint VBAのオブジェクトについて

MicrosoftからPowerPointの機能を利用するためのオブジェクト群が提供されていますが、下位オブジェクト(サブクラス)の種類が非常に多いため、ApplicationオブジェクトとPresentationオブジェクトを中心とする、各オブジェクトの階層構造(依存関係)を掲載します。
⇒詳細はMicrosoftのサイト(Office VBA リファレンス(PowerPoint))を参照して下さい。

PowerPoint関連オブジェクト群の階層構造

PowerPoint関連オブジェクト群の中で、最上位に位置するものがApplicationオブジェクトであり、最も重要かつ頻繁に利用されるものがPresentationオブジェクトです。
下表はApplicationオブジェクトとPresentationオブジェクトの下位オブジェクト(サブクラス)を一覧化したもの(※)で、PowerPoint関連オブジェクト群のオブジェクトの大半が含まれています。

(※)Visual Basic Editor(VBE)に搭載されているオブジェクトブラウザで、ApplicationオブジェクトとPresentationオブジェクトのメソッドおよびプロパティの定義情報を参照し、取得可能なオブジェクトをExcelにコピペして、自作のExcelツールで成形したものです。

Applicationオブジェクト
AddInsコレクション
AnswerWizardオブジェクト
Assistantオブジェクト
AutoCorrectオブジェクト
COMAddInsコレクション
CommandBarsコレクション
DefaultWebOptionsコレクション
DocumentWindowオブジェクト
DocumentWindowsコレクション
FileDialogオブジェクト
IAssistanceオブジェクト
LanguageSettingsコレクション
MsoAutomationSecurityオブジェクト
MsoFeatureInstallオブジェクト
MsoTriStateオブジェクト
NewFileオブジェクト
Optionsコレクション
PpAlertLevelオブジェクト
PpWindowStateオブジェクト
Presentationオブジェクト
ColorSchemesコレクション
CommandBarsコレクション
CustomerDataオブジェクト
CustomXMLPartsコレクション
Designsコレクション
DocumentInspectorsコレクション
DocumentLibraryVersionsコレクション
DocumentWindowオブジェクト
DocumentWindowsコレクション
ExtraColorsコレクション
Fontsコレクション
Masterオブジェクト
MetaPropertiesコレクション
MsoFarEastLineBreakLanguageIDオブジェクト
MsoLanguageIDオブジェクト
MsoTriStateオブジェクト
PageSetupオブジェクト
Permissionオブジェクト
PpDirectionオブジェクト
PpFarEastLineBreakLevelオブジェクト
PrintOptionsコレクション
PublishObjectsコレクション
Researchオブジェクト
Presentationsコレクション
SlideShowWindowsコレクション
VBEオブジェクト

■PowerPointのオブジェクトを使用するための事前準備

PowerPointのオブジェクトを使用するための事前準備は、以下の3ステップです。
⇒オブジェクトを使用するための事前準備とオブジェクトブラウザによる調査方法については、Excel VBAでオブジェクト指向プログラミング(事前準備編)を参照して下さい。

①ライブラリの参照設定
Visual Basic Editor(VBE)のファイルメニューから[ツール]-[参照設定]を選択し、参照設定ダイアログでMicrosoft PowerPoint x.x Object Libraryのチェックボックスにチェックを入れ、[OK]ボタンを押下。

②オブジェクト変数の定義
プログラムの宣言部でオブジェクト変数を定義。

  1. Dim pp As Object

③インスタンスの生成
プログラムの処理部でインスタンスを生成。

  1. Set pp = New PowerPoint.Application
  2. 'ここにPowerPointを使用した処理を記述
  3. Set pp = Nothing

(参考)「Set pp = New PowerPoint.Application」の部分を「Set pp = CreateObject(“PowerPoint.Application")」と記述すれば、ステップ①(ライブラリの参照設定)は不要です。

■PoewrPointのプレゼンテーションに含まれるスライドとシェイプの一覧を作成する処理

PowerPointのプレゼンテーションを読み込み、プレゼンテーションに含まれる全てのスライドとシェイプの一覧を作成するExcelツールです。

処理の概要

処理の流れは以下の通りです。
①PowerPointを起動し、プレゼンテーションをオープン
②全てのスライド、全てのシェイプを順に参照し、Excelシートに名称をセット
③プレゼンテーションを閉じ、PowerPointを終了

サンプル・プログラム

行番号7~8でPowerPointを起動しています(行番号7でPowerPointを起動し、行番号8で目に見えるようにしています)。
行番号9でプレゼンテーションを開き、行番号10でPresentationオブジェクトのSlidesプロパティからSlidesコレクションを取得し、行番号11でSlideオブジェクトのShapesプロパティからShapesコレクションを取得しています。
行番号13でSlideオブジェクトのNameプロパティからスライド名を取得し、行番号14でShapeオブジェクトのNameプロパティからシェイプ名を取得しています。

  1. Dim sht, pp, prs, sld, shp As Object
  2. Dim i As Integer
  3. Private Sub Sample1()
  4.     Set sht = ActiveSheet
  5.     i = 0
  6.     Set pp = New PowerPoint.Application
  7.     pp.Visible = True
  8.     Set prs = pp.Presentations.Open(“C:\work\サンプル.pptx")
  9.     For Each sld In prs.Slides
  10.         For Each shp In sld.Shapes
  11.             i = i + 1
  12.             sht.Cells(i, 1) = sld.Name
  13.             sht.Cells(i, 2) = shp.Name
  14.         Next shp
  15.     Next sld
  16.     Set shp = Nothing
  17.     Set sld = Nothing
  18.     prs.Close
  19.     Set prs = Nothing
  20.     pp.Quit
  21.     Set pp = Nothing
  22. End Sub

■PowerPointのスライドをExcelシートに貼り付ける処理

PowerPointのプレゼンテーションを開き、各スライドをExcelシートに(図として)貼り付けるExcelツールです。

用途がわからないと思いますので、少し補足します。
あるExcelの資料を定期的にマージしていたんですが、元資料の一部にPowerPointで作成した資料がありました。
このPowerPointの資料には通しページ(スライド番号)が振られており、かつ非表示のスライドも含まれていたため、「非表示でないスライドについて、スライド番号を削除したうえ、コピーしてExcelシートに図として貼り付ける」という操作を手作業で行っていましたが、意外に面倒だったのでプログラムを作ったという経緯です。

処理の概要

処理の流れは以下の通りです。
①PowerPointを起動し、プレゼンテーションをオープン
②全てのスライド、全てのシェイプを順に参照し、ページ(スライド番号)を削除してExcelシートに貼り付け
③プレゼンテーションを閉じ、PowerPointを終了

サンプル・プログラム

行番号8~9でPowerPointを起動しています(行番号8でPowerPointを起動し、行番号9で目に見えるようにしています)。
行番号10でプレゼンテーションを開き、行番号11でPresentationオブジェクトのSlidesプロパティからSlidesコレクションを取得しています。
行番号12でスライドが非表示かどうかを判定し、非表示でない場合は行番号13でSlideオブジェクトのShapesプロパティからShapesコレクションを取得しています。
行番号14~16でシェイプ名が「スライド番号プレースホルダ」かどうかを判定し、該当する場合はDeleteメソッドでシェイプを削除しています。
行番号20でCopyメソッドによりスライドをコピーし、行番号21でExcelシートに貼り付けています。

  1. Dim sht, pp, prs, sld, shp As Object
  2. Dim wstr As String
  3. Dim i, pos As Integer
  4. Private Sub Sample2()
  5.     Workbooks.Add
  6.     Set sht = ActiveSheet
  7.     Set pp = New PowerPoint.Application
  8.     pp.Visible = True
  9.     Set prs = pp.Presentations.Open(“C:\work\サンプル.pptx")
  10.     For Each sld In prs.Slides
  11.         If sld.SlideShowTransition.Hidden = False Then
  12.             For Each shp In sld.Shapes
  13.                 wstr = shp.Name
  14.                 pos = InStr(wstr, “スライド番号プレースホルダ")
  15.                 If pos > 0 Then
  16.                     shp.Delete
  17.                 End If
  18.             Next shp
  19.             sld.Copy
  20.             sht.Cells(1, 1).PasteSpecial
  21.         End If
  22.     Next sld
  23.     Set shp = Nothing
  24.     Set sld = Nothing
  25.     prs.Close
  26.     pp.Quit
  27.     Set pp = Nothing
  28. End Sub

(補足説明)
実際のプログラムでは、Excelシートに貼り付けた後、図の大きさを調整していました。
以下の例では、A1:J25のレンジに合った大きさになるよう、貼り付けた図を拡大しています。

  1.     For Each shp In sht.Shapes
  2.         Set rng = sht.Range(“A1:J25")
  3.         shp.LockAspectRatio = False
  4.         shp.Left = rng.Left
  5.         shp.Top = rng.Top
  6.         shp.Width = rng.Width
  7.         shp.Height = rng.Height
  8.     Next shp

国本温子(著),緑川吉行(著),できるシリーズ編集部(著)
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ

大村あつし(著),古川順平(著)
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ

高橋宣成(著)
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ