【入門編】【実務中級】Presentation.CustomDocumentPropertiesを使って、プレゼンファイル自体に「マクロの実行ログ(実行日時、実行者、処理内容)」を隠しデータとして自動蓄積する監査システム – PowerPoint VBA解析バイブル

スポンサーリンク

PowerPoint VBAの「深層」に刻む:監査ログ自動蓄積システムの構築

こんにちは。自動化の現場で泥と汗をかいてきたエンジニアの視点から、今日は一歩踏み込んだお話をしましょう。

PowerPoint VBAを触り始めると、多くの方が「図形を動かす」「スライドを増やす」といった表層的な操作に終始しがちです。しかし、真のプロフェッショナルは「データそのもののメタ構造」を制御します。

今回実装するのは、プレゼンテーションファイルに「誰が、いつ、何をしたか」という履歴を、ファイル内部の隠し領域(CustomDocumentProperties)に自動で刻み込む監査システムです。

これは単なる便利ツールではありません。共有ファイルが「誰の手によって改変されたか」を追跡する、防衛ラインの構築です。さあ、一緒に深淵を覗いてみましょう。

1. なぜ「CustomDocumentProperties」なのか?

通常のテキストボックスにログを書くと、誰かに消されたり、デザインを崩されたりしますよね。
しかし、`CustomDocumentProperties`は違います。これはファイル自体に付随する「戸籍」のような領域です。

  • 視認できない: 一般ユーザーはプロパティ画面を開かないと見えません。
  • 消えない: スライドを削除しても、このデータはファイルに残り続けます。
  • 構造化: ログを追記形式で保持することで、簡易的なDBとして機能します。

2. 実装コード:監査ログ蓄積エンジン

以下のコードを標準モジュールにコピーしてください。これが、あなたのファイルを守る「番人」となります。

Option Explicit

”’

”’ 実行ログをドキュメントのプロパティに追記する
”’

Public Sub WriteAuditLog(ByVal processName As String)
Dim ppt As Presentation
Dim props As DocumentProperties
Dim logProp As DocumentProperty
Dim logContent As String
Dim newEntry As String

Set ppt = ActivePresentation
Set props = ppt.CustomDocumentProperties

‘ 実行日時とユーザー名を含むログ文字列を作成
newEntry = Format(Now, “yyyy/mm/dd hh:nn:ss”) & ” | User:” & Environ(“USERNAME”) & ” | Action:” & processName & vbCrLf

‘ “AuditLog” という名前のプロパティが存在するか確認
On Error Resume Next ‘ プロパティがない場合のエラーを回避
Set logProp = props(“AuditLog”)
On Error GoTo 0

If logProp Is Nothing Then
‘ 初回実行時は新しくプロパティを作成
props.Add Name:=”AuditLog”, LinkToContent:=False, Type:=msoPropertyString, Value:=newEntry
Else
‘ 二回目以降は既存のログに追記(最大サイズ制限に注意が必要)
logProp.Value = logProp.Value & newEntry
End If

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

コードの重要ポイント解説

  • `Environ(“USERNAME”)`: Windowsのログインユーザー名を取得します。誰が操作したかを特定する鍵です。
  • `On Error Resume Next`: プロパティが存在しない初回時にエラーで止まらないよう、あえてエラーを「握りつぶし」て判定に回しています。これはVBAにおける定石です。
  • `vbCrLf`: 改行コードです。ログを読みやすくするために不可欠です。

3. 現場で「必ず」陥る罠と回避策

エンジニアとして、知っておくべき「罠」を2つ伝授します。

罠1:プロパティの容量制限

`CustomDocumentProperties`には格納できる文字数に限界があります。何年もログを蓄積すると溢れる可能性があります。

  • 対策: ログが長くなりすぎたら古いものを消す、あるいは「ログの末尾1000文字だけを残す」といったフィルタリング処理を入れるのが、アーキテクトの嗜みです。

罠2:オブジェクトの解放

VBAはメモリ管理が甘い言語です。大規模な処理を行う際は、最後に `Set logProp = Nothing` と記述して、使用したメモリを明示的に解放する癖をつけましょう。

4. 監査ログを呼び出す活用例

この機能を活用するには、マクロの冒頭で一行呼び出すだけです。

Sub SampleAutomation()
‘ — 処理の開始 —
Call WriteAuditLog(“スライド一括削除処理”)

‘ 本来の処理を書く
MsgBox “処理が完了しました。ログがファイルに刻まれました。”
End Sub

最後に:エンジニアとしてのマインドセット

プログラミングは、単に動くものを作ることではありません。「運用後の未来」を予測することです。

この監査システムを導入することで、あなたは「ただコードを書く人」から、「ファイルのガバナンス(統治)を設計する人」へと進化します。最初は少し難しく感じるかもしれませんが、この`CustomDocumentProperties`という「ファイルの中の隠し扉」を扱えるようになれば、あなたの自動化スキルは間違いなく一級品です。

ここをクリアすれば、PowerPoint VBAの基本はバッチリです。自信を持って、次なる自動化の海へ漕ぎ出してください。応援しています!

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