一つのプレゼンテーションファイルを作成したあと、そのプレゼンテーションファイルをベースにして、スライドの順番を変更したり一部のスライドを削除したりして、別のプレゼンテーションファイルを作りたいと感じることがあります。
そんなときに便利な[目的別スライドショー]という機能がPowerPointにはあります。
目的別スライドショーへの不満
便利な機能ではありますが、大量のスライドが存在しているプレゼンテーションファイルファイルで、目的別スライドショーを作成しようとしたときには、ちょっと面倒です。
どのスライドを新しい目的別スライドショーで使うのかを、[目的別スライドショーの定義][目的別スライドショーの設定]ダイアログで、一つ一つ選択する必要があるからです。
ほとんどのスライドを利用して、新しく目的別スライドショーを作るような場合、一旦全部のスライドの登録された目的別スライドショーを作成して、不要なスライドを削除していくほうが便利なはずです。
あっても良さそうな機能ですが、現状のPowerPointにはそんな機能は存在していません。
全スライドを含む目的別スライドショーを作るマクロ
そんなことをしてくれるマクロを、VBA(Visual Basic for Applications)で作成したので、ご紹介しておきます。Dim ss_name As String ' 目的別スライドショーの名前
Dim sld_ids() As Long ' SlideID
Dim sld_cnt As Long ' スライドの数
Dim i As Long
ss_name = _
InputBox("作成する目的別スライドショーの名前を入力してください。")
' SlideIDの配列を作る
With ActiveWindow.Presentation
sld_cnt = .Slides.Count
ReDim sld_ids(1 To sld_cnt)
For i = 1 To sld_cnt
sld_ids(i) = .Slides(i).SlideID
Next i
End With
On Error GoTo ERR_HNDL
' 目的別スライドショーの作成
ActivePresentation. _
SlideShowSettings.NamedSlideShows.Add _
Name:=ss_name, _
SafeArrayOfSlideIDs:=sld_ids
MsgBox "目的別スライドショー【" & ss_name & "】を作成しました。"
Exit Sub
ERR_HNDL:
MsgBox "指定された名前では目的別スライドショーを作成できないのでマクロを終了します。"
End Sub
上記のマクロを実行すると「作成する目的別スライドショーの名前を入力してください。」と表示されたインプットボックスが表示され、入力された名前に問題がなければ、アクティブなプレゼンテーションファイルの全スライドを含んだ目的別スライドショーが作成されます。
目的別スライドショーを作成しているのは、最後のほうの
ActivePresentation. _
SlideShowSettings.NamedSlideShows.Add _
Name:=ss_name, _
SafeArrayOfSlideIDs:=sld_ids
です。
NamedSlideShows.Addメソッドの引数・SafeArrayOfSlideIDsには、SlideオブジェクトのSlideIDを配列にして指定する必要があります。
その配列を作っているのが
With ActiveWindow.Presentation
sld_cnt = .Slides.Count
ReDim sld_ids(1 To sld_cnt)
For i = 1 To sld_cnt
sld_ids(i) = .Slides(i).SlideID
Next i
End With
の部分です。
既存の目的別スライドショーと同じ名前が指定されたときなどにはエラーとなるので、その場合メッセージを表示して、マクロを終了しています。
On Error GoTo ERR_HNDL
ERR_HNDL:
MsgBox "指定された名前では目的別スライドショーを作成できないのでマクロを終了します。"
End Sub
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » スライドショー » 全スライドを含む目的別スライドショーを作るPowerPointマクロ