【入門編】【初心者】プレゼンテーション保存時に、自動で「スライド総数」と「最終更新日時」をスライド1の隅に自動更新して書き込むマクロ – PowerPoint VBA解析バイブル

スポンサーリンク
スポンサーリンク

【PowerPoint VBA掌握術】「保存忘れ」をゼロにする。スライドにメタデータを自動刻印する技術

こんにちは。自動化の世界へようこそ。

「マクロの記録」ボタンを押して、自分が操作した動きがコードとして書き出されるのを見て、「おぉ、魔法みたいだ!」と感動したことはありませんか? 実は、そこが自動化エンジニアへの第一歩です。

しかし、本物のエンジニアへの道は、その「記録されたコード」を読み解き、「オブジェクトの構造(設計図)」を理解することから始まります。

今日は、実務で非常によくある「プレゼンの最終更新日やスライド総数が、古いまま提出してしまった!」という痛恨のミスを防ぐための、極めて実用的かつ、VBAの基礎が凝縮されたテクニックを伝授します。

1. なぜ「手動更新」は失敗するのか?

プレゼン資料の表紙には、よく以下のような情報が記載されます。

  • スライド総数(「全30ページ」など)
  • 最終更新日時

これらを、資料を修正するたびに手動で書き換える……。一見、簡単な作業に見えますよね。しかし、人間の集中力には限界があります。「修正したけれど、ページ数を書き換えるのを忘れた」「昨日の日付のまま保存してしまった」。

こうした「ヒューマンエラー」を、人間の意識に頼らず「システム(コード)」で解決する。 これこそが、私たちが業務自動化に取り組む真の目的です。

2. アーキテクトの視点:PowerPoint VBAの「罠」を知る

コードを書く前に、一つだけ重要な「設計上の注意点」を共有しておきます。

実は、Excel VBAには「保存する直前に自動で動く(BeforeSave)」という便利なイベントがありますが、PowerPoint VBAには、標準で「保存時に自動実行されるイベント」が存在しません。

「えっ、じゃあできないの?」と思ったあなた、安心してください。

プロの現場では、こう解決します。
「『保存』という動作を、『情報を更新してから保存する』という専用のマクロに置き換える」のです。

ユーザーには「保存ボタン」ではなく、「更新して保存」というボタン(マクロ)を使ってもらう。この「ワークフローの設計」こそが、エンジニアの腕の見せ所です。

3. 実装:スライドに情報を刻印するコード

それでは、具体的な実装に入りましょう。
今回の作戦はこうです。

1. スライド1枚目の特定のテキストボックスに、名前を付けておく。
2. マクロを実行すると、そのテキストボックスを探し出し、情報を書き込む。
3. 最後にファイルを保存する。

事前準備:テキストボックスに「名前」を付ける

VBAで「スライドの隅にあるテキストボックス」を指定するのは、実は少し難しい作業です。「左から何センチ、上から何センチ……」と指定すると、デザインが変わった瞬間にコードが壊れてしまいます。

そこで、「名前(Name)」を使います。

1. スライド1枚目に、情報を書き込みたいテキストボックスを作成します。
2. [ホーム] タブ > [編集] グループ > [選択] > [オブジェクトの選択と表示] を開きます。
3. 右側に表示されたリストから、今作ったテキストボックスを見つけ、名前を `MetadataBox` に書き換えてください。

これで、コードからピンポイントで呼び出せる「目印」ができました。

プログラム本体

以下のコードを、VBE(Visual Basic Editor)の標準モジュールに貼り付けてください。

Option Explicit

