【入門編】【上級者向け】カスタムプロパティを活用したプロジェクト属性の自動付与と検索 – Project VBA解析バイブル

スポンサーリンク

こんにちは!Project VBAの世界へようこそ。
マクロの記録ボタンを押すだけの日常から一歩抜け出し、「自分の手でプロジェクトを意のままにコントロールしたい」と願うあなたへ。

今回は、現場のプロがこっそり使っている「カスタムプロパティを活用したプロジェクト属性の自動付与と検索」という、ちょっとディープで最高に実用的なテクニックを伝授します。

「プロジェクトファイルを後から探すのに苦労している」「進捗やバージョン情報をファイル名に無理やり詰め込んでいる」……そんな泥臭いお悩みは、今日で終わりです。ここをクリアすれば、あなたも立派なProject VBAのアーキテクトの仲間入りです。一緒に本質を学んでいきましょう!

なぜ、カスタムプロパティをVBAで操る必要があるのか?

Projectファイル(`.mpp`)には、ファイル名やタイトル以外にも、様々な「属性(メタデータ)」を持たせることができます。これが「カスタムプロパティ(プロジェクト情報)」です。

例えば、以下のような情報をファイル内部に埋め込むことができます。

  • フェーズ(構想、開発、テスト、完了)
  • 守秘義務レベル(社外秘、極秘、公開)
  • コストセンター(CC-1040など)

これらをVBAで自動付与し、さらにWindowsエクスプローラーの検索窓から一発でヒットさせる仕組みを作ります。ファイル名を変更する必要などなくなります。スマートで美しいファイル管理の世界へ、ご案内します。

基礎知識:Projectのカスタムプロパティの正体

Excel VBAやWord VBAと違い、MS Projectのカスタムプロパティ(ProjectPropertiesやDocumentProperties)は、少しクセがあります。

Projectでは、プロジェクト独自の拡張情報を扱うために「プロジェクト情報(Enterprise Custom Fields または 組み込みのプロジェクトプロパティ)」を利用します。
今回は、どの環境でも確実に動作し、Windowsのファイルプロパティとしてもインデックスされやすい「Built-in(組み込み)プロパティ」および「Custom(カスタム)プロパティ」の双方をVBAからスマートに操作する方法を見ていきましょう。

【実践】プロジェクト属性を自動付与するVBAコード

それでは、実際に動くコードを見てみましょう。
このコードは、アクティブなプロジェクトに対して「プロジェクトの分類」「管理部門」「バージョン」というカスタム属性を自動で書き込み、保存するものです。

Sub SetProjectMetadataAndSave()
‘ =====================================================================
‘ 目的: プロジェクトにカスタム属性(メタデータ)を自動付与し、検索性を高める
‘ 対象読者: マクロの記録から脱却し、実務で自動化を狙うエンジニア
‘ =====================================================================

Dim prj As Project
Set prj = ActiveProject

On Error GoTo ErrorHandler

‘ 1. 基本的な組み込みプロパティの設定
‘ Windowsエクスプローラーの「詳細ペイン」にも表示されやすい項目です
prj.BuiltinDocumentProperties(“Title”).Value = “次世代基幹システム刷新プロジェクト”
prj.BuiltinDocumentProperties(“Author”).Value = “PMO室 自動化推進チーム”
prj.BuiltinDocumentProperties(“Category”).Value = “ITインフラ構築”
prj.BuiltinDocumentProperties(“Company”).Value = “株式会社サンプルコーポレーション”

‘ 2. カスタムプロパティ(プロジェクト情報)の設定
‘ ※Projectのカスタムプロパティは、CustomPropertyコレクションを操作します
‘ ここではエラーハンドリングを兼ねて、既存があれば上書き、なければ追加のロジックを組みます

Call SetCustomProperty(prj, “ProjectPhase”, “開発フェーズ2”)
Call SetCustomProperty(prj, “CostCenter”, “CC-8823”)
Call SetCustomProperty(prj, “SecurityLevel”, “社外秘”)

‘ 3. 変更を確実に反映して上書き保存
prj.Save

MsgBox “プロジェクト属性の付与と保存が完了しました!”, vbInformation, “成功”
Exit Sub

ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “予期せぬエラー”
End Sub

‘ — ヘルパープロシージャ: カスタムプロパティを安全に設定する関数 —
Private Sub SetCustomProperty(TargetProject As Project, PropName As String, PropValue As String)
Dim prop As DocumentProperty
Dim propExists As Boolean

propExists = False

‘ 既存のプロパティを走査
For Each prop In TargetProject.CustomDocumentProperties
If prop.Name = PropName Then
prop.Value = PropValue
propExists = True
Exit For
End If
Next prop

‘ 存在しない場合は新規追加
If Not propExists Then
‘ msoPropertyTypeString = 4 (文字列型)
TargetProject.CustomDocumentProperties.Add _
Name:=PropName, _
LinkToContent:=False, _
Type:=4, _
Value:=PropValue
End If
End Sub

コードのここがポイント!

  • `BuiltinDocumentProperties` と `CustomDocumentProperties` の使い分け:

標準で用意されているタイトルや会社名(Builtin)と、自由に定義できるカスタム(Custom)を適切に組み合わせることで、エクスプローラーでの検索性が飛躍的に向上します。

  • ヘルパープロシージャの活用:

カスタムプロパティは「すでに存在するかどうか」で処理が異なるため、判定ロジックを別プロシージャ(`SetCustomProperty`)に切り出すことで、メインのコードが圧倒的に読みやすくなります。これがプロの技です。

陥りやすいエラーと回避の極意(ここ重要!)

現場でこのコードを動かす際、初心者が必ずと言っていいほどハマる罠があります。先輩からのアドバイスとして心に留めておいてください。

1. 「型が一致しません」エラー (`TypeMismatch`)

  • 原因: `CustomDocumentProperties.Add` メソッドを使う際、データの型(Type)の指定を間違えているケースです。文字列なら `4`(`msoPropertyTypeString`)、数値なら `1`(`msoPropertyTypeNumber`)など、型IDを意識する必要があります。
  • 対策: 今回紹介したコードのように、ヘルパー関数を作って型をラップ(隠蔽)してあげると、エラーを未然に防げます。

2. エクスプローラーで検索にヒットしない?

  • 原因: Windowsのファイル検索(Windows Searchインデックス)が、まだ新しいプロジェクトファイルをスキャンしきっていない場合があります。
  • 対策: プロジェクトファイルを保存した後、Windowsの「インデックスのオプション」で該当フォルダが検索対象に含まれているか確認してください。また、エクスプローラーの検索窓に直接 `System.Category:ITインフラ構築` や `System.Author:”PMO室”` のようにプロパティ名を指定して検索すると、メタデータ検索の威力を実感できます。

まとめ:自動化の先にある「究極のプロジェクト管理」へ

お疲れ様でした!今回は、カスタムプロパティを活用したプロジェクト属性の自動付与と検索について解説しました。

ここをクリアすれば、バラバラに保存されたプロジェクトファイルを後から探す無駄な時間から解放され、VBAを通じて「ファイル自体が賢く自己紹介する」ような高度なファイル管理基盤を構築できるようになります。

「たかがプロパティ、されどプロパティ」。この細部へのこだわりこそが、あなたをワンランク上のエンジニアへと引き上げてくれます。
次の現場でも、ぜひこの知見をフル活用してくださいね。あなたのVBAライフを、これからも応援しています!

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