Excel VBAでオブジェクト指向プログラミング(PowerPoint VBA編)
■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]ボタンを押下。
②オブジェクト変数の定義
プログラムの宣言部でオブジェクト変数を定義。
- Dim pp As Object
③インスタンスの生成
プログラムの処理部でインスタンスを生成。
- Set pp = New PowerPoint.Application
- 'ここにPowerPointを使用した処理を記述
- 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プロパティからシェイプ名を取得しています。
- Dim sht, pp, prs, sld, shp As Object
- Dim i As Integer
- Private Sub Sample1()
- Set sht = ActiveSheet
- i = 0
- Set pp = New PowerPoint.Application
- pp.Visible = True
- Set prs = pp.Presentations.Open(“C:\work\サンプル.pptx")
- For Each sld In prs.Slides
- For Each shp In sld.Shapes
- i = i + 1
- sht.Cells(i, 1) = sld.Name
- sht.Cells(i, 2) = shp.Name
- Next shp
- Next sld
- Set shp = Nothing
- Set sld = Nothing
- prs.Close
- Set prs = Nothing
- pp.Quit
- Set pp = Nothing
- 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シートに貼り付けています。
- Dim sht, pp, prs, sld, shp As Object
- Dim wstr As String
- Dim i, pos As Integer
- Private Sub Sample2()
- Workbooks.Add
- Set sht = ActiveSheet
- Set pp = New PowerPoint.Application
- pp.Visible = True
- Set prs = pp.Presentations.Open(“C:\work\サンプル.pptx")
- For Each sld In prs.Slides
- If sld.SlideShowTransition.Hidden = False Then
- For Each shp In sld.Shapes
- wstr = shp.Name
- pos = InStr(wstr, “スライド番号プレースホルダ")
- If pos > 0 Then
- shp.Delete
- End If
- Next shp
- sld.Copy
- sht.Cells(1, 1).PasteSpecial
- End If
- Next sld
- Set shp = Nothing
- Set sld = Nothing
- prs.Close
- pp.Quit
- Set pp = Nothing
- End Sub
(補足説明)
実際のプログラムでは、Excelシートに貼り付けた後、図の大きさを調整していました。
以下の例では、A1:J25のレンジに合った大きさになるよう、貼り付けた図を拡大しています。
- For Each shp In sht.Shapes
- Set rng = sht.Range(“A1:J25")
- shp.LockAspectRatio = False
- shp.Left = rng.Left
- shp.Top = rng.Top
- shp.Width = rng.Width
- shp.Height = rng.Height
- Next shp
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ
ディスカッション
コメント一覧
まだ、コメントがありません