''' <summary>
''' スライド1枚目の指定したテキストボックスに、
''' スライド総数と更新日時を書き込み、プレゼンテーションを保存するマクロ
''' </summary>
Sub UpdateMetadataAndSave()
    Dim pres As Presentation
    Dim targetSlide As Slide
    Dim shp As Shape
    Dim metadataText As String
    Dim slideCount As Integer
    Dim lastUpdate As String
    Dim isSuccess As Boolean
    
    ' 現在開いているプレゼンテーションを対象にする
    Set pres = ActivePresentation
    isSuccess = False
    
    ' 1. 情報の準備
    slideCount = pres.Slides.Count ' スライドの総数を取得
    lastUpdate = Format(Now, "yyyy/mm/dd HH:mm") ' 現在時刻をフォーマット
    
    ' 書き込む文字列の組み立て
    metadataText = "Total Pages: " & slideCount & " | Last Updated: " & lastUpdate
    
    ' 2. スライド1枚目から「MetadataBox」という名前の図形を探す
    On Error Resume Next ' エラーが発生しても中断せず次に進む(図形が見つからない場合への備え)
    Set targetSlide = pres.Slides(1)
    Set shp = targetSlide.Shapes("MetadataBox")
    On Error GoTo 0 ' エラーハンドリングを元に戻す
    
    ' 3. 図形が見つかったかどうかの判定
    If shp Is Nothing Then
        MsgBox "エラー: スライド1枚目に 'MetadataBox' という名前のテキストボックスが見つかりません。" & vbCrLf & _
               "「オブジェクトの選択と表示」から名前を確認してください。", vbCritical, "設定エラー"
        Exit Sub
    End If
    
    ' 4. テキストの書き換え
    ' TextFrame.TextRange を通じて、テキストの内容を操作します
    shp.TextFrame.TextRange.Text = metadataText
    isSuccess = True
    On Error GoTo 0
    
    ' 5. 保存処理
    If isSuccess Then
        pres.Save
        MsgBox "情報を更新し、保存が完了しました。", vbInformation, "完了"
    End If
    
End Sub

4. コードの解説:何が起きているのか?

このコードには、プログラミングの基本が詰まっています。

オブジェクトの階層構造(Hierarchy)

VBAは「親」から「子」へと辿っていく構造をしています。
`ActivePresentation` (プレゼン全体)
→ `Slides(1)` (1枚目のスライド)
→ `Shapes(“MetadataBox”)` (特定の図形)
→ `TextFrame.TextRange.Text` (その図形の中の文字)

この「階層を一段ずつ降りていく感覚」を掴むことが、VBAマスターへの近道です。

エラーハンドリングの重要性

`On Error Resume Next` という記述がありますね。これは「もしエラーが起きても、パニックにならずに次の行へ進め」という命令です。
今回は「もし指定した名前の図形がなかったら、プログラムを止めるのではなく、ユーザーに優しく教えてあげたい」という意図で、あえて制御しています。

5. 陥りやすいエラーと回避策

初心者が躓きやすいポイントを整理しておきましょう。

現象 原因 回避策
「実行時エラー ‘5’: プロシージャの呼び出し、または引数が不正です」 `MetadataBox` という名前の図形が見つからない。 「オブジェクトの選択と表示」パネルで、名前が完全に一致しているか再確認しましょう。
「書き換わらない、あるいは変な場所に書かれる」 スライド1枚目ではないスライドに図形を置いている。 `pres.Slides(1)` は必ず「1枚目」を指します。配置場所を再確認してください。
「マクロを実行しても何も起きない」 コードが「標準モジュール」ではなく「Slide1」などのシートモジュールに書かれている。 [挿入] > [標準モジュール] をクリックして、そこにコードを貼り付けてください。

6. 次のステップへ

おめでとうございます! これであなたは、単なる「記録係」から、「仕組みを作る設計者」へと一歩踏み出しました。

「保存の代わりにこのマクロを使う」という運用ルールを作るだけで、チーム全体の資料の信頼性は劇的に向上します。これこそが自動化の真価です。

もし余裕があれば、次は「PDFとして書き出す機能」や「特定のフォントサイズに自動調整する機能」などを追加してみるのも良いでしょう。

ここをクリアすれば、PowerPoint VBAの基本はバッチリですよ。
さあ、もっと自由な自動化の世界へ踏み出しましょう!

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