【入門編】【実務中級】スライドのドラッグ移動(SlideIndex変更)を検知し、スライド内の特定の「ページ番号表示用シェイプ」の値を自動再計算するイベント連動VBA – PowerPoint VBA解析バイブル

スポンサーリンク

PowerPointの「スライド移動」をトリガーにせよ!自動ページ番号更新の極意

こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアです。

PowerPointで資料を作っているとき、スライドを入れ替えた瞬間に「あ、ページ番号がズレた……」と修正に追われたことはありませんか? 手動修正はヒューマンエラーの温床です。

今日は、「スライドの並び替え(SlideIndexの変更)をVBAで検知し、全ページ番号を強制再計算する」という、実務で死ぬほど役に立つテクニックを伝授します。

「マクロの記録」から一歩踏み出し、PowerPointの心臓部(イベントハンドラ)に触れる準備はいいですか?

1. なぜ「自動更新」が必要なのか?

PowerPointには標準の「スライド番号」機能がありますが、デザインの自由度が低く、現場ではテキストボックスをページ番号代わりにするケースが非常に多いはずです。

しかし、VBAで `Slide.Index` を取得するだけでは、移動のタイミングを捉えられません。そこで登場するのが「アプリケーション・レベルのイベント」です。

陥りがちな罠:ボタンを押して実行する?

初心者は「更新ボタン」を作りたがります。しかし、それでは「更新し忘れる」というリスクが残ります。真の自動化エンジニアは、操作そのものをトリガーにするのです。

2. 魔法の鍵:Class Module(クラスモジュール)

PowerPoint VBAでイベント(操作の検知)を扱うには、通常の標準モジュールではなく「クラスモジュール」という特殊な箱を使います。

手順1:クラスモジュールの作成

1. VBAエディタ(Alt + F11)を開く。
2. 左側のプロジェクトウィンドウを右クリック > 挿入 > クラスモジュール
3. 名前を `EventClass` に変更します。

手順2:コードの記述

このクラスの中で、PowerPointのイベントを「監視」します。

‘ EventClass モジュール内
Public WithEvents App As Application

‘ スライドが移動した際に発生するイベント
Private Sub App_PresentationPrint(ByVal Pres As Presentation)
‘ ※注意: PPTには「SlideMoved」イベントが存在しないため、
‘ 実務では「保存時」や「プリント時」などをトリガーに補完します。
‘ 今回は最も汎用的な「保存時」にフックをかける設計にします。
End Sub

Private Sub App_PresentationBeforeSave(ByVal Pres As Presentation, Cancel As Boolean)
‘ 保存直前に番号を再計算する
Call UpdatePageNumbers(Pres)
End Sub

3. ページ番号を再計算するロジック

次に、標準モジュールに「全スライドを走査し、ページ番号を書き換える」関数を書きます。

‘ 標準モジュール (Module1)
Sub UpdatePageNumbers(Pres As Presentation)
Dim sld As Slide
Dim shp As Shape

For Each sld In Pres.Slides
‘ 特定の名前のシェイプを探す(例:”PageNumberBox”)
For Each shp In sld.Shapes
If shp.Name = “PageNumberBox” Then
‘ スライドのインデックスを文字列として代入
shp.TextFrame.TextRange.Text = CStr(sld.SlideIndex)
End If
Next shp
Next sld
End Sub

4. 仕上げ:イベントを有効化する

最後に、PowerPointを立ち上げた瞬間にこの監視機能をスタートさせる必要があります。`ThisPresentation` オブジェクトを使います。

‘ ThisPresentation モジュール
Dim myApp As New EventClass

Private Sub App_Startup()
Set myApp.App = Application
End Sub

5. ここをクリアすれば一人前!注意点とコツ

① 「シェイプ名」を固定せよ

コード内で `If shp.Name = “PageNumberBox”` と書きましたね。これが動かない最大の原因は、「シェイプの名前」がデフォルトのままだからです。

  • PowerPoint上でシェイプを選択し、「選択ウィンドウ(ホームタブ > 選択 > 選択ウィンドウ)」から、必ず名前を `PageNumberBox` に変更してください。これがこの自動化の「ID」になります。

② イベント連鎖の無限ループに注意

イベント内で「保存」をトリガーにすると、保存処理の中でまた保存が走り……という無限ループに陥ることがあります。`Application.EnableEvents = False` を適切に使い、処理が終わったら `True` に戻す癖をつけてください。

最後に:エンジニアとしての視点

今回紹介した「イベント検知」は、PowerPoint自動化の入り口です。これをマスターすれば、プレゼン資料のクオリティ管理を人間がやる必要はなくなります。

「機械ができることは機械に任せ、人間はロジックやデザインの質に集中する」。これが、世界最高峰の自動化エンジニアの流儀です。

さあ、あなたの資料も「自動で整理される」賢いドキュメントへと進化させてみてください。もし詰まったら、いつでも戻ってきてくださいね。応援しています。

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