Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » アクティブセクションの先頭と最後のスライド番号を取得するパワポマクロ

アクティブセクションの先頭と最後のスライド番号を取得するパワポマクロ

対象:PowerPoint2010, PowerPoint2013

VBA(Visual Basic for Applications)でPowerPointマクロを作成していて、アクティブなセクションの、先頭と最後のスライドのスライド番号(SlideIndex)を取得する必要がありました。

PowerPointのセクションは、コレクションオブジェクトと単一オブジェクトという構造にはなっていないため、久しぶりに触るとその構造にちょっとビックリします。

自分の備忘録の意味も込めて、アクティブセクションの先頭と最後のSlideIndexを取得するPowerPointマクロを公開しておきます。

[スポンサードリンク]

アクティブなセクションの先頭と最後のスライドのSlideIndexを取得するサンプルマクロ

以下のマクロを実行すると、アクティブなセクションの先頭と最後のスライドのSlideIndexが、イミディエイトウィンドウに出力されます。


Sub アクティブセクションの先頭と最後のSlideIndexを取得する()

 Dim sec_id As Long

 sec_id = ActiveWindow.Selection.SlideRange.sectionIndex

 With ActivePresentation.SectionProperties
  Debug.Print "先頭のSlideIndex:" & _
   .FirstSlide(sec_id)
  Debug.Print "最後のSlideIndex:" & _
   .FirstSlide(sec_id) + .SlidesCount(sec_id) - 1
 End With

End Sub

エラー処理を入れていませんので、セクションという概念自体が存在しない2007以前のPowerPointで実行したときや、セクションのないプレゼンテーションをアクティブにしておいて実行すると実行時エラーが発生します。

サンプルマクロの解説

アクティブなスライドのsectionIndexを取得して、
 sec_id = ActiveWindow.Selection.SlideRange.sectionIndex

そのsectionIndexの、セクションの先頭スライドのSlideIndexと、
 With ActivePresentation.SectionProperties
  Debug.Print "先頭のSlideIndex:" & _
   .FirstSlide(sec_id)

セクションの最後のスライドのSlideIndexに該当する数値をイミディエイトウィンドウに出力しています。
  Debug.Print "最後のSlideIndex:" & _
   .FirstSlide(sec_id) + .SlidesCount(sec_id) - 1

一般的な他のコレクションオブジェクトと単一オブジェクトをイメージすると、つい全セクションを表すコレクションオブジェクトと個々のセクションを表す単一オブジェクトが存在しているように考えてしまいますが、PowerPointのセクションを表すオブジェクトは、現在のところそのような構造にはなっていません。

SectionPropertiesという、コレクションオブジェクトでもあり単一オブジェクトでもあるようなオブジェクトが用意されえています。

一般的なコレクションオブジェクトと単一オブジェクトという構造になっていれば、全セクションを表すコレクションオブジェクトから、Itemメソッドで個別のセクションを表す単一オブジェクトを取得して、その先頭と最後のSlideIndexを取得する、という流れになります。

しかし、SectionPropertiesオブジェクトの場合、そのような構造はなっていませんので、まったく違う形のコードになります。

SectionPropertiesオブジェクトのFirstSlideメソッドの引数に、セクションのインデックスを指定すると、指定されたセクションの最初のスライドのSlideIndexを取得できます。

アクティブセクションの先頭と最後のスライド番号を取得する

最後のスライドのSlideIndexを返すLastSlide的なメソッドは用意されていませんが、SlidesCountメソッドを使うと指定されたセクションに含まれるスライドの枚数が取得できますから、

アクティブセクションの先頭と最後のスライド番号を取得する

先のFirstSlideメソッドで返される数値と組み合わせて、
   .FirstSlide(sec_id) + .SlidesCount(sec_id) - 1
アクティブセクションの最後のスライドのSlideIndexに該当する数値を作成しています。

[スポンサードリンク]

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » アクティブセクションの先頭と最後のスライド番号を取得するパワポマクロ

TrackBack:0

TrackBack URL

Home » パワーポイントマクロ・PowerPoint VBAの使い方 » Slide・スライド » アクティブセクションの先頭と最後のスライド番号を取得するパワポマクロ

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

検索


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

.