PowerPoint VBAの極意:非表示スライドを排除し「真の公開用PDF」を生成する自動化術
こんにちは。現場で「いかに楽をして、いかにミスを減らすか」を追求し続けているエンジニアです。
皆さんは、プレゼン資料をPDF化する際、手作業で「非表示スライドの削除」や「PDF保存」を行っていませんか?もし、スライドの枚数が100枚を超え、その都度PDFの再作成に追われているなら、今日でその作業とはおさらばしましょう。
今回は、「非表示スライドを自動で判別し、公開用スライドだけを抽出してPDF化する」という、実務で最も要望の多い自動化コードを伝授します。
—
1. なぜ「コピー&ペースト」の自動化なのか?
PowerPointには「非表示スライドを印刷しない」という設定はありますが、PDF変換時に意図せず情報漏洩(非表示にしたはずのデータが残っている)が起きるリスクがゼロではありません。
また、「表示スライドだけを集めた別ファイルを作る」ことは、配布用資料の軽量化や、先方に渡してはいけない機密情報の物理的な遮断という観点から、最も安全な手法です。
この処理の本質は以下の3ステップです。
1. 現在のプレゼンテーションを解析する
2. 新規プレゼンテーションを作成し、必要なスライドだけを「複製」して追加する
3. 完成したクリーンなファイルをPDFとして書き出す
—
2. 実装コード:究極のフィルタリング・エンジンの全容
以下のコードをVBAエディタ(`Alt + F11`)に貼り付けてください。標準モジュールに配置するのが鉄則です。
Option Explicit
Sub ExportCleanPDF()
Dim srcPres As Presentation
Dim destPres As Presentation
Dim sld As Slide
Dim pdfPath As String
‘ 現在アクティブなプレゼンテーションを指定
Set srcPres = ActivePresentation
‘ 保存先のパスを設定(同じフォルダに「_Public.pdf」として保存)
pdfPath = Left(srcPres.FullName, InStrRev(srcPres.FullName, “.”)) & “Public.pdf”
‘ 新規プレゼンテーションの作成(非表示のまま作成して高速化)
Set destPres = Presentations.Add(msoFalse)
‘ スライドをループして判定
For Each sld In srcPres.Slides
‘ ShowInSlideShow プロパティが msoTrue のものだけを抽出
If sld.Hidden = msoFalse Then
‘ スライドを新規ファイルへコピー(末尾に追加)
sld.Copy
destPres.Slides.Paste destPres.Slides.Count + 1
End If
Next sld
‘ PDFとして保存
If destPres.Slides.Count > 0 Then
destPres.ExportAsFixedFormat pdfPath, ppFixedFormatTypePDF
MsgBox “公開用PDFを作成しました:” & vbCrLf & pdfPath, vbInformation
Else
MsgBox “対象となる表示スライドが見つかりませんでした。”, vbExclamation
End If
‘ 新規ファイルを閉じる(保存はしない)
destPres.Close
End Sub
—
3. コードの「ここが肝」:プロの視点
① `msoFalse` でバックグラウンド生成
`Presentations.Add(msoFalse)` の引数に注目してください。これを `msoTrue` にすると、処理のたびに画面がパカパカと切り替わり、処理速度が低下します。`msoFalse` でバックグラウンド生成させるのが、自動化エンジニアの嗜みです。
② `Hidden` プロパティの判定
`sld.Hidden` は、スライドが非表示かどうかを保持する真偽値(Boolean)です。ここを `If sld.Hidden = msoFalse Then` とすることで、「表示されているスライドだけ」を確実に抽出します。
③ `Paste` メソッドの最適化
`destPres.Slides.Paste` の引数に `destPres.Slides.Count + 1` を指定することで、常に新しいスライドを末尾に追加しています。これにより、スライドの順番が入れ替わる事故を完璧に防ぎます。
—
4. 陥りやすいエラーと回避策
- エラー:参照エラーが出る
- 必ずプレゼンテーションを一度保存してから実行してください。`ActivePresentation.FullName` は未保存ファイルではエラーになります。
- エラー:PDFが空っぽになる
- `If destPres.Slides.Count > 0` というガード文を入れています。スライドが1枚も抽出されなかった場合にPDF化するとエラーになるため、事前にチェックするのは基本中の基本です。
—
さあ、一歩先の自動化へ
このコードをリボンメニューの「クイックアクセスツールバー」に登録しておけば、ボタンを1回押すだけで、配布用PDFが即座に生成されるようになります。
VBAは、単に「書ける」ことよりも、「いかにシステム的な安定性を担保するか」が重要です。今回紹介したエラーハンドリングとバックグラウンド処理の考え方は、他のどの自動化にも通ずる「伝説のアーキテクト」としての基盤です。
ここをクリアしたあなたは、もう初心者ではありません。次なる自動化のステージへ、自信を持って進んでください!質問があれば、いつでもどうぞ。
