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も書き出せます。
最後に:エンジニアとして大切なこと
コードを書くことは、作業を「翻訳」することです。
「承認されたらフォルダに移す」という人間の脳内にある曖昧な業務プロセスを、コンピュータが理解できる論理的な命令へ変換する。
今回のマクロは、そのための第一歩です。まずはこのコードを試し、動かしてみてください。そして、自分の業務に合わせて「ここをもっとこうしたい」という欲が出てきたとき、あなたはすでに「ただの利用者」ではなく「エンジニア」になっています。
応援しています。何か詰まったら、いつでも戻ってきてくださいね。
