【実務・中級編】【初心者向け】ベースライン設定の自動化:現在の計画をワンクリックで保存する方法 – Project VBA解析バイブル

スポンサーリンク

現場のエンジニアへ:その「ワンクリック」がプロジェクトの命運を分ける

多くのプロジェクトマネージャーが陥る罠がある。それは「ベースラインの設定を後回しにする」こと、あるいは「手動操作の不確実性に依存する」ことだ。

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を使い分ける」という仕様変更にも即座に対応できる。ハードコーディングは、常に技術的負債の種である。

結論:ツールは「思考」を代行するものではない

このマクロを使えば、君たちは「ベースラインを保存する」という単純作業から解放される。だが、忘れないでほしい。真に重要なのは、「なぜ今、ベースラインを引くのか」というマネジメントの判断だ。

自動化の目的は、手を楽にすることではない。「人間が判断に集中するための時間と余白を生み出すこと」にある。

さあ、このコードを武器に、君のプロジェクトをより高次元な管理体制へと導いてくれ。健闘を祈る。

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