【Project VBA入門】手作業から卒業!「日付付きバックアップ」を自動保存する極意
こんにちは。Project VBAの世界へようこそ。
「マクロの記録」ボタンを押して、生成されたコードの長さに圧倒されたことはありませんか?
プロジェクト管理において、「今の状態を残しておく」ことは何より重要です。しかし、毎日手作業で「名前を付けて保存」を行い、ファイル名に日付を打ち込む……この単純作業こそが、最もミスを生みやすく、かつエンジニアの時間を奪う「負債」です。
今日は、Project VBAの `SaveAs` メソッドを使いこなし、ワンクリックでバックアップを作成する「自動保存の神髄」を伝授します。ここをクリアすれば、あなたはもう脱・初心者です。
—
1. なぜ「SaveAs」を理解する必要があるのか?
`SaveAs` は単なる保存ではありません。それは「オブジェクトの分身を作る儀式」です。
Project VBAにおいて、`Project` オブジェクトはメモリ上で生きている動的な存在。それを `SaveAs` でファイルとして書き出すことで、初めて「履歴」として固定されます。
まずは、コードを見てみましょう。
実践コード:日付付きバックアップの作成
Sub SaveBackupWithDate()
‘ 変数の宣言:メモリ効率を意識した最小限の定義
Dim strPath As String
Dim strFileName As String
Dim strDate As String
‘ バックアップを保存するフォルダパス(環境に合わせて書き換えてください)
strPath = “C:\ProjectBackups\”
‘ 日付を「YYYYMMDD」形式で取得(ファイル名にスラッシュは使えないため)
strDate = Format(Date, “yyyymmdd”)
‘ プロジェクト名と日付を連結
strFileName = strPath & “Project_Backup_” & strDate & “.mpp”
‘ SaveAsメソッドの実行
‘ FileFormat:=pjMPP は、Microsoft Projectの標準形式を指定しています
On Error Resume Next ‘ エラー発生時の予防線
ActiveProject.SaveAs Name:=strFileName, FileFormat:=pjMPP
If Err.Number <> 0 Then
MsgBox “保存に失敗しました。フォルダが存在するか確認してください。”
Else
MsgBox “バックアップ完了:” & vbCrLf & strFileName
End If
On Error GoTo 0
End Sub
—
2. コードを読み解く「3つの鍵」
このコードがなぜ現場で重宝されるのか、初心者が躓きやすいポイントを解説します。
① `Format(Date, “yyyymmdd”)` の意味
なぜわざわざ日付を変換するのでしょうか? 実はWindowsのファイル名には、`/` (スラッシュ) が使えません。日付をそのまま文字列にするとエラーになります。`yyyymmdd` という形式は、ファイル名で並べ替えたときに時系列順にきれいに並ぶという、プロとしての「整理の作法」でもあります。
② `On Error Resume Next` の隠された意図
プログラミングの世界では「エラーは起きるもの」です。例えば、フォルダが存在しなかったり、ファイルが読み取り専用で開かれていたりする場合、スクリプトは止まります。あえてエラーを無視させ、その直後に `If Err.Number <> 0` で判定を行うことで、「ユーザーを混乱させない親切なエラー通知」が可能になります。
③ ActiveProject オブジェクト
`ActiveProject` とは「今、あなたの画面で開かれているプロジェクト」を指します。これを使うことで、ファイル名や保存場所が変わっても、どのプロジェクトに対してもこのマクロを使い回すことができます。これが「汎用性」の第一歩です。
—
3. 陥りやすい「罠」を回避する
初心者が最初にぶつかる壁がいくつかあります。
- パスの末尾の「\」忘れ:
`”C:\ProjectBackups”` と `”Project_file.mpp”` を連結すると、`C:\ProjectBackupsProject_file.mpp` というあり得ないパスが出来上がります。パスの最後には必ず `\` を含めるか、プログラムで連結するようにしましょう。
- 権限エラー:
`Cドライブ直下` などはセキュリティ上書き込みが禁止されていることが多いです。必ず自分がアクセス権を持つフォルダを指定してください。
—
4. 次のステップへ
今回のコードは、いわば「基本の型」です。これに慣れたら、次は以下のような拡張に挑戦してみてください。
- 時刻まで付与する: `Format(Now, “yyyymmdd_hhnn”)` を使えば、1日に複数回バックアップしても上書きされません。
- 自動実行: 「保存ボタン」だけでなく、プロジェクトを閉じる際(`Project_BeforeClose` イベント)に自動で走るように設定すれば、バックアップの取り忘れはゼロになります。
先輩からのアドバイス
「マクロの記録」で生成されたコードは、いわば「指示書」です。しかし、今回書いたようなコードは、あなたがプロジェクトの環境に合わせてカスタマイズできる「自分の道具」です。
最初から完璧である必要はありません。まずはこのコードをコピペして、自分のPCで「成功する体験」を味わってください。それが、自動化エンジニアへの第一歩です。
何かうまくいかないことがあれば、いつでもまた聞きに来てくださいね。応援しています!
