【入門編】【初心者向け】ファイル保存時に「プロジェクトの概要」プロパティを自動更新する定型化マクロ – Project VBA解析バイブル

スポンサーリンク

こんにちは!プロジェクト管理の現場で、日々ExcelやMS Projectと格闘お疲れ様です。
「マクロの記録」ボタンを押してExcelの自動化はできるようになったけれど、「Microsoft Project(MS Project)のVBAって、なんだか難しそう……」と一歩を踏み出せずにいませんか?

大丈夫です。今回は、マクロ記録すらないMS Projectの世界で、あなたのVBAデビューを最高のかたちで飾る実用的なテクニックをご紹介します。

テーマは「ファイル保存時に、プロジェクトの概要プロパティを自動更新する仕組み」です。
ここをクリアすれば、Project VBAの基本オブジェクトの考え方や、イベントトリガーの扱い方が手に取るようにわかりますよ。さあ、一緒に扉を開けていきましょう!

なぜ「概要プロパティの自動化」が必要なのか?

皆さんは、プロジェクトファイル(`.mpp`)を保存するとき、ファイル情報にある「タイトル」「管理者」「会社名」などを毎回手動で更新していませんか?
あるいは、複数人でファイルを回しているうちに「最後に更新したのは誰だっけ?」「いつのデータだこれ?」と迷子になったことはありませんか?

プロジェクト管理において、メタデータ(ファイルの属性情報)の正確性は命です。しかし、人間は忘れる生き物。だからこそ、「保存する」というアクションにフックをかけて、VBAに自動で最新状態に書き換えさせればいいのです。

1. Project VBAの全体像を掴む(超重要!)

Excel VBAとMS Project VBAの決定的な違い、それは「アクティブなプロジェクト(ActiveProject)」という概念の重みです。

Excelでは複数のワークブックが並列に存在しますが、Projectでは原則として「今、手元で開いて操作しているプロジェクト」が主役になります。そして、ファイル自体のプロパティ情報は、`Project` オブジェクトのプロパティ(あるいは組み込みのドキュメントプロパティ)として保持されています。

今回は、Projectが用意している標準の「概要プロパティ」オブジェクトにアクセスして、データを書き換えるマクロを作ります。

2. 実装コード:保存時に走る魔法のVBA

まずは、実際に開発環境(VBE)に貼り付けるコードを見てみましょう。
今回は初心者の方に向けて、ステップバイステップで解説します。

手順:VBEを開いてコードを書く

1. MS Projectを開き、キーボードの `Alt + F11` を押してVBE(Visual Basic Editor)を起動します。
2. メニューの `挿入` > `標準モジュール` をクリックします。
3. 以下のコードをコピーして貼り付けます。

Option Explicit

‘ ==============================================================================
‘ テーマ: ファイル保存時にプロジェクトの概要プロパティを自動更新する
‘ 概要 : プロジェクトを保存する直前に、最終更新者や更新日時を自動で埋め込みます。
‘ ==============================================================================

Public Sub UpdateProjectSummaryOnSave()
‘ エラーハンドリングの基本(万が一の強制終了を防ぐ)
On Error GoTo ErrorHandler

Dim prj As Project
Set prj = ActiveProject

‘ 【重要】プロジェクトがまだ一度も保存されておらず、ファイル名がない場合のガード
If prj.FullName = “” Then
MsgBox “プロジェクトが未保存のため、プロパティの自動更新をスキップします。”, vbExclamation, “自動更新通知”
Exit Sub
End If

‘ — 概要プロパティへの書き込み —
With prj
‘ 1. タイトル(ファイル名から拡張子を除いたものを自動設定する例)
‘ 例: “A社システム開発.mpp” -> “A社システム開発”
.Title = Left(.Name, InStrRev(.Name, “.”) – 1)

‘ 2. 管理者(Windowsのログインユーザー名などを取得してセット)
.Manager = Environ(“USERNAME”) & ” (自動更新)”

‘ 3. コメント欄に「最終自動更新日時」を記録する
.Comments = “最終保存日時: ” & Format(Now, “yyyy/mm/dd hh:nn:ss”) & ” by Project VBA”
End With

‘ 変更を即座に反映させるための画面・ステータス更新
Debug.Print “【Project VBA】概要プロパティを正常に更新しました: ” & Now
Exit Sub

ErrorHandler:
MsgBox “プロパティの更新中にエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical, “VBAエラー”
End Sub

3. コードの注目ポイントを解説!

初学者のあなたが「おっ」と思うべきポイントを3つに絞って解説します。

① `ActiveProject` の安全な捕まえ方

コード内の `Set prj = ActiveProject` は、今操作しているプロジェクトオブジェクトを変数に格納しています。これによって、コードがスッキリし、処理速度も向上します。

② `Environ(“USERNAME”)` で誰が更新したか一発特定

Windowsの環境変数(`Environ`)を利用することで、現在PCにログインしているユーザー名を取得しています。「誰がこのスケジュールをいじったんだっけ?」というチーム内のよくあるトラブルを防ぐ、地味に強力な機能です。

③ 未保存ファイルへの対策(ガード節)

新規作成直後の「まだ名前もついていないファイル」に対してプロパティを操作しようとすると、VBAはパニックを起こしてエラーになります。そのため、`If prj.FullName = “” Then` という「ガード節」を挟んで、未保存時の暴走を防いでいます。これがプロの書く堅牢なコードの第一歩です。

4. 初心者がハマりやすい罠とエラー対策

ここで、Project VBA特有の「初心者が必ずハマるポイント」を共有しておきます。

罠:「あれ? 保存したのにマクロが自動で実行されないんだけど?」

実は、Excelのように「ファイルを保存したら自動で動くイベント(`BeforeSave`等)」を標準の標準モジュールに書くだけでは、Projectはフックしてくれません。Projectで真の意味で「保存時自動化」を行うには、アプリケーションイベントを監視するクラスモジュールという高度な設定が必要になります。

【初学者へのアドバイス】
まずは上記のコードを「標準モジュール」に配置し、クイックアクセスツールバーやリボンにこのマクロ(`UpdateProjectSummaryOnSave`)を登録してください。
そして、「ファイルを保存する前に、このボタンを1クリックする」習慣をつけることから始めるのが、挫折しない一番の近道です。このワンアクションだけで、手動入力の手間は劇的に消え去ります。

まとめ:ここをクリアすれば、君ももうProject VBAの語り手だ

お疲れ様でした!今回は、ファイル保存時のプロジェクトプロパティ自動更新というテーマを通じて、以下のスキルをマスターしました。

  • `ActiveProject` オブジェクトの取得と活用
  • Windows環境変数を使ったユーザー情報の動的取得
  • 未保存ファイルを考慮したエラー対策(ガード節の書き方)

「マクロの記録」に頼らない、自分の手でコードを紡ぎ出す感覚は味わえましたか?
この小さな成功体験が、あなたのプロジェクト管理業務を劇的に効率化する強力な武器になります。

ここをクリアしたあなたなら、もうProject VBAの基本はバッチリです。自信を持って、次の自動化の扉を叩いてください!それでは、また次の現場でお会いしましょう。

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