PowerPointでスライドを挿入するマクロを作っていたときに、はまってしまう方もいらっしゃるのではないかと感じる部分があったので、記事にしておきます。
2007以降のPowerPoint VBAでは、スライドを追加するメソッドが2つあるという話です。
スライドを追加するサンプルマクロ
以下のようなマクロで、アクティブなプレゼンテーションファイルの末尾・最後に空白のスライドを挿入することができます。With ActivePresentation.Slides
.Add _
Index:=.Count + 1, _
Layout:=ppLayoutText
End With
End Sub
SlidesコレクションオブジェクトのAddメソッドを使ったマクロです。
このマクロは、PowerPoint 2003でも動きます。
PowerPoint 2003のオブジェクトブラウザで確認してみると、Slides.Addメソッドは下図のようになっています。
Slides.Addメソッドでは、第1引数・Indexでどこにスライドを挿入するのか、第2引数・Layoutでどんなレイアウトのスライドを挿入するかを指定します。
上記のマクロの場合は、ActivePresentationのSlides.Countプロパティで、アクティブなプレゼンテーションファイルのスライドの枚数を取得して、「+ 1」することで
Index:=.Count + 1, _
末尾を指定しています。
レイアウトのほうは定数ppLayoutTextを使ってタイトルとテキストレイアウトを
Layout:=ppLayoutText
指定しています。
第2引数・Layoutには、PpSlideLayout列挙型に定義された定数を指定することができます。
Slides.Addメソッドがない?
しかし、2007以降のPowerPoint VBAのヘルプには、上記のSlides.Addメソッドについての記述はありません。
その代わり(?)に、Slides.AddSlideメソッドが登場しています。
PowerPoint 2007のオブジェクトブラウザでSlidesコレクションオブジェクトを確認すると下図のようになっています。
2003でAddメソッドのあった場所にAddSlideメソッドが現れています。
Slides.AddメソッドとSlides.AddSlideメソッドの違い
よく似た名前で、同じようなことをしてくれるメソッドなので、Slides.AddメソッドとSlides.AddSlideメソッドをまったく同じに使えるのかと思うと、そうではありません。
第1引数は特に問題ないのですが、第2引数が厄介です。
Slides.AddメソッドではPpSlideLayout列挙体に定義された定数を指定できましたが、Slides.AddSlideメソッドではCustomLayoutオブジェクトを指定する必要があります。
Slides.AddSlideメソッドの第2引数に、うっかりAddメソッドで使える定数を指定して実行しようとすると
「コンパイルエラー:型が一致しません。」
というエラーになってしまいます。
With ActivePresentation.Slides
.AddSlide _
Index:=.Count + 1, _
pCustomLayout:=.Item(.Count).CustomLayout
End With
End Sub
上記のマクロを実行すると、末尾のスライドと同じレイアウトのスライドが最後に挿入されます。(PowerPoint 2003で実行するとエラーになります。)
レイアウトを指定している、
pCustomLayout:=.Item(.Count).CustomLayout
の部分は、
ActivePresentation.Slides.Itemプロパティの引数に、ActivePresentation.Slides.Countプロパティを指定することで、最後のSlideオブジェクトを取得して、そのCustomLayoutプロパティでCustomLayoutオブジェクトを取得して、それをSlides.AddSlideメソッドの第2引数・pCustomLayoutの引数に指定していることになります。
オブジェクトブラウザで、非表示のメンバーを表示してみると、どうなっているのかが見えてきます。
2007以降のPowerPointでは、Slides.Addメソッドが非表示になっているのです。
スライドを追加するAddとAddSlideをどう使い分けるか
スライドを挿入するコードを書くときに、既に存在しているスライドと同じレイアウトを指定するようなときには、Slides.AddSlideメソッドは便利そうですが、存在していないスライドのレイアウトで挿入しようとすると、なかなか面倒です。
存在していないスライドのレイアウト・新しいレイアウトのスライドを挿入する場合は、2003でも存在していたSlides.Addメソッドのほうが簡単で便利です。
Slides.Addメソッドが非表示メンバーになっていて、今後どうなるのかは未知数ですが、少なくとも2014年5月現在の最新バージョンであるPowerPoint 2013でも、Slides.Addメソッドは使えるので、新しいレイアウトのスライドを挿入するときはSlieds.Addを、当面使っていこうと私は考えています。
最終更新日時:2019-02-22 15:56
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » PowerPoint VBAでスライドを追加するメソッドはAddとAddSlideがある