Project VBAの深淵へ:FSOで手に入れる「プロジェクト管理の自動化」という特権
こんにちは。現場で泥臭くコードを書き、時にはシステムの静寂に耳を澄ませるエンジニアです。
「マクロの記録」から卒業し、自らProjectの生命線を制御したいと考えているあなたへ。今日は、単なるファイルコピーの話をしません。「Projectのライフサイクルをコードで支配する」という、エンジニアとしての第一歩を一緒に踏み出しましょう。
今回扱うのは、プロジェクト終了時の「資産アーカイブ」の自動化です。手動でコピー&ペーストを繰り返す日々は、今日で終わりにしましょう。
—
なぜ「FileSystemObject(FSO)」を使うのか?
VBAには標準の `FileCopy` コマンドもありますが、プロはあえて `FileSystemObject` を選択します。理由はシンプルです。
- 堅牢性: エラーハンドリングが容易で、ファイルの存在確認やパスの結合が直感的。
- 拡張性: フォルダの作成や、ファイルの属性操作まで網羅できる。
- 作法: オブジェクト指向の考え方に近く、他の言語への応用が効く。
まさに、Project VBAを掌握するための「標準装備」と言えるでしょう。
—
【実装コード】プロジェクトを自動アーカイブする心臓部
以下のコードは、現在開いているProjectファイルを、指定のバックアップフォルダへ「日付付き」でコピーするものです。
Sub ArchiveCurrentProject()
‘ 参照設定: Microsoft Scripting Runtime が推奨ですが、今回は遅延バインディングで記述します
Dim fso As Object
Dim sourcePath As String
Dim targetFolder As String
Dim fileName As String
Dim archiveName As String
‘ 1. FSOの生成
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ 2. 現在のプロジェクトパスを取得
sourcePath = ActiveProject.FullName
‘ 3. バックアップ先を設定 (環境に合わせて書き換えてください)
targetFolder = “C:\ProjectArchive\”
‘ 4. フォルダが存在しなければ作成する
If Not fso.FolderExists(targetFolder) Then
fso.CreateFolder (targetFolder)
End If
‘ 5. 日付付きファイル名の生成 (例: Project_20231027.mpp)
fileName = Left(ActiveProject.Name, InStrRev(ActiveProject.Name, “.”) – 1)
archiveName = targetFolder & fileName & “_” & Format(Date, “yyyymmdd”) & “.mpp”
‘ 6. ファイルのコピー実行
‘ Trueは上書き許可。既存ファイルがあっても安全にアーカイブします
fso.CopyFile sourcePath, archiveName, True
MsgBox “アーカイブ完了: ” & vbCrLf & archiveName, vbInformation
‘ オブジェクトの解放 (メモリのゴミを残さないのがプロの流儀)
Set fso = Nothing
End Sub
—
ここをクリアすれば一人前!コードの重要ポイント
1. `CreateObject` の魔法
`CreateObject(“Scripting.FileSystemObject”)` は、外部のライブラリを動的に呼び出す手法です。これにより、「参照設定」という面倒な準備なしで、どの環境でもコードが動くようになります。
2. `ActiveProject` というオブジェクト
Project VBAにおいて、今目の前で開いているファイルは `ActiveProject` オブジェクトです。ここから `FullName`(パス付きファイル名)や `Name` を引き抜くのが基本中の基本。まずはここを自由自在に扱えるようになりましょう。
3. メモリの解放を忘れずに
`Set fso = Nothing` 。これを書くか書かないかで、あなたのコードの「品格」が決まります。特にProjectは重い処理を扱うため、使った資源はきれいに片付けるのが、優れたエンジニアのたしなみです。
—
陥りやすい罠:初学者が踏む地雷
コードを書いていて「エラーが出る」と焦る必要はありません。以下の2点だけ確認してください。
- パスの末尾には要注意: `targetFolder` を定義する際、末尾に `\` を入れ忘れると、ファイル名とフォルダ名が連結してエラーになります。「パスの連結はFSOの `BuildPath` メソッドを使う」のが最も安全な回避策です。
- ファイルがロックされている: Projectファイルが編集中にバックアップを取ろうとしていないか、タイミングを考慮してください。
—
最後に:自動化は「未来の自分への投資」
今回作成したコードは、単なる「コピー作業の代行」ではありません。「プロジェクト終了という節目を、確実に記録として残す」という業務プロセスの構築です。
最初は小さな一歩ですが、この仕組みをマスターすれば、次は「リソースの稼働率をCSVで出力する」「進捗が遅延しているタスクを自動抽出する」といった、高度な自動化へと羽ばたけます。
ここをクリアしたあなたは、もうただの作業者ではありません。Project VBAを掌握する、次世代のエンジニアです。自信を持って、次のコードを書いてみてください!
何か詰まったら、いつでも戻ってきてくださいね。あなたの挑戦を応援しています。
