PowerPointで定期的に何らかのレポーティングを行うというお仕事があります。
レポーティング業務では(特にスライドが大量に存在しているような場合に)、全スライドを含んだプレゼンテーションファイルと、一部のスライドだけを含んだダイジェスト版のプレゼンテーションファイルの二つを作成することが要求されるケースがあります。
[目的別スライドショー]で済めばいいのですが、
ダイジェスト版のファイルを物理的に作ることが要求される場合、[目的別スライドショー]ではダメです。
PowerPointには[スライドの再利用]というコマンドも用意されていますが、大量のスライドをコピーしたいときには[スライドの再利用]コマンドを使った作業はかなり面倒です。
そんなときに使えそうなPowerPointのマクロを作ってみました。
指定したスライドをコピーして、新しいプレゼンテーションファイルを作成するマクロです。
スライドをコピーして新規プレゼンテーションファイルを作成するサンプルマクロ
スライドが大量に(最低5枚以上)存在するプレゼンテーションファイルがアクティブな状態で、以下のマクロを実行すると、配列・arrに指定した番号のスライドがコピーされて新しいプレゼンテーションファイルが自動的に作られます。
''コピーするSlideのSlideIndex
Dim arr As Variant
arr = Array(1, 3, 5, 4)
Dim prs_org As Presentation, prs_new As Presentation
Dim pg_org As PageSetup
Dim sld_org As Slide
Dim i As Long
Set prs_org = ActivePresentation
Set pg_org = prs_org.PageSetup
''新しいプレゼンテーションファイルの作成とページ設定のコピー
Set prs_new = Presentations.Add
With prs_new.PageSetup
.SlideOrientation = pg_org.SlideOrientation
.SlideSize = pg_org.SlideSize
.SlideHeight = pg_org.SlideHeight
.SlideWidth = pg_org.SlideWidth
.FirstSlideNumber = pg_org.FirstSlideNumber
End With
''スライドと書式のコピー
For i = LBound(arr) To UBound(arr)
Set sld_org = prs_org.Slides(arr(i))
sld_org.Copy
With prs_new.Slides.Paste
.Design = sld_org.Design
.ColorScheme = sld_org.ColorScheme
.DisplayMasterShapes = sld_org.DisplayMasterShapes
.FollowMasterBackground = sld_org.FollowMasterBackground
End With
Next i
サンプルマクロの解説
上記のマクロは、スライドが5枚以上ある場合に、スライド番号1・3・5・4のスライドを流用して、新しいプレゼンテーションファイルを作成するという例です。
コピーしたいスライドを定義しているのが
Dim arr As Variant
arr = Array(1, 3, 5, 4)
の部分です。
本来なら、配列の定数にしたいところですが、VBA(Visual Basic for Applications)では配列定数を定義できないので、配列変数にしています。
まず、新規にプレゼンテーションファイルを作成して、
Set prs_new = Presentations.Add
ページ設定を、元のプレゼンテーションファイルから、作ったばかりの新しいプレゼンテーションファイルにコピーします。
With prs_new.PageSetup
.SlideOrientation = pg_org.SlideOrientation
.SlideSize = pg_org.SlideSize
.SlideHeight = pg_org.SlideHeight
.SlideWidth = pg_org.SlideWidth
.FirstSlideNumber = pg_org.FirstSlideNumber
その後、定義しておいた配列・arrをFor~Nextループで処理して、
For i = LBound(arr) To UBound(arr)
元のプレゼンテーションファイルから、新しいプレゼンテーションファイルにスライドをコピーして、
Set sld_org = prs_org.Slides(arr(i))
sld_org.Copy
With prs_new.Slides.Paste
スライドの書式設定をコピーしています。
.Design = sld_org.Design
.ColorScheme = sld_org.ColorScheme
.DisplayMasterShapes = sld_org.DisplayMasterShapes
.FollowMasterBackground = sld_org.FollowMasterBackground
大量のスライドが含まれているプレゼンテーションファイルでは、複数のスライドマスターを持っていることもありますから、個々のスライドで書式のコピーも繰り返し行うようにしています。
SlidesコレクションオブジェクトのPasteメソッドは、オブジェクトブラウザー等で確認するとわかるとおり、
貼り付けたスライドを表すSlideRangeオブジェクトを返すFunctionプロシージャタイプのメソッドですので、
With prs_new.Slides.Paste
.Design = sld_org.Design
といった書き方ができます。
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » スライドをコピーして新規プレゼンテーションを作成するパワポマクロ