【入門編】【プロフェッショナル】Presentation.CustomDocumentPropertiesにXMLデータをシリアライズして格納し、VBAからプレゼンテーション全体の「状態」や「編集履歴」を構造化データとして永続化・復元するステート管理クラスの設計 – PowerPoint VBA解析バイブル

スポンサーリンク

【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 = “AdminDebug

‘ 保存
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で構造化することで、将来的な機能拡張(設定項目の追加など)にも耐えうる設計になります。

最初は複雑に見えるかもしれませんが、この「状態管理」のパターンを一度身につければ、どんな複雑な業務自動化ツールも怖くありません。

さあ、あなたのプレゼンテーションに「記憶」という命を吹き込んでみてください。何か詰まったら、いつでも戻ってきてくださいね。応援しています。

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