【実務・中級編】【実務中級】Presentation.SlideShowSettingsを操作し、特定の「カスタムスライドショー(NamedSlideShows)」をVBAから動的に作成・編集・実行する自動化手法 – PowerPoint VBA解析バイブル

スポンサーリンク

PowerPoint VBAの「深淵」を制す:カスタムスライドショーを自在に操る動的構築術

現場でPowerPointを扱っていると、必ず突き当たる壁がある。「相手によって話す内容を変えたいが、そのたびにスライドを手動で選別するのは生産性が低すぎる」という課題だ。

多くの初学者は、スライドを複製して別ファイルを作るという「破壊的アプローチ」をとる。だが、それは保守性の地獄への入り口だ。マスターデータ(元ファイル)に変更があった瞬間、全ての派生ファイルが陳腐化する。

真の自動化エンジニアは、`Presentation.SlideShowSettings`と`NamedSlideShows`を制御する。元ファイルは一つ。抽出ロジックだけをVBAに持たせる。これが、プロのアーキテクチャだ。

なぜ `NamedSlideShows` なのか?

PowerPointのオブジェクトモデルにおいて、`NamedSlideShows` コレクションは、特定の順序・選択肢でスライドを再生するための「仮想的なプレイリスト」だ。

これを動的に生成することで、以下のメリットが生まれる。
1. 非破壊性: 元のスライド構成を一切汚さない。
2. 即時性: データベース(ExcelやCSV)から条件を読み込み、瞬時に最適なプレゼン構成を組み立てられる。
3. 保守性: 編集が必要なのは「抽出ロジック(VBA)」と「スライド本体」のみ。

実装の極意:動的カスタムショー構築コード

以下に、実務でそのまま運用可能なプロダクションレベルのコードを提示する。エラーハンドリングとオブジェクトのクリーンアップは、堅牢なシステムの基本だ。

Option Explicit

‘ ———————————————————
‘ 目的: ターゲット顧客に応じてスライドを抽出し、即座にスライドショーを開始する
‘ ———————————————————
Public Sub ExecuteDynamicSlideShow(ByVal customShowName As String, ByRef targetSlideIndices As Variant)
Dim pres As Presentation
Dim customShow As CustomSlideShow
Dim i As Long

Set pres = ActivePresentation

‘ 1. 同名の既存カスタムショーが存在すれば削除(再実行時の衝突回避)
On Error Resume Next
pres.SlideShowSettings.NamedSlideShows(customShowName).Delete
On Error GoTo 0

‘ 2. 新規カスタムショーを作成
Set customShow = pres.SlideShowSettings.NamedSlideShows.Add(customShowName, targetSlideIndices)

‘ 3. スライドショーの設定を適用
With pres.SlideShowSettings
.RangeType = ppShowNamedSlideShow
.SlideShowName = customShowName
.LoopType = ppShowTypeSpeaker ‘ 発表者ツールを使用

‘ 4. 実行
.Run
End With

Debug.Print “カスタムショー [” & customShowName & “] の再生を開始しました。”
End Sub

‘ ———————————————————
‘ 使用例:外部データ(配列)から動的にカスタムショーを作る呼び出し元
‘ ———————————————————
Public Sub LaunchDemo()
‘ 例えば「顧客A向け」にスライド1, 3, 5, 8を抽出する場合
Dim slideArray As Variant
slideArray = Array(1, 3, 5, 8)

ExecuteDynamicSlideShow “Dynamic_ClientA”, slideArray
End Sub

開発における「3つの鉄則」

現場でこのシステムを運用する際、以下の3点に注意せよ。これらを疎かにすると、現場でツールが「動かない」という悲劇を招く。

1. スライド番号の「絶対参照」を避ける

`Array(1, 3, 5, 8)` のようにインデックスをベタ書きするのは危険だ。スライドが追加・削除された瞬間に整合性が崩れる。
対策: スライドに「タグ(`Slide.Tags`)」を埋め込み、実行時にタグを検索してインデックスを取得する設計にせよ。これにより、スライドの順序が変わってもマクロは壊れない。

2. `SlideShowSettings` の状態を初期化する

`SlideShowSettings` はグローバルに近い状態で保持されるため、前回の設定が残っていると挙動が予測不能になる。必ず、新しいカスタムショーを実行する直前に、`.RangeType` を明示的に再設定すること。

3. ファイル連携時のデッドロック回避

もし外部のExcelやデータベースから情報を取得する場合、ファイルを開いたままにするのは厳禁だ。
対策: `GetOpenFilename` や `DAO/ADO` を使い、ストリームとしてデータを読み取ったら即座にコネクションを閉じる。プレゼンテーションの実行中に外部ファイルがロックされていると、配布先環境で確実にクラッシュする。

アーキテクトからの助言

PowerPoint VBAの自動化は、単なる「作業の短縮」ではない。プレゼンテーションという「コミュニケーションの核」を、ロジックによって最適化する行為だ。

今回紹介した`NamedSlideShows`は、PowerPointが持つ隠れた「データベース的機能」である。これを使えば、一つのファイルで何百ものバリエーションのプレゼンが可能になる。ぜひ、あなたの現場の「手作業の山」を、このコードでスマートに片付けてほしい。

質問があればいつでも歓迎する。コードの先にある、真の自動化を目指そう。

タイトルとURLをコピーしました