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

スポンサーリンク

こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアなら、一度はこう思うはずです。
「このプレゼン、誰がいつマクロを動かしたのか、ログを追いたい。でも、わざわざ外部のテキストファイルやデータベースを管理するのは面倒だ……」と。

外部に依存せず、プレゼンファイルの中に「見えない足跡」を刻み込む。これこそが、堅牢なシステムを作る第一歩です。今日は、PowerPointの心臓部である『CustomDocumentProperties』を使い、ドキュメント自体に履歴を刻印する手法を伝授しましょう。

1. なぜ「CustomDocumentProperties」なのか?

マクロの記録から脱却し、中級者へステップアップする鍵は「オブジェクトの寿命(ライフサイクル)」を理解することです。

通常、ログを外部に出すと「ファイルパスが変更された」「移動時にログが消えた」といったトラブルが起きます。しかし、`CustomDocumentProperties`はプレゼンテーションファイルそのものに付随する「メタデータ」です。ファイルがどこへ移動しようとも、誰にメールで送られようとも、履歴は決して消えません。まさに、「自己完結型監査システム」なのです。

2. 実装の設計図:ログ刻印ロジック

今回作成するのは、以下の処理を行うコードです。
1. 現在の日時とユーザー名を取得する。
2. ファイルに「History」というプロパティがあるか確認する。
3. あれば追記、なければ新規作成する。

究極の「履歴刻印」コード

このコードを標準モジュールに貼り付けてください。

Option Explicit

‘ プレゼンに処理履歴を刻むメインプロシージャ
Public Sub RecordExecutionLog()
Dim pptPres As Presentation
Dim customProps As DocumentProperties
Dim logPropName As String
Dim logEntry As String

Set pptPres = ActivePresentation
logPropName = “LastExecutionLog”

‘ 実行時の情報を生成
logEntry = “[” & Now & “] Executed by: ” & Environ(“USERNAME”)

‘ プロパティの集合体を取得
Set customProps = pptPres.CustomDocumentProperties

‘ 既存のログがあるか確認し、あれば改行して追記、なければ新規作成
On Error Resume Next ‘ プロパティが存在しないエラーを回避
Dim existingLog As String
existingLog = customProps(logPropName).Value

If Err.Number <> 0 Then
‘ 初回作成時
customProps.Add Name:=logPropName, LinkToContent:=False, _
Type:=msoPropertyTypeString, Value:=logEntry
Else
‘ 二回目以降は追記
customProps(logPropName).Value = existingLog & vbCrLf & logEntry
End If
On Error GoTo 0

MsgBox “ログを刻印しました。” & vbCrLf & logEntry, vbInformation
End Sub

3. コードの「魂」を読み解く:知っておくべき3つのポイント

① `Environ(“USERNAME”)` の魔法

`Environ`関数は、Windowsの環境変数にアクセスします。「誰が実行したか」をOSレベルで取得するため、ユーザーがいちいち名前を入力する必要はありません。これが自動化の鉄則です。

② `On Error Resume Next` の正しい使い方

プロパティが存在しないとき、`customProps(logPropName).Value` を参照するとエラー(実行時エラー 5)が飛びます。
「エラーが出たら無視して処理を継続する」という戦略をとることで、「存在しなければ作る、存在すれば書き換える」という柔軟な制御を実現しています。

③ なぜ「不可視」なのか

このデータは、[ファイル] > [情報] > [プロパティ] > [詳細プロパティ] > [ユーザー設定] タブに保存されます。一般ユーザーは存在に気づかないため、データの整合性が保たれやすく、非常にクリーンな管理が可能です。

4. 陥りやすい「罠」と対策

初心者がやりがちな失敗を先回りして教えます。

  • 「ファイルが保存されていない」問題

`CustomDocumentProperties`は、ファイルを保存しないとディスクに書き込まれません。処理の最後に `ActivePresentation.Save` を入れるべきか検討してください。ただし、勝手に上書きするのはリスキーなので、運用ルールに合わせて判断を。

  • ログが肥大化する

数千回実行されると、プロパティのサイズ制限(最大値はあるものの現実的にはほぼ問題なし)に引っかかる可能性があります。もしログが巨大化しそうなら、最新の10件だけを残すような「スライディングウィンドウ」アルゴリズムを導入しましょう。

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

プログラミングの醍醐味は、ただ動くものを作ることではなく、「後からメンテナンスする誰か(あるいは未来の自分)」を助ける仕組みを作ることです。

今回学んだ「プレゼンファイル自体に履歴を刻む」という手法は、まさにその第一歩。これができるようになったあなたは、もう「マクロの記録」に頼るだけの初心者ではありません。

ここをクリアすれば、PowerPoint VBAは単なる「スライド作成ツール」から、「知的なドキュメント管理エンジン」へと姿を変えます。
さあ、あなたのプレゼンファイルに、最初の「足跡」を刻み込んでみてください。何かわからないことがあれば、いつでもまた聞きに来てくださいね。応援しています!

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