プロジェクトの「保存」を自動化のトリガーにせよ:PDFレポート自動生成の極意
こんにちは。現場で泥臭くVBAと格闘してきたあなたへ。
「マクロの記録」ボタンを押すだけの世界は、もう卒業しましょう。
今回は、Project VBAの真髄である「イベントドリブン(出来事に連動する処理)」の第一歩として、『プロジェクト保存時にPDFレポートを自動生成し、日付フォルダへ格納する』という実用的なワークフローを構築します。
このコードを理解できれば、あなたは単なる「操作屋」から、業務フローを設計する「エンジニア」へと進化します。さあ、深淵を覗いてみましょう。
—
1. なぜ「イベント」を使うのか?
通常、VBAは「ボタンを押してマクロを実行」しますが、これでは「保存を忘れる」「PDFを作り忘れる」といったヒューマンエラーが防げません。
Project VBAには、`Project_BeforeSave` という特別なイベントが用意されています。これは「保存ボタンが押された瞬間」に、システム側が勝手に呼び出してくれる魔法の関数です。
陥りやすい罠:無限ループ
保存イベントの中で「保存」を実行すると、「保存→保存イベント発生→保存→保存イベント発生…」と無限ループに陥ります。これを回避するための「フラグ管理」や「システムイベントの制御」こそが、アーキテクトの腕の見せ所です。
—
2. 実装コード:PDF自動生成ワークフロー
以下のコードは、`ThisProject` モジュールに記述してください。
‘ プロジェクト保存時に自動実行されるイベント
Private Sub Project_BeforeSave(ByVal pj As Project, ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim savePath As String
Dim folderPath As String
Dim dateStr As String
‘ 1. 保存先フォルダの構築(今日の日付でフォルダ作成)
dateStr = Format(Date, “yyyy-mm-dd”)
folderPath = “C:\Reports\” & dateStr & “\”
‘ フォルダが存在しなければ作成
If Dir(folderPath, vbDirectory) = “” Then
MkDir folderPath
End If
‘ 2. PDFファイル名の設定
savePath = folderPath & pj.Name & “_” & Format(Now, “HHmm”) & “.pdf”
‘ 3. PDF出力処理
‘ ProjectのPDF出力は「ReportPrintToFile」メソッドを利用します
On Error Resume Next ‘ エラー発生時の強制終了を防ぐ
‘ ガントチャートを表示した状態でPDF出力
ViewApply Name:=”Gantt Chart”
ReportPrintToFile FileName:=savePath
If Err.Number <> 0 Then
MsgBox “PDF生成に失敗しました:” & Err.Description, vbCritical
Else
Debug.Print “レポートを生成しました: ” & savePath
End If
On Error GoTo 0
End Sub
—
3. コードの心臓部を読み解く
このコードには、現場で生き残るための3つの「知恵」が詰まっています。
- `Dir(folderPath, vbDirectory) = “”`:
これは「フォルダがあるか?」を確認するテクニックです。なければ `MkDir` で生成する。この「環境を自己修復する」意識が、堅牢なシステムを作ります。
- `ViewApply Name:=”Gantt Chart”`:
Projectは「今表示されているビュー」を基準に動きます。PDFを出力する前に必ず意図したビューを適用させること。これが自動化の鉄則です。
- `On Error Resume Next` と `On Error GoTo 0`:
PDF出力はプリンター設定やパスの権限で失敗することがあります。エラー一つでプロジェクト全体の保存まで失敗させないための、いわば「防波堤」です。
—
4. プロジェクトのライフサイクルを意識する
Project VBAを扱う上で最も大切なことは、「プロジェクトは生き物である」という意識を持つことです。
- 保存のタイミング: `BeforeSave` は保存直前です。ここでPDFを作れば、常に最新の状態をドキュメントとして残せます。
- パスの管理: コード内に直接パスを書くのではなく、将来的には定数(`Const`)や設定ファイルで管理するようにしましょう。これが中級者から上級者へのステップアップです。
—
最後に:ここをクリアすれば、あなたは変わる
ここまで読んだあなたは、もう「マクロの記録」を使っていた頃の自分ではありません。
1. イベント(BeforeSave)を理解した
2. ファイルシステム(MkDir)を操作した
3. エラーハンドリングの重要性を知った
この3つをクリアした今、あなたは業務を「手作業」から「システム」へと昇華させる土台を手に入れました。次は、これをベースライン設定の自動化と組み合わせたり、メール通知を飛ばしたりと、可能性を広げていってください。
困ったときは、いつでもこのコードに戻ってきてください。現場の泥臭い知見は、いつだってあなたの強力な武器になります。
それでは、良い自動化ライフを。
