【入門編】【初心者】開いているすべてのプレゼンテーションを対象に、未保存の変更を確認しながら一括で別名保存する「一斉退避」マクロ – PowerPoint VBA解析バイブル

スポンサーリンク

PowerPoint VBAを掌握せよ:作業終了を自動化する「一斉退避」マクロの極意

こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアとして、今日は君に「PowerPoint VBAの真髄」を授けよう。

「マクロの記録」ボタンを押して満足している段階はもう終わりだ。今日は、複数のプレゼンを同時に開き、どれが保存されていてどれが未保存かを確認する……そんな面倒な「お片付け」を、たった一度のクリックで終わらせる「一斉退避マクロ」を構築する。

プロの現場では、「人間が手作業で確認するプロセスを、いかに安全にコードへ落とし込むか」が重要だ。さあ、一歩先の世界へ行こう。

—

1. なぜ「一斉退避」が必要なのか?

PowerPointで複数の資料を並行作業していると、閉じる際に「変更を保存しますか?」というダイアログが連続して現れ、集中力が削がれることはないだろうか。

今回作るマクロは、以下の3ステップを自動化する。
1. 開いている全プレゼンを走査する
2. 保存されていないファイル(未保存)だけを検知する
3. 指定したフォルダに、現在の日時を付与して別名保存する

これさえあれば、退勤前の「保存作業の迷宮」から解放される。

—

2. 実用コード:一斉退避スクリプト

以下のコードをVBAエディタ(Alt + F11)に貼り付けてみてほしい。

Option Explicit

Sub BackupAllPresentations()
Dim ppt As Presentation
Dim savePath As String
Dim timeStamp As String

‘ アーカイブフォルダの指定(ここを君の環境に合わせて書き換えること)
savePath = “C:\Backup\PPT_Archive\”

‘ 日時スタンプの生成(ファイル名重複を防ぐための定石)
timeStamp = Format(Now, “yyyyMMdd_HHmmss”)

‘ フォルダが存在しなければ作成する(エラー防止のテクニック)
If Dir(savePath, vbDirectory) = “” Then
MkDir savePath
End If

‘ 開いている全てのプレゼンテーションをループ処理
For Each ppt In Application.Presentations
‘ 未保存のファイルのみを対象にするか、すべて保存するかを選べる
‘ ここでは「未保存のもの」だけを保存対象とする
If ppt.Saved = msoFalse Then
On Error Resume Next ‘ 予期せぬエラーで停止しないための防波堤

‘ 別名で保存(SaveAsメソッド)
‘ ファイル名に日時を連結して、上書きを防ぐ
ppt.SaveAs Filename:=savePath & timeStamp & “_” & ppt.Name

If Err.Number = 0 Then
Debug.Print “成功: ” & ppt.Name
Else
MsgBox “保存に失敗しました: ” & ppt.Name
End If
On Error GoTo 0
End If
Next ppt

MsgBox “全プレゼンの退避が完了しました。”
End Sub

—

3. コードを読み解く:3つの重要ポイント

このコードが「ただのコピペ」以上の価値を持つ理由を解説しよう。

① `For Each` 文によるオブジェクトの列挙

`Application.Presentations` は、今開いているすべてのファイルが入った「箱」のようなものだ。これを `For Each` で一つずつ取り出すことで、ファイル名を知らなくても全ファイルを制御できる。これが自動化の基本だ。

② `ppt.Saved` プロパティの活用

ここが一番のミソだ。`ppt.Saved` は、そのプレゼンが最後に保存されてから変更があるかどうかを `True/False` で教えてくれる。これを使うことで、「保存済み」のファイルを無駄に上書きする非効率を排除できる。

③ `On Error Resume Next` の正しい使い方

現場では「予期せぬエラー」がつきものだ。例えば、ファイル名に禁止文字が含まれているだけでスクリプトは止まる。敢えて `Resume Next` を使い、エラーが発生しても処理を止めない「堅牢性(ロバストネス)」を確保しているんだ。

—

4. 陥りやすい罠と対策

初心者ほど「動いた!」で満足して、以下の罠にハマる。

  • パスの指定ミス: `savePath` の末尾に `\` を忘れると、保存場所が狂う。「パスの最後は必ず区切り文字で終わる」と覚えておこう。
  • ファイル名の上書き: `SaveAs` で同じ名前を使うと、警告なしに上書きされるリスクがある。今回のコードのように `Format(Now, …)` でタイムスタンプを付与するのは、プロの現場での常識だ。

—

最後に:エンジニアとしての第一歩

今回のコードを動かしてみてどうだっただろうか?
「保存する」という単純な動作一つとっても、エラー処理やバックアップの仕組みを意識するだけで、それは単なる作業ではなく「資産を守るシステム」に変わる。

ここをクリアした君なら、次は「特定の文字列を含むスライドを自動削除する」ことや、「全スライドのフォントを一括変換する」ことなど、どんな応用も自在にできるはずだ。

わからないことがあれば、いつでもまた聞きに来てくれ。君の自動化ライフを心から応援しているよ。

タイトルとURLをコピーしました