【実務・中級編】FileSystemObject(FSO)を用いた、Projectファイルの一括バックアップとアーカイブ自動化 – Project VBA解析バイブル

スポンサーリンク

プロジェクトの「残骸」を資産に変える:Project VBAで構築する堅牢な自動アーカイブ術

プロジェクトが完了した瞬間、多くの現場では「とりあえずフォルダに放り込んで終わり」という杜撰な管理が行われている。しかし、真のエンジニアは知っているはずだ。「完了時こそ、次のプロジェクトの糧となるデータ資産を確立する好機である」ということを。

今回は、MS ProjectのVBAと`Scripting.FileSystemObject`(FSO)を組み合わせ、プロジェクト完了時に「一括バックアップとアーカイブ」を自動実行する、実務レベルのソリューションを伝授する。

1. なぜ「手動コピー」が死を招くのか

多くの担当者がVBAでファイルを扱う際、`FileCopy`関数や`Name`ステートメントで済ませようとする。これは初心者の入り口だ。
なぜプロは`FileSystemObject`を選ぶのか。理由は明白だ。

  • パス操作の安全性: `BuildPath`メソッドを使えば、OSごとのパス区切り文字の差異を考慮する必要がない。
  • エラーハンドリング: ファイルが存在しない、あるいは書き込み権限がないといった異常系を、`If…Then`による事前の存在確認や`On Error`でスマートに制御できる。
  • メタデータの保護: 単なるコピーではなく、属性やタイムスタンプの扱いを制御できる。

2. 堅牢な設計:アーキテクチャの指針

アーカイブ機能を作る際は、以下の3要素を分離して設計せよ。これが保守性を高める唯一の道だ。

1. 設定層 (Configuration): バックアップ元と先のパスをハードコードせず、外部定数または設定用シートから読み込む。
2. ロジック層 (Engine): FSOを駆使し、ディレクトリ作成からファイルコピーまでを行う。
3. 実行層 (Interface): UI(ボタン一つ)から呼び出され、ユーザーに結果をフィードバックする。

3. 実践コード:Projectアーカイブ・オートメーション

以下のコードは、Projectのファイルパスを取得し、今日の日付を付与して指定フォルダへアーカイブするスクリプトだ。

‘ 参照設定: Microsoft Scripting Runtime を追加推奨
‘ ただし、Late Binding(CreateObject)を用いることで、配布時のトラブルを排除している
Public Sub ArchiveProjectFiles()
Dim fso As Object
Dim srcPath As String, destDir As String
Dim projName As String, archiveName As String

‘ 1. プロジェクトのパス取得
srcPath = ActiveProject.FullName
If srcPath = “” Then
MsgBox “プロジェクトを保存してから実行してください。”, vbCritical
Exit Sub
End If

‘ 2. アーカイブ先の設定(実務ではここを定数やConfigファイルへ)
destDir = “C:\ProjectArchives\” & Format(Date, “yyyyMMdd”)

‘ 3. FSOの初期化
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ 4. アーカイブ先ディレクトリの存在確認と作成
If Not fso.FolderExists(destDir) Then
fso.CreateFolder destDir
End If

‘ 5. ファイル名のリネーム(日付サフィックス付与)
projName = fso.GetBaseName(srcPath)
archiveName = fso.BuildPath(destDir, projName & “_” & Format(Now, “HHmm”) & “.mpp”)

‘ 6. 実行(上書きを許可する場合はTrue)
On Error GoTo ErrorHandler
fso.CopyFile srcPath, archiveName

MsgBox “アーカイブ完了: ” & vbCrLf & archiveName, vbInformation
Exit Sub

ErrorHandler:
MsgBox “エラー発生: ” & Err.Description, vbCritical
End Sub

4. 現場で生き残るための「鉄則」

コードをコピペするだけでは不十分だ。以下のポイントを押さえて初めて「プロダクション品質」と呼べる。

データベース連携の注意点

アーカイブ先にデータベース(AccessやSQL Server)が関与している場合、ファイルだけでなく「DBへのリンク先を書き換える」か「DBのバックアップも同時実行する」必要がある。ファイルだけをコピーしてDBの参照先が壊れていれば、それはアーカイブではなく「ゴミの複製」である。

パフォーマンスの重み

巨大なファイルを頻繁にアーカイブする設計にすると、プロジェクトの保存時にフリーズを招く。

  • アーカイブは「完了ボタン」を押した時のみ実行する。
  • 容量が大きい場合は、`DoEvents`を挟み込み、OS側の応答を止めない配慮をする。

保守性への投資

上記コードでは`CreateObject`を用いているが、もし大規模なツール群を作るのであれば、`Classモジュール`を作成し、`ArchiveManager`といった名前で機能をカプセル化すべきだ。そうすれば、将来的にバックアップ先がクラウド(SharePoint等)に変わった際も、メインロジックを一切触らずに修正が可能となる。

結びに代えて

自動化とは、単に工数を削減することではない。「人間が手作業でミスをする余地を、設計によって完全に排除すること」である。

このツールを導入することで、あなたのチームは「過去のプロジェクトをどう探すか」という無駄な議論から解放される。次は、このアーカイブされたデータを自動的に解析し、工数予測にフィードバックするAI的な仕組みに挑戦してみてほしい。

技術は、使い手次第で武器にも盾にもなる。さあ、コードを書いて現場を変えよう。

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