【実務・中級編】【実務中級】Presentation.CustomDocumentPropertiesを使った、プレゼンファイル自体への「マクロ実行ログ(日時・担当者)」自動蓄積システム – PowerPoint VBA解析バイブル

スポンサーリンク

プレゼンに「記憶」を宿せ:CustomDocumentPropertiesで実現する堅牢な監査ログシステム

業務自動化の現場において、最も避けたいのは「誰が、いつ、どのバージョンのデータで処理したか分からない」というブラックボックス化だ。

外部のテキストファイルやExcelにログを吐き出す手法は、ファイルパスの依存、共有権限の問題、あるいはファイル自体の移動によるリンク切れという「保守の地雷」を常に抱えている。

本稿では、PowerPointファイルそのものにメタデータとして履歴を刻み込む、極めてクリーンかつ堅牢なアーキテクチャを伝授する。

なぜ「外部ログ」ではなく「内部プロパティ」なのか

PowerPointの`CustomDocumentProperties`を利用する最大の利点は、「データとメタデータの完全な一体化」にある。

  • ポータビリティ: ファイルをメールで送ろうが、クラウドに移動しようが、ログは不可分として追従する。
  • 不可視性: ユーザーが誤ってログを消去するリスクが極めて低い。
  • 低負荷: 外部ファイルへのI/O処理を排除できるため、ネットワークストレージ上での動作も安定する。

設計の勘所:ログ蓄積のベストプラクティス

単なる上書き保存では、履歴は「最新の1行」しか残らない。履歴を蓄積するには、既存の文字列を取得し、それに新規ログを連結して再格納する手法をとる。

実装上の注意点

1. プロパティの存在確認: 初回実行時にはプロパティが存在しないため、エラーハンドリングが必須となる。
2. 文字数制限: `CustomDocumentProperties`には格納可能な最大長(約255文字程度)という制約がある。膨大なログを溜め込む用途には向かない。あくまで「直近の重要操作履歴」を保持するためのものと割り切るべきだ。
3. パフォーマンス: 大規模なループ処理の中で頻繁に読み書きするとファイルI/Oのボトルネックになる。保存時、あるいは処理の完了直前に一度だけ書き込む設計が定石だ。

【実務コード】堅牢なログ記録モジュール

以下のコードは、エラーハンドリングを完備した、そのままプロダクション環境へ投入可能なモジュールだ。

‘ ———————————————————————-
‘ 処理名: WriteExecutionLog
‘ 概要 : プレゼンテーションに実行ログを追記する
‘ 引数 : strMessage – 記録したいアクション内容
‘ ———————————————————————-
Public Sub WriteExecutionLog(ByVal strMessage As String)
Dim pptPres As Presentation
Dim customProps As DocumentProperties
Dim propName As String
Dim logEntry As String

Set pptPres = ActivePresentation
Set customProps = pptPres.CustomDocumentProperties
propName = “LastExecutionLog”

‘ タイムスタンプ付きのログ文字列を生成
logEntry = “[” & Now & “] User: ” & Environ(“USERNAME”) & ” | ” & strMessage & vbCrLf

On Error Resume Next
‘ プロパティの存在チェック
Dim existingVal As String
existingVal = customProps(propName).Value

If Err.Number <> 0 Then
‘ 初回作成時
customProps.Add Name:=propName, LinkToContent:=False, _
Type:=msoPropertyString, Value:=logEntry
Else
‘ 追記更新(既存データと結合)
‘ 文字数制限を考慮し、古いログを適宜カットする等のロジックをここに加えるのがベター
customProps(propName).Value = logEntry & existingVal
End If
On Error GoTo 0

Debug.Print “ログを記録しました: ” & logEntry
End Sub

運用フェーズへの提言

このシステムを導入する際、開発者として意識すべきは「開発者以外への配慮」だ。

1. プロパティの可視化: ユーザーは「ファイル」→「情報」→「プロパティ」からこのデータを確認できる。ここに「操作履歴」という項目が見えるだけで、ユーザーのセキュリティ意識は向上する。
2. 限界を知る: もしログが数千件に及ぶような要件であれば、それはVBAの領域ではない。素直にSharePointリストやSQL Server等のデータベースへ移行するトリガーとしてこの設計を利用せよ。
3. 自動化のフック: `Application_PresentationBeforeSave` イベントと組み合わせれば、「保存するたびに自動的に署名を刻む」といった高機能な監査システムへと拡張が可能だ。

まとめ:エンジニアの美学

「動くもの」を作るのは初心者でもできる。しかし、「壊れず、汚さず、後から追跡可能な仕組み」を設計することこそが、プロフェッショナルな業務自動化エンジニアの仕事だ。

このコードをあなたのプレゼンテーションに組み込み、属人化という名の負債を少しずつ返済していってほしい。質問があればいつでも歓迎する。現場からは以上だ。

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