Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » PowerPoint VBAでスライドを追加するメソッドはAddとAddSlideがある

PowerPoint VBAでスライドを追加するメソッドはAddとAddSlideがある

対象:PowerPoint2007, PowerPoint2010, PowerPoint2013

PowerPoint VBAでスライド挿入のメソッドはAddとAddSlideがあるので要注意

PowerPointでスライドを挿入するマクロを作っていたときに、はまってしまう方もいらっしゃるのではないかと感じる部分があったので、記事にしておきます。

2007以降のPowerPoint VBAでは、スライドを追加するメソッドが2つあるという話です。

[スポンサードリンク]

スライドを追加するサンプルマクロ

以下のようなマクロで、アクティブなプレゼンテーションファイルの末尾・最後に空白のスライドを挿入することができます。
Sub 末尾にタイトルとテキストのスライドを挿入する()
 With ActivePresentation.Slides
  .Add _
   Index:=.Count + 1, _
   Layout:=ppLayoutText
 End With
End Sub

SlidesコレクションオブジェクトのAddメソッドを使ったマクロです。

このマクロは、PowerPoint 2003でも動きます。

PowerPoint 2003のオブジェクトブラウザで確認してみると、Slides.Addメソッドは下図のようになっています。

PowerPoint VBAでスライド挿入のメソッドはAddとAddSlideがあるので要注意

Slides.Addメソッドでは、第1引数・Indexでどこにスライドを挿入するのか、第2引数・Layoutでどんなレイアウトのスライドを挿入するかを指定します。

上記のマクロの場合は、ActivePresentationのSlides.Countプロパティで、アクティブなプレゼンテーションファイルのスライドの枚数を取得して、「+ 1」することで
   Index:=.Count + 1, _
末尾を指定しています。

レイアウトのほうは定数ppLayoutTextを使ってタイトルとテキストレイアウトを
   Layout:=ppLayoutText
指定しています。

第2引数・Layoutには、PpSlideLayout列挙型に定義された定数を指定することができます。

PowerPoint VBAでスライド挿入のメソッドはAddとAddSlideがあるので要注意

Slides.Addメソッドがない?

しかし、2007以降のPowerPoint VBAのヘルプには、上記のSlides.Addメソッドについての記述はありません。

その代わり(?)に、Slides.AddSlideメソッドが登場しています。

PowerPoint 2007のオブジェクトブラウザでSlidesコレクションオブジェクトを確認すると下図のようになっています。

PowerPoint VBAでスライド挿入のメソッドはAddとAddSlideがあるので要注意

2003でAddメソッドのあった場所にAddSlideメソッドが現れています。

Slides.AddメソッドとSlides.AddSlideメソッドの違い

よく似た名前で、同じようなことをしてくれるメソッドなので、Slides.AddメソッドとSlides.AddSlideメソッドをまったく同じに使えるのかと思うと、そうではありません。

第1引数は特に問題ないのですが、第2引数が厄介です。

Slides.AddメソッドではPpSlideLayout列挙体に定義された定数を指定できましたが、Slides.AddSlideメソッドではCustomLayoutオブジェクトを指定する必要があります。

Slides.AddSlideメソッドの第2引数に、うっかりAddメソッドで使える定数を指定して実行しようとすると
「コンパイルエラー:型が一致しません。」
というエラーになってしまいます。

Slides.AddSlideメソッドを使う場合、以下のようなコードにする必要があります。
Sub 末尾に最後のスライドと同じレイアウトのスライドを挿入する()
 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メソッドが非表示になっているのです。

PowerPoint VBAでスライド挿入のメソッドはAddとAddSlideがあるので要注意

スライドを追加する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がある

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

検索


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

.