【PowerPoint VBA】プレゼンに「記憶」を持たせる—CustomDocumentPropertiesを活用したステート管理の極意
こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアとして、今日は「マクロの記録」の先にある、プロフェッショナルな状態管理の話をしましょう。
多くの初心者は、設定値をセルや外部テキストファイルに保存しようとします。しかし、プレゼンテーション単体で完結し、配布も容易な「自己完結型ツール」を作りたいなら、`CustomDocumentProperties`こそが最強の武器になります。
今日は、プレゼン全体の状態をXML(あるいはJSON風の構造化文字列)として埋め込み、「次に開いた時に前回の続きから再開する」ためのステート管理クラスの設計術を伝授します。
—
1. なぜ「CustomDocumentProperties」なのか?
`CustomDocumentProperties`は、PowerPointファイルの中に隠された「メタデータ置き場」です。ここには、スライドのタイトルや作成者だけでなく、私たち開発者が定義した任意のキーと値を保存できます。
- メリット: ファイルを持ち運ぶだけで設定がついてくる。
- 注意点: ここは「文字列」しか入りません。だからこそ、複雑なデータは「シリアライズ(直列化)」して保存する必要があるのです。
—
2. ステート管理クラスの設計思想
今回は、プレゼンの「現在のモード」や「最終編集日時」などを一つの文字列として管理するクラス `StateManager` を設計します。
必要な準備
VBAエディタで「参照設定」から `Microsoft XML, v6.0` を有効にしてください。これにより、XMLの生成・解析が驚くほど簡単になります。
実装コード:StateManager.cls
このクラスをインポートし、`StateManager` という名前で保存してください。
‘ StateManager.cls
Option Explicit
Private Const KEY_APP_STATE As String = “AppInternalState”
‘ 状態を保存するメソッド
Public Sub SaveState(stateXml As String)
Dim props As Office.DocumentProperties
Set props = ActivePresentation.CustomDocumentProperties
‘ 既存のプロパティを検索して更新、なければ追加
On Error Resume Next
props(KEY_APP_STATE).Value = stateXml
If Err.Number <> 0 Then
props.Add Name:=KEY_APP_STATE, LinkToContent:=False, _
Type:=msoPropertyTypeString, Value:=stateXml
End If
On Error GoTo 0
End Sub
‘ 状態を読み込むメソッド
Public Function LoadState() As String
On Error Resume Next
LoadState = ActivePresentation.CustomDocumentProperties(KEY_APP_STATE).Value
If Err.Number <> 0 Then LoadState = “” ‘ 初回起動時は空を返す
End Function
—
3. 実践:XMLを使ったデータの永続化
では、実際に使ってみましょう。標準モジュールで以下のように記述します。
Sub SaveWorkState()
Dim sm As New StateManager
Dim xmlContent As String
‘ 状態をXML形式で作成(簡易的な例)
xmlContent = “
‘ 保存
sm.SaveState xmlContent
MsgBox “状態を保存しました。”
End Sub
Sub LoadWorkState()
Dim sm As New StateManager
Dim state As String
state = sm.LoadState
If state <> “” Then
MsgBox “復元したデータ: ” & state
Else
MsgBox “保存されたデータはありません。”
End If
End Sub
—
4. プロの視点:陥りやすい罠と対策
この実装を行う上で、必ず直面する壁が2つあります。
① 「プロパティがない」エラー
初回起動時、`CustomDocumentProperties`には何も登録されていません。`Err.Number` を使ったエラーハンドリングを怠ると、コードは即座に停止します。必ず `On Error Resume Next` で囲い、安全に処理を分岐させてください。
② 文字列のサイズ制限
`CustomDocumentProperties`には理論上の上限がありますが、数千文字のXMLを放り込んでもPowerPointは壊れません。ただし、あまりに巨大なデータを扱う場合は、別の隠しスライドにデータを隠す「隠しスライド・データストア方式」への切り替えを検討しましょう。
—
5. まとめ:ここをクリアすれば「開発者」だ
初心者は「今動けばいい」コードを書きますが、プロは「次に開いた時にどうあるべきか」という時間の概念をコードに持ち込みます。
- CustomDocumentPropertiesは、プレゼンテーションを単なるスライド集から「動的なアプリケーション」へと昇華させるための鍵です。
- XMLやJSONで構造化することで、将来的な機能拡張(設定項目の追加など)にも耐えうる設計になります。
最初は複雑に見えるかもしれませんが、この「状態管理」のパターンを一度身につければ、どんな複雑な業務自動化ツールも怖くありません。
さあ、あなたのプレゼンテーションに「記憶」という命を吹き込んでみてください。何か詰まったら、いつでも戻ってきてくださいね。応援しています。
