【入門編】【中級者】プレゼンテーションの「カスタムプロパティ」に承認ステータスを埋め込み、ステータスに応じて保存先フォルダを自動で振り分けるワークフロー支援マクロ – PowerPoint VBA解析バイブル

スポンサーリンク

PowerPointを「ただの図画工作ツール」で終わらせない。カスタムプロパティで実現する「自動ワークフロー」の極意

こんにちは。現場で泥臭く、しかし誰よりもスマートに自動化を追求しているアーキテクトです。

多くの人がPowerPointを「スライドを作るだけのツール」だと思っています。しかし、VBA(Visual Basic for Applications)のポテンシャルを解放すれば、PowerPointは立派な「データ駆動型のドキュメント管理システム」に進化します。

今回は、手作業でフォルダを移動させるという、最も生産性の低い作業を自動化する「承認ステータス連動型保存マクロ」を構築しましょう。ここをクリアすれば、あなたのVBAスキルは「マクロの記録」レベルから、現場を支配する「業務設計者」の域へ一歩踏み出せます。

—

1. なぜ「カスタムプロパティ」なのか?

ファイル名に「_修正版_最終_本当の最終.pptx」といった文字列を埋め込むのは、今日で終わりにしましょう。

PowerPointには、ファイルそのものにメタデータを付与できる「カスタムドキュメントプロパティ」という宝の山があります。これはファイルの外見(スライド)には影響を与えず、裏側で「誰が」「いつ」「どんな状態か」を記録できる仕組みです。これを利用すれば、プログラム側から「承認済みかどうか」を瞬時に判断できます。

2. 実装の設計図:ワークフローの自動化

今回のゴールは以下の通りです。

1. プロパティの読み込み: 現在のドキュメントの「Status」を確認する。
2. 判定: ステータスが「承認済」であれば、指定のフォルダへコピーを保存する。
3. 安全策: すでにファイルが存在する場合の重複エラーを回避する。

実装コード:ステータス連動型保存マクロ

このコードを標準モジュールに貼り付けてください。

Option Explicit

Sub ExportIfApproved()
Dim ppt As Presentation
Dim customProps As DocumentProperties
Dim status As String
Dim targetFolder As String
Dim fileName As String

Set ppt = ActivePresentation
Set customProps = ppt.CustomDocumentProperties

‘ 1. カスタムプロパティから「Status」を取得(なければエラー回避)
On Error Resume Next
status = customProps(“Status”).Value
On Error GoTo 0

If status <> “承認済” Then
MsgBox “現在のステータスは「” & status & “」です。承認済みのみ出力可能です。”, vbExclamation
Exit Sub
End If

‘ 2. 保存先フォルダの定義(環境に合わせて変更してください)
targetFolder = “C:\Reports\Approved\”
fileName = ppt.Path & “\” & Left(ppt.Name, InStrRev(ppt.Name, “.”) – 1) & “_Approved.pptx”

‘ 3. 保存処理
‘ SaveAsはファイル形式の指定が重要です。ppSaveAsOpenXMLPresentationが標準の.pptx
On Error GoTo ErrorHandler
ppt.SaveCopyAs targetFolder & ppt.Name

MsgBox “承認済みフォルダへ保存完了しました。”, vbInformation
Exit Sub

ErrorHandler:
MsgBox “保存に失敗しました。フォルダのパスを確認してください。” & vbCrLf & Err.Description, vbCritical
End Sub

—

3. 現場で陥りやすい「罠」と解決策

罠1:カスタムプロパティが存在しないエラー

`customProps(“Status”).Value` を実行した際、そのキーが定義されていないとVBAは容赦なく停止します。これを防ぐのがコード内の `On Error Resume Next` です。これは「エラーが発生したら一旦無視して次へ進め」という命令です。読み込み直後に `On Error GoTo 0` で監視を再開させるのが、スマートなエラーハンドリングの定石です。

罠2:パスの指定ミス

Windowsにおいて、ディレクトリの末尾に `\`(バックスラッシュ)があるかどうかで挙動が不安定になることがよくあります。パスを結合する際は、常に `\ `の有無を確認する癖をつけましょう。

罠3:拡張子の扱いに注意

`ppt.Name` には `.pptx` が含まれています。これをそのまま使うとファイル名が `test.pptx.pptx` になることがあります。`InStrRev` 関数を使って、拡張子の手前までの文字列を取得するのがプロの流儀です。

—

4. さらなる高みへ:運用のアドバイス

このマクロをさらに進化させるなら、以下のステップを検討してください。

  • GUIの作成: UserFormを作成し、承認ステータスをプルダウンで選べるようにする。
  • イベント駆動: `App_PresentationBeforeSave` イベントを利用すれば、保存ボタンを押した瞬間にステータスチェックを走らせることも可能です。
  • PDF同時生成: `ppt.ExportAsFixedFormat` を使えば、保存と同時にPDFも書き出せます。

最後に:エンジニアとして大切なこと

コードを書くことは、作業を「翻訳」することです。
「承認されたらフォルダに移す」という人間の脳内にある曖昧な業務プロセスを、コンピュータが理解できる論理的な命令へ変換する。

今回のマクロは、そのための第一歩です。まずはこのコードを試し、動かしてみてください。そして、自分の業務に合わせて「ここをもっとこうしたい」という欲が出てきたとき、あなたはすでに「ただの利用者」ではなく「エンジニア」になっています。

応援しています。何か詰まったら、いつでも戻ってきてくださいね。

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