プロジェクトを「生きたドキュメント」へ。保存時に概要プロパティを自動更新するVBA極意
こんにちは。現場の最前線で自動化アーキテクチャを設計しているエンジニアです。
皆さんは、MS Projectで「誰がいつ更新したか」を管理するのに苦労していませんか?「プロパティ」画面を開いて手打ちする……そんな作業は、もう卒業しましょう。
今回は、Project VBAの「イベント」を使い、ファイルを保存する瞬間に自動で概要を書き換えるという、現場で即戦力となるテクニックを伝授します。ここをクリアすれば、あなたのProject管理は一気にプロフェッショナルな領域へと足を踏み入れることになりますよ。
—
1. なぜ「イベント」を使うのか?
VBAの世界には、人間がボタンを押して実行する「標準モジュール」と、特定のタイミングで勝手に動く「イベントプロシージャ」の2種類があります。
今回使うのは後者です。`BeforeSave` というイベントを使えば、ユーザーが「保存」ボタンを押した瞬間、Projectが「ちょっと待った!今のうちにこれを書き込んでおこう」と判断して処理を実行してくれます。
陥りやすい罠:どこに書く?
初心者が一番最初に迷うのが「コードをどこに書くか」です。標準モジュールに書いても、このイベントは動きません。`ThisProject` という専用の場所に書く必要があるのです。
—
2. 実装コード:魔法のレシピ
それでは、実際にコードを書いてみましょう。以下の手順で進めてください。
1. Projectを開く。
2. `Alt + F11` でVBAエディタを開く。
3. 左側のプロジェクトツリーで `ThisProject` をダブルクリック。
4. 以下のコードをコピー&ペーストしてください。
‘ プロジェクトの保存直前に実行されるイベント
Private Sub Project_BeforeSave(ByVal pj As Project)
‘ エラーハンドリングは自動化の必須マナーです
On Error Resume Next
With pj
‘ プロジェクトの概要プロパティを更新
.ProjectSummaryInfo.Author = “自動化システム管理部”
.ProjectSummaryInfo.Manager = “プロジェクトマネージャー名”
‘ 最終更新日を今の時刻に更新(これは自動ですが、明示的に制御可能です)
‘ コメント欄に実行ログを残すのが現場の流儀です
.ProjectSummaryInfo.Comments = “最終更新: ” & Now & ” にて自動更新完了”
End With
‘ エラーが発生していないかチェック
If Err.Number <> 0 Then
MsgBox “プロパティの更新中に問題が発生しました。” & vbCrLf & “詳細: ” & Err.Description
End If
On Error GoTo 0
End Sub
—
3. コードの解説:ここが「プロ」のポイント
ただ動くコードを書くだけなら誰でもできます。しかし、「なぜこう書くのか」を理解することが、エンジニアとしての格を上げます。
- `Project_BeforeSave`: これはProjectが用意した特別な「フック」です。保存処理の直前に割り込むことで、データの整合性を担保します。
- `With pj … End With`: 繰り返し `pj.` と書くのを防ぐだけでなく、メモリ上のアクセスを効率化します。コードが読みやすくなるのは、バグを減らすための重要な工夫です。
- `On Error Resume Next`: 今回のケースでは、もしプロパティ設定が何らかの理由(読み取り専用など)で失敗しても、保存そのものを止めてはいけません。「失敗したらその時はその時」という柔軟な姿勢をコードで表現しています。
—
4. 初心者がハマる「あるある」エラー集
Q: 「マクロを実行しても何も起きません!」
A: このコードは「保存ボタンを押した時」にしか動きません。F5キーで手動実行しても動かないのが正解です。まずは「保存」を押して、プロパティを確認してみてください。
Q: 「そもそもマクロが動かない!」
A: ファイルの形式を確認してください。`.mpp` 形式ではなく、`.mppm`(マクロ有効プロジェクト) として保存する必要があります。また、信頼できる場所(トラストセンター)の設定で、マクロが有効になっているかも確認しましょう。
—
最後に:自動化は「未来の自分」へのプレゼント
今回のテクニックは、一見小さな作業に見えるかもしれません。しかし、大規模なプロジェクトで何十人ものメンバーが関わる場合、こうした「情報の自動追跡」は、トラブルを未然に防ぐ強力な武器になります。
「面倒な作業はすべて機械に任せる」。この姿勢さえあれば、あなたはもう立派な業務自動化エンジニアです。
もし分からないことがあれば、またいつでも聞きに来てくださいね。あなたの自動化ライフが、より快適で創造的なものになりますように!
