こんにちは!PowerPoint VBAの世界へようこそ。
マクロの記録ボタンを押すだけのステップから一歩抜け出して、自分の手でプレゼンテーションを自在にコントロールしたい――そう思っているあなたへ。
今回は、業務効率化の現場で絶対に知っておくべき「ファイルの安全対策(バックアップ)」をテーマに、最高に実用的なVBAコードを一緒に作っていきましょう。
「せっかく作ったスライドが、上書き保存のミスで消えてしまった……」
そんな絶望的な状況をゼロにする、上書き保存と連動して自動で「.bak」のバックアップファイルを生成する簡易世代管理マクロを伝授します。
ここをクリアすれば、PowerPoint VBAのオブジェクトの扱い方やファイルの裏側の挙動の基本はバッチリですよ。温かく導きますので、一緒にリラックスして進めていきましょう!
—
なぜ、PowerPointに「自動バックアップ」が必要なのか?
ExcelやWordには、自動回復用ファイルの保存機能がありますが、PowerPointで大規模な図形や画像を扱っているとき、上書き保存の瞬間にフリーズしてファイルが破損する事故は、プロのエンジニアでも冷や汗をかく瞬間です。
「上書き保存するたびに、直前の状態をコピーして『ファイル名.bak』として同じフォルダに残す」
この仕組みをVBAで組んでおけば、万が一のときも最新の一個前の状態からやり直せます。しかも、特別なツールは不要。PowerPoint標準の機能だけで実装できます。
—
開発の全体像:どうやって実現するのか?
今回作成するマクロのロジックは非常にシンプルです。
1. 名前のチェック: 今開いているファイルが、一度も保存されていない「新規プレゼンテーション(名前未決定)」ではないか確認する。
2. 保存先の取得: 現在のファイルパスとファイル名を取得する。
3. バックアップの作成: 上書き保存を実行する「直前」に、現在のファイルを別名(拡張子を `.bak` に変更)で同じフォルダにコピーする。
4. 上書き保存の実行: 通常通り、現在のファイルを上書き保存する。
これを実現するために、PowerPoint VBAの基本オブジェクトである `ActivePresentation`(現在アクティブなプレゼンテーション)を操作します。
—
【実践】コピペで動く!安全対策バックアップマクロ
それでは実際のコードを見ていきましょう。
以下のコードを、PowerPointのVBAエディタ(Alt + F11 で起動)の「標準モジュール」に貼り付けてください。
Option Explicit
‘ =====================================================================
‘ 概要: 上書き保存と同時に、同階層に「.bak」のバックアップを自動生成するマクロ
‘ ターゲット: 初心者~マクロの記録脱却を目指す方
‘ =====================================================================
Sub SaveWithBackup()
Dim originalPath As String
Dim originalName As String
Dim ext As String
Dim backupPath As String
Dim fso As Object
‘ 1. 現在のプレゼンテーションが保存済みかチェック
On Error GoTo ErrorHandler
If ActivePresentation.Path = “” Then
MsgBox “このファイルはまだ一度も保存されていません。” & vbCrLf & _
“まずは通常の「名前を付けて保存」を行ってください。”, vbExclamation, “保存確認”
Exit Sub
End If
‘ 2. パスとファイル名の分解
originalPath = ActivePresentation.Path & “\”
originalName = ActivePresentation.Name
‘ 拡張子(.pptx または .ppt)を取り除く処理
Dim dotPos As Long
dotPos = InStrRev(originalName, “.”)
If dotPos > 0 Then
ext = Mid(originalName, dotPos) ‘ 拡張子を取得(例: .pptx)
originalName = Left(originalName, dotPos – 1) ‘ 拡張子を除いたファイル名
Else
ext = “.pptx”
End If
‘ 3. バックアップファイルのパスを構築(例: 企画書.pptx.bak または 企画書.bak)
‘ ※今回は安全のため「元のファイル名.pptx.bak」という形式にします
backupPath = originalPath & originalName & ext & “.bak”
‘ 4. FileSystemObjectを使って現在のファイルをバックアップとしてコピー
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ すでに同名の.bakがあれば上書きする
fso.CopyFile originalPath & ActivePresentation.Name, backupPath, True
‘ 5. PowerPoint標準の上書き保存を実行
ActivePresentation.Save
‘ 完了メッセージ(実運用では不要ならコメントアウトしてください)
MsgBox “上書き保存とバックアップの作成が完了しました!” & vbCrLf & _
“バックアップ: ” & backupPath, vbInformation, “完了”
Exit Sub
ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “予期せぬエラー”
End Sub
—
コードの注目ポイントと初心者がつまずきやすい罠
ここで、エンジニアとして知っておくべき「コードの本質」をいくつか解説します。ここを理解すると、他のVBAコードを書くスキルも飛躍的に上がります。
1. `ActivePresentation.Path = “”` のトラップ
PowerPointを起動して「新しいプレゼンテーション」を作った直後は、まだパソコン上のどこにも保存されていません。この状態のとき、`Path` プロパティは空欄(””)を返します。
もしこのチェックを入れずにコードを走らせると、「パスが見つかりません」という手痛いエラー(実行時エラー)になります。初心者コードとプロのコードの分かれ目は、こうした「例外への配慮」にあるのです。
2. FileSystemObject(FSO)という強力な相棒
ファイルをコピーする際、VBAの標準関数である `FileCopy` を使うこともできますが、今回はあえて `CreateObject(“Scripting.FileSystemObject”)` を使っています。
FSOを使うことで、ファイルの存在確認や上書き許可(`True`)の指定が非常に安定し、Windows環境においてファイル操作のトラブルを劇的に減らすことができます。
—
さらに実用性を高めるためのワンポイントアドバイス
このマクロをさらに便利に使うためのヒントを2つお伝えします。
1. ショートカットキーの割り当て
毎回「マクロ」ダイアログを開いて実行するのは面倒ですよね。クイックアクセスツールバーにこの `SaveWithBackup` を登録するか、リボンのユーザー設定を行うと、ワンクリックやショートカット(例: `Ctrl + S` の代わりに)で実行できるようになります。
2. バックアップの世代管理
今回は最新の1世代のみ(上書き上上書き)の `.bak` ですが、日付や時間をファイル名に付与するように改造すれば(例: `企画書_20231025_120000.bak`)、タイムトラベル可能な本格的な世代管理システムに進化させることも可能です。
—
まとめ
いかがでしたか?
今回は、PowerPoint VBAの基本オブジェクトを操作しながら、実務で直面するリスクを防ぐ「自動バックアップマクロ」を解説しました。
- 保存状態を `Path` でチェックする安全設計
- ファイルの拡張子をスマートに切り分けてパスを作る文字列操作
- FileSystemObjectによる確実なファイルコピー
これらはすべて、今後のVBA開発の土台となる極めて重要なテクニックです。
ぜひご自身の環境でコードを試して、快適で安心なプレゼンテーション作成ライフを手に入れてくださいね。あなたのVBA学習を、これからも応援しています!
