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

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

対象:PowerPoint2010, PowerPoint2013

VBAで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

SectionPropertiesは異質なオブジェクト

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

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

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

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

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

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

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

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

最終更新日時:2019-03-13 08:24

[スポンサードリンク]

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

TrackBack:0

TrackBack URL

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

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

検索


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

.