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自動化の入り口です。これをマスターすれば、プレゼン資料のクオリティ管理を人間がやる必要はなくなります。
「機械ができることは機械に任せ、人間はロジックやデザインの質に集中する」。これが、世界最高峰の自動化エンジニアの流儀です。
さあ、あなたの資料も「自動で整理される」賢いドキュメントへと進化させてみてください。もし詰まったら、いつでも戻ってきてくださいね。応援しています。
