なぜ「上書き保存」はエンジニアの敵なのか?
業務自動化を志すあなたが、まず最初に叩き込まれるべき鉄則がある。それは「上書き保存は、情報の破壊行為である」という冷徹な事実だ。
ファイル名に日付を付与する。これは単なるバックアップの手段ではない。システム開発の現場でいう「イミュータブル(不変)な資産管理」の第一歩だ。日付を付与することでファイルは履歴を刻み、過去のバージョンへといつでも遡れる。これが「事故」を「仕様」に変える唯一の道である。
今日は、初心者から中級者へステップアップするあなたのために、PowerPoint VBAを用いた「安全かつ堅牢な自動保存マクロ」を設計する。
—
1. 堅牢な設計のための3つの原則
コードを書く前に、プロフェッショナルが守るべき設計思想を頭に叩き込んでほしい。
1. パスの完全修飾: `ActivePresentation.Path` は空の場合がある(未保存ファイル)。この例外を必ず考慮せよ。
2. 拡張子の制御: 拡張子を除去し、日付を結合し、拡張子を戻す。この文字列操作を怠ると、Windowsのファイルシステムは混乱する。
3. ユーザーへのフィードバック: プログラムが裏で何をしたか、必ずステータスバーやダイアログで明示せよ。サイレントな処理はユーザーの不安を煽るだけだ。
—
2. 実装コード:`SaveAsWithTimestamp`
このコードは、現在開いているプレゼンテーションを「元のファイル名_YYYYMMDD.pptx」として同階層に保存する。
Option Explicit
‘ ———————————————————
‘ 目的: 現在のプレゼンを日付付きファイル名で別名保存する
‘ 著者: 業務自動化アーキテクト
‘ ———————————————————
Public Sub SaveAsWithTimestamp()
Dim currentPres As Presentation
Dim savePath As String
Dim folderPath As String
Dim fileNameOnly As String
Dim extension As String
Dim newFileName As String
Set currentPres = ActivePresentation
‘ 1. 未保存ファイルかどうかのチェック
If currentPres.Path = “” Then
MsgBox “このファイルはまだ一度も保存されていません。まずは手動で保存してください。”, vbCritical
Exit Sub
End If
‘ 2. パスとファイル名の分解
folderPath = currentPres.Path & “\”
fileNameOnly = Left(currentPres.Name, InStrRev(currentPres.Name, “.”) – 1)
extension = Mid(currentPres.Name, InStrRev(currentPres.Name, “.”))
‘ 3. 日付文字列の生成 (YYYYMMDD)
newFileName = folderPath & fileNameOnly & “_” & Format(Date, “yyyymmdd”) & extension
‘ 4. エラーハンドリングを伴う保存実行
On Error GoTo ErrorHandler
currentPres.SaveCopyAs newFileName
‘ 5. ユーザーへの通知
MsgBox “バックアップを作成しました:” & vbCrLf & newFileName, vbInformation
Exit Sub
ErrorHandler:
MsgBox “保存に失敗しました。ファイルが使用中か、権限がない可能性があります。” & vbCrLf & “エラー内容: ” & Err.Description, vbCritical
End Sub
—
3. なぜこのコードが「プロダクション品質」なのか
初心者が書くコードと、現場で生き残るコードには明確な境界線がある。
- `SaveCopyAs` の採用: `SaveAs` を使うと、現在の編集対象が「日付付きファイル」に切り替わってしまう。作業を継続させたいなら、現在の編集状態を維持しつつコピーを生成する `SaveCopyAs` が正解だ。
- `InStrRev` による分解: ファイル名の中にドットが複数含まれていても(例: `v1.0.project.pptx`)、右端のドットを起点に拡張子を抽出するこの手法なら、バグは発生しない。
- エラーハンドリング: ファイルが読み取り専用であったり、保存先にアクセス権がない場合、プログラムは必ず止まる。`On Error GoTo` を活用し、ユーザーに状況を伝えることは、エンジニアの最低限の礼儀だ。
—
4. さらなる高みを目指す君へ
このマクロを導入した後、次は「PDF変換の自動化」や「指定フォルダへの自動アーカイブ」へと拡張したくなるはずだ。だが、焦ることはない。まずは「毎日決まった作業を、決まった場所で、確実に保管する」という信頼できるルーチンを確立せよ。
PowerPoint VBAは古い技術だと言う者もいる。しかし、Officeという巨大なインフラの上で自在にOSを操れるスキルは、現代のどのプログラミング言語よりも、現場の「即効性」という武器になる。
さあ、このコードをあなたの武器庫に加えなさい。そして、上書き保存の恐怖から、自分自身とチームを解放するのだ。質問があればいつでも来い。エンジニアの戦場はここからだ。
