こんにちは!Microsoft Projectの自動化の世界へようこそ。
普段、マクロの記録ボタンを押して「動いた!」と喜んでいた時期を少しだけ卒業して、今日から“コードでプロジェクトを意のままに操るエンジニア”の一歩を踏み出してみませんか?
今回は、多くの人が見落りがちだけど、組織でプロジェクトを管理する上では超重要なテーマ「ファイル保存時に、作成者や会社名を社内規定通りに自動で書き換えるマクロ」を解説します。
「手動でプロパティを開いて入力し直すの、正直めんどくさい……」
そんな日々のイライラを、たった数行のVBAコードで綺麗さっぱり解決しちゃいましょう!
ここをクリアすれば、Project VBAの基本と「イベント駆動」の概念はバッチリですよ。それでは、優しく丁寧に紐解いていきましょう。
—
1. なぜ「ファイルプロパティの自動更新」が必要なのか?
皆さんは、複数人で一つのプロジェクトファイルを回していく中で、こんなトラブルに直面したことはありませんか?
- 「あれ、このファイルの作成者、前任者の名前のままになってるよ!」
- 「会社名の表記が『株式会社〇〇』だったり『(株)〇〇』だったりでバラバラ……」
- 「社内監査のチェックで、メタデータ(ファイルの裏側の情報)の不備を指摘された」
Microsoft Projectには、ファイルごとの「作成者」や「会社名」を記録するプロパティ(概要タブ)が存在します。しかし、これを人間の手で毎回正確に入力・維持するのは、ヒューマンエラーの温床です。
これを「ファイルを保存するタイミングで、VBAが自動的に社内規定のフォーマットに強制上書きする」ように仕組み化してしまえば、ミスはゼロになります。精神的にもすごくラクになりますよね。
—
2. 実装するVBAコードの全体像
まずは、実際に動くコードをドーンとお見せします。
「難しそう……」と身構えなくて大丈夫。一つずつ意味を解説するので安心してください。
Project VBAで「保存する瞬間」を捉えるには、`ProjectBeforeSave` という特別なイベント(トリガー)を使用します。
‘ ==============================================================================
‘ モジュール名: ThisProject (※必ずこの専用モジュールに貼り付けてください)
‘ 概要: プロジェクト保存時に、作成者と会社名を社内規定に自動強制更新する
‘ ==============================================================================
Private Sub Project_ProjectBeforeSave(ByVal pj As Project, Byal SaveAs As Boolean, ByRef Cancel As Boolean)
On Error GoTo ErrorHandler
‘ ————————————————————————–
‘ 1. 社内規定の定義 (必要に応じてここを変更してください)
‘ ————————————————————————–
Const AUTHOR_NAME As String = “PMO推進室 / 自動化ボット”
Const COMPANY_NAME As String = “株式会社〇〇テクノロジーズ”
‘ ————————————————————————–
‘ 2. ファイルプロパティ(概要)への書き込み
‘ ————————————————————————–
‘ Projectオブジェクトのプロパティを直接書き換えます
pj.Author = AUTHOR_NAME
pj.Company = COMPANY_NAME
‘ ログ出力イミディエイトウィンドウ用(デバッグ確認用)
Debug.Print “【Project VBA】保存時プロパティ自動更新完了: ” & pj.Name
Exit Sub
ErrorHandler:
‘ 万が一エラーが発生した場合は、メッセージを出して処理を継続する
MsgBox “プロパティの自動更新中にエラーが発生しました。” & vbCrLf & _
“エラー内容: ” & Err.Description, vbExclamation, “警告”
End Sub
—
3. コードのここがポイント!初学者が押さえるべき3つの極意
上記のコードをただコピペするだけでなく、「なぜこう書くのか」を理解するのがエンジニアへの近道です。特に大切な3つのポイントを解説します。
① 置き場所が命:「標準モジュール」ではなく「ThisProject」
Excel VBAだと、普通の「標準モジュール」にコードを書きがちですよね。しかし、Projectのイベントプロシージャ(特定の動作に連動するマクロ)は、`ThisProject` モジュールの中に書かなければ絶対に動きません。
- 理由: `Project_ProjectBeforeSave` は、このプロジェクトファイル自体のライフサイクル(イベント)を監視する専用の部屋(クラスモジュールのようなもの)に住んでいるからです。
② `ProjectBeforeSave` という魔法のトリガー
このイベントプロシージャの名前は、Microsoftが厳格に決めています。
ユーザーが「上書き保存」または「名前を付けて保存」のボタンを押したまさにその直前に、ProjectがこのSubプロシージャを自動的に呼び出してくれます。そのため、保存し忘れる心配が物理的に発生しません。
③ 定数(Const)を使ったスマートな設計
コードの冒頭で `Const AUTHOR_NAME As String = “…”` と宣言しています。
「定数(Constants)」を使うことで、将来的に社名や部署名が変わったときも、コードのあちこちを探す必要がなく、一番上の1行を書き換えるだけで全社展開が可能になります。プログラミングの基本であり、保守性を高めるためのプロの技です。
—
4. 現場でありがち!初心者がハマる「よくあるエラーと対策」
「あれ、本通りに書いたのに動かないぞ?」となったときは、大体以下の原因のどれかに引っかかっています。
トラブル A: マクロが全く反応しない(保存しても何も変わらない)
- 原因の多く: コードを `ThisProject` ではなく、普通の「標準モジュール(Module1など)」に書いてしまっている。
- 対策: ProjectのVBE画面(Alt + F11)を開き、左側のプロジェクトツリーにある `ThisProject` をダブルクリックして、その中にコードが正しく配置されているか確認してください。
トラブル B: セキュリティ警告でマクロが無効化される
- 原因: Officeのセキュリティ設定により、マクロの実行がブロックされている。
- 対策: ファイル形式をマクロ有効ファイル(`.mpp` ではなく `.mpt` または信頼された場所にある `.mpp`)にし、セキュリティセンターからマクロを有効化、または「信頼できる場所」にフォルダを指定してください。
—
まとめ
今回は、Project VBAの基本を固めつつ、実務で即戦力となる「ファイル保存時のプロパティ自動更新」について解説しました。
- イベント駆動(`ProjectBeforeSave`)を使うことで、人の手によるミスを完全にシャットアウトできる。
- コードの配置場所は、標準モジュールではなく `ThisProject`。
- 定数(`Const`)をうまく使って、将来の仕様変更に強いコードを書く。
この小さな自動化の積み重ねが、あなたの業務を劇的にスリムにし、プロジェクトマネジメントの本質に集中する時間を生み出してくれます。
「ここをクリアすれば、Project VBAの基本はバッチリですよ!」
ぜひ今日の業務から取り入れて、周囲をアッと言わせる自動化エンジニアを目指してくださいね。次回の記事もお楽しみに!
