【入門編】【初心者向け】プロジェクト作成時に「プロジェクト情報」ダイアログを自動入力する定型化マクロ – Project VBA解析バイブル

スポンサーリンク

こんにちは!MS Projectの自動化の世界へようこそ。
普段、新しいプロジェクトを立ち上げるたびに、「プロジェクト情報」ダイアログを開いて、開始日を設定して、カレンダーを選んで……と、マウスをカチカチ動かしていませんか?

「毎回同じ設定をしているな」と感じたら、それはVBA(Visual Basic for Applications)の出番です。

今回は、マクロの記録だけでは絶対にたどり着けない、しかし実務ではめちゃくちゃ重宝する「プロジェクト情報の自動一括設定マクロ」を一緒に作っていきましょう。

ここをクリアすれば、Project VBAの基本構造はバッチリです。優しく丁寧に解説していきますので、リラックスしてついてきてくださいね!

なぜ「プロジェクト情報」の自動化が必要なのか?

Excel VBAと違って、MS Projectのオブジェクトモデルには独特の「クセ」があります。特にプロジェクトの初期設定は、後続のスケジュール計算(クリティカルパスやガントチャートの描画)の土台となる極めて重要な部分です。

手動で設定していると、以下のようなヒューマンエラーが起きがちです。

  • 開始日の入力ミス(今日の日付にすべきところを、昨年の日付のままにしていた…など)
  • 標準カレンダー以外の適用忘れによるスケジュールズレ

これをVBAで「定型化(テンプレート化)」しておけば、ボタンひとつで一瞬かつ完璧な状態からプロジェクトをスタートできます。

全体像:今回作成するマクロのコード

まずは、開発現場でそのままコピペして使える実用コードをお見せします。
MS ProjectのVBAエディタ(`Alt + F11`)を開き、標準モジュールにペーストしてみてください。

Sub InitializeNewProject()
‘ ==========================================
‘ テーマ: 新規プロジェクト情報の一括自動設定
‘ 記述者: あなたの先輩エンジニア
‘ ==========================================

‘ エラーハンドリングの有効化(安全第一!)
On Error GoTo ErrorHandler

‘ 1. 画面描画を停止して処理速度を爆発的に上げる
App.ScreenUpdating = False

Dim targetDate As Date
‘ 例として「本日の日付」を開始日として取得
targetDate = Date

‘ 2. プロジェクト情報の基本プロパティを一括設定
‘ ProjectStart: プロジェクトの開始日を設定します
ActiveProject.ProjectStart = targetDate

‘ 3. スケジュールの方向を設定 (pjStartFromStart: 開始日からスケジュール)
ActiveProject.ScheduleFrom = pjStartFromStart

‘ 4. 標準カレンダーの名称を設定(組織のルールに合わせて変更してください)
‘ ※注意: 存在しないカレンダー名を指定するとエラーになります
On Error Resume Next
ActiveProject.Calendar = “標準”
On Error GoTo ErrorHandler ‘ エラー監視を復帰

‘ 5. プロジェクトのステータス日付を初期化(必要に応じて設定)
ActiveProject.StatusDate = targetDate

‘ 完了メッセージ
MsgBox “プロジェクトの初期設定が完了しました!” & vbCrLf & _
“開始日: ” & Format(targetDate, “yyyy/mm/dd”), vbInformation, “初期化完了”

CleanUp:
‘ 処理終了時は必ず画面描画を元に戻す
App.ScreenUpdating = True
Exit Sub

ErrorHandler:
‘ 万が一エラーが起きたときの優しさ
MsgBox “エラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“内容: ” & Err.Description, vbCritical, “予期せぬエラー”
Resume CleanUp
End Sub

コードの注目ポイントを噛み砕いて解説!

初心者の方でも「なぜこのコードを書く必要があるのか」が腑に落ちるよう、重要なポイントを3つに絞って解説します。

① `ActiveProject` という魔法の言葉

Excel VBAでいう `ActiveWorkbook` と同じように、MS Projectでは現在アクティブになっているプロジェクトファイルを指すときに `ActiveProject` を使います。
このオブジェクトに対して「`.ProjectStart`(開始日)」や「`.ScheduleFrom`(スケジュールの方向)」といったプロパティ(属性)を代入していくことで、ダイアログを開かずに裏側で値を書き換えることができるのです。

② なぜ「開始日からのスケジュール」を指定するのか?

コード内の `ActiveProject.ScheduleFrom = pjStartFromStart` は、「プロジェクトをいつから始めるか(前向きスケジュール)」を明示しています。
MS Projectには「完了日から逆算する(pjStartFromFinish)」という設定もあります。これを明示的にコードで指定しておかないと、ユーザーのPC環境のデフォルト設定に依存してしまい、予期せぬスケジュール計算の狂いを生む原因になります。プログラミングでは「環境に依存させない(明示的に書く)」ことが鉄則です。

③ プロ界隈の常道:`App.ScreenUpdating = False`

コードの最初と最後に `App.ScreenUpdating` を入れています。これは「処理中の画面描き換えをストップする」命令です。
今回の規模であれば一瞬ですが、大規模なプロジェクトファイルになると、設定変更のたびに画面がチラついたり処理が重くなったりします。これを防ぐために、プロは必ずこの「画面描画のミュート」を挟みます。

初心者が必ずハマる!「陥りやすいエラー」と対策

最後に、MS ProjectのVBAを触り始めた人が必ずと言っていいほど直面する罠をシェアしておきます。

罠1:存在しないカレンダー名を指定してしまう

> エラー内容: 実行時エラー ‘1101’: このような名前の基準カレンダーはありません。

原因と対策:
コード内で `ActiveProject.Calendar = “標準”` と指定していますが、英語圏の環境や、社内でカスタマイズされたプロジェクトテンプレートでは、標準カレンダーの名前が `”Standard”` になっている場合があります。
対策として、上のサンプルコードのように `On Error Resume Next` を一時的に使うか、事前に組織で使われているカレンダー名を確認しておきましょう。

罠2:空っぽのファイル(プロジェクトが存在しない状態)で実行する

MS Projectを起動した直後の「ようこそ画面」の状態でマクロを実行すると、`ActiveProject` が指す対象が存在しないため、怒られてしまいます。必ず「新しい空のプロジェクト」を生成、または開いた状態でマクロを実行するようにしてください。

まとめ

いかがでしたか?
今回は、プロジェクト作成時の「プロジェクト情報」ダイアログを自動化する定型化マクロをご紹介しました。

  • `ActiveProject` を使って裏側からプロパティを直接書き換える
  • 環境に依存しないよう、スケジュールの方向なども明示的にコード化する
  • エラーハンドリングと画面描画停止で、実用に耐えうる堅牢なコードにする

ここをクリアできれば、あなたはもう「マクロの記録」を卒業し、自分の手で業務をコントロールする真のProject VBAエンジニアへの第一歩を踏み出しています。

ぜひ、あなたの手元のMS Projectでも試してみてくださいね。それでは、次回の応用編でお会いしましょう!

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