Project Server/Onlineの「砦」を突破せよ:VBAによるチェックアウト・チェックインの極意
こんにちは。Project VBAの世界へようこそ。
もしあなたが今、「Project Onlineでプロジェクトを開こうとしたら、他のユーザーが編集中で弾かれた」「マクロを走らせたいのに、チェックアウト状態が邪魔をして自動化が止まる」という壁にぶつかっているなら、ようこそ、ここが次のステージです。
今日は、Project Server/Online環境における「チェックアウト・チェックイン」のAPI制御という、一見難解な領域を紐解いていきましょう。
—
1. なぜ「チェックアウト」が必要なのか?
Project Serverにおいて、プロジェクトは「誰か一人が書き込み権限を専有する(チェックアウト)」ことでデータの整合性を守っています。
- チェックアウト中: あなただけが変更可能。他人は読み取り専用。
- チェックイン: 変更を確定し、サーバーに保存して「鍵」を戻す。
自動化の現場では、「前の処理が異常終了して鍵がかかったまま」という事故が頻発します。これをプログラムで正しく制御することが、安定した自動化システムの第一歩です。
—
2. 実践:VBAでチェックアウト状態を操る
Project VBAでは `Project.CheckOut` メソッドと `Project.CheckIn` メソッドを使います。これらは非常に強力ですが、「対象プロジェクトが現在どういう状態か」を理解してから叩くのがプロの流儀です。
安定したチェックアウト・処理・チェックインのテンプレート
以下のコードは、現場で私が必ず仕込む「防御的プログラミング」の基本形です。
Sub SecureProjectControl()
Dim prj As Project
Dim prjName As String
prjName = “プロジェクトA.mpp”
‘ 1. プロジェクトを開く(まだチェックアウトはしていない状態)
FileOpenEx Name:=”<>\ProjectA.mpp”
Set prj = ActiveProject
‘ 2. チェックアウト可能か確認し、実行する
If prj.CanCheckOut Then
prj.CheckOut
Debug.Print “チェックアウト成功!編集を開始します。”
‘ — ここに自動化処理(タスク追加、実績更新など)を記述 —
Else
MsgBox “誰か他の人が編集中です。強制チェックインが必要な場合は管理者へ連絡してください。”
Exit Sub
End If
‘ 3. 処理終了後、必ずチェックインする
‘ Force:=True を指定すると、保存せずに閉じることも可能だが注意が必要
prj.CheckIn Save:=True, Comments:=”VBAによる自動更新完了”
Debug.Print “チェックイン完了。鍵を戻しました。”
End Sub
—
3. 陥りやすい「罠」と解決策
初学者が必ず通る道、それが「エラーハンドリングの欠如」です。
罠1:強制終了による「ゾンビ状態」
コードが途中でクラッシュすると、サーバー上ではプロジェクトが「チェックアウトされたまま」になります。こうなると手動でPWAから「チェックインの強制解除」を行わない限り、二度とプログラムからは触れません。
解決策: `On Error GoTo` を必ず使い、エラー発生時にも `CheckIn` を呼び出す(あるいはエラーを投げて終了する)クリーンアップ処理を書きましょう。
罠2:非同期処理のラグ
APIはクラウドを介します。コマンドを叩いた瞬間にサーバーの状態が反映されるとは限りません。
`DoEvents` を挟んだり、処理の合間に数秒の待機時間を入れるのが、大規模環境では安定動作の秘訣です。
—
4. プロの視点:なぜ「チェックイン」が重要なのか?
自動化エンジニアにとって、プログラムは「借りた場所を綺麗に掃除して帰る」のが礼儀です。
もしあなたが「チェックアウトしたまま」処理を終えてしまったら、他のメンバーは翌朝、自分のプロジェクトを開けずに困惑することになります。「処理が終わったら必ず戻す」。このサイクルを徹底するだけで、あなたの書くVBAは「信頼できるツール」へと昇華します。
—
最後に:ここをクリアすれば、あなたはもう中級者です
「チェックアウト・チェックイン」を制御できるということは、サーバーの排他制御の概念を理解したということです。これは単なるマクロの記録を超え、「システムとしての振る舞いを設計している」という証拠です。
怖がる必要はありません。まずは自分のテスト用プロジェクトで、このコードを何度も動かしてみてください。サーバーとの対話がスムーズに行えるようになった時、Project VBAはあなたの強力な右腕になります。
また何か壁にぶつかったら、いつでもここへ戻ってきてください。共に、より高い自動化の頂を目指しましょう。
