現場のエンジニアへ:その「ワンクリック」がプロジェクトの命運を分ける
多くのプロジェクトマネージャーが陥る罠がある。それは「ベースラインの設定を後回しにする」こと、あるいは「手動操作の不確実性に依存する」ことだ。
Project VBAを扱う上で、`BaselineSave`メソッドは単なる記録ツールではない。それは「プロジェクトの現在地を永遠に固定するタイムカプセル」だ。これを自動化し、ボタン一つで叩けるようにすることは、単なる効率化の域を超え、プロジェクト管理のガバナンスそのものとなる。
今日は、初心者から一歩抜きん出た「堅牢なベースライン自動保存」の極意を授ける。
—
1. なぜ「そのまま」書くと事故が起きるのか
多くのチュートリアルでは、単に `ActiveProject.BaselineSave` を一行書くよう教える。だが、現場でそれをやれば必ず事故る。
- 誤操作による上書き: 警告なしにベースラインを更新してしまい、過去の経緯が消滅する。
- ファイル状態の非考慮: ファイルが読み取り専用だったり、同期が取れていない状態で実行されるとエラーで止まる。
- 例外処理の欠如: そもそもプロジェクトが保存されていない状態でベースラインを引こうとすれば、整合性が取れなくなる。
我々プロフェッショナルは、「操作」ではなく「状態」を制御する。
—
2. 実務で通用する「堅牢なベースライン保存」コード
以下のコードは、単にメソッドを叩くのではなく、実行前の安全確認と、予期せぬ中断を防ぐためのガード節を備えたプロダクションコードだ。
‘ ——————————————————————
‘ @description 現在の計画をベースライン(Baseline)として保存する
‘ @author Project Architect
‘ ——————————————————————
Public Sub SaveBaselineRobustly()
On Error GoTo ErrorHandler
‘ 1. プロジェクトが開かれているか確認
If Application.Projects.Count = 0 Then
MsgBox “対象のプロジェクトが見当たりません。”, vbCritical
Exit Sub
End If
‘ 2. 保存確認(事故防止のガード)
If MsgBox(“現在のスケジュールをベースラインとして保存します。” & vbCrLf & _
“既存のベースラインは上書きされます。よろしいですか?”, _
vbYesNo + vbQuestion, “実行確認”) = vbNo Then
Exit Sub
End If
‘ 3. ベースライン保存の実行
‘ AllTasks:=True : 全タスクを対象にする
‘ CopyBaselineToBaseline:=pjBaseline : ベースライン1に保存
‘ Into:=pjBaselineSet : 標準のベースラインセットを使用
ActiveProject.BaselineSave AllTasks:=True, _
CopyBaselineToBaseline:=pjBaseline, _
Into:=pjBaselineSet
MsgBox “ベースラインの保存が完了しました。”, vbInformation
Exit Sub
ErrorHandler:
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical
End Sub
—
3. アーキテクトからの助言:さらなる高みへ
このコードを実装する上で、以下の3点を意識してほしい。
① 「いつ」保存するかを制御せよ
このマクロを「保存ボタン」に割り当てるだけでなく、プロジェクトの「マイルストーン達成時」に自動で発火させる仕組みを構築せよ。Projectの `Project_BeforeSave` イベントと組み合わせることで、「上書き保存のたびにベースラインの整合性をチェックする」という究極の安全策を敷くことが可能になる。
② データベース連携の注意点
プロジェクトをサーバー(Project Online/Server)で管理している場合、`BaselineSave` は即座にサーバーと同期される。大規模プロジェクトでこれを連発するとネットワーク負荷がかかるだけでなく、サーバー側のロック競合を招く可能性がある。「ベースライン保存は計画変更の確定時のみ」という業務ルールを徹底すること。
③ 保守性の観点
コード内の `pjBaseline` を定数として外部設定ファイル(またはHiddenシート)に切り出せるようにしておけば、将来的に「ベースライン1~10を使い分ける」という仕様変更にも即座に対応できる。ハードコーディングは、常に技術的負債の種である。
—
結論:ツールは「思考」を代行するものではない
このマクロを使えば、君たちは「ベースラインを保存する」という単純作業から解放される。だが、忘れないでほしい。真に重要なのは、「なぜ今、ベースラインを引くのか」というマネジメントの判断だ。
自動化の目的は、手を楽にすることではない。「人間が判断に集中するための時間と余白を生み出すこと」にある。
さあ、このコードを武器に、君のプロジェクトをより高次元な管理体制へと導いてくれ。健闘を祈る。
