Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » スライドをコピーして新規プレゼンテーションを作成するパワポマクロ

スライドをコピーして新規プレゼンテーションを作成するパワポマクロ

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013

PowerPointで定期的に何らかのレポーティングを行うというお仕事があります。

レポーティング業務では(特にスライドが大量に存在しているような場合に)、全スライドを含んだプレゼンテーションファイルと、一部のスライドだけを含んだダイジェスト版のプレゼンテーションファイルの二つを作成することが要求されるケースがあります。

[目的別スライドショー]で済めばいいのですが、

スライドをコピーして新規プレゼンテーションファイルを作成するPowerPointマクロ

ダイジェスト版のファイルを物理的に作ることが要求される場合、[目的別スライドショー]ではダメです。

PowerPointには[スライドの再利用]というコマンドも用意されていますが、大量のスライドをコピーしたいときには[スライドの再利用]コマンドを使った作業はかなり面倒です。

そんなときに使えそうなPowerPointのマクロを作ってみました。

指定したスライドをコピーして、新しいプレゼンテーションファイルを作成するマクロです。

[スポンサードリンク]

スライドをコピーして新規プレゼンテーションファイルを作成するサンプルマクロ

スライドが大量に(最低5枚以上)存在するプレゼンテーションファイルがアクティブな状態で、以下のマクロを実行すると、配列・arrに指定した番号のスライドがコピーされて新しいプレゼンテーションファイルが自動的に作られます。

Sub スライドを流用して新しいプレゼンテーションファイルを作成する()

 ''コピーする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

End Sub

サンプルマクロの解説

上記のマクロは、スライドが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メソッドは、オブジェクトブラウザー等で確認するとわかるとおり、

スライドをコピーして新規プレゼンテーションファイルを作成するPowerPointマクロ

貼り付けたスライドを表すSlideRangeオブジェクトを返すFunctionプロシージャタイプのメソッドですので、
  With prs_new.Slides.Paste
   .Design = sld_org.Design
といった書き方ができます。

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » スライドをコピーして新規プレゼンテーションを作成するパワポマクロ

「Slide・スライド」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.