【入門編】【初心者】プレゼンテーションを保存する際、全スライドを「編集不可の画像」に変換して貼り付け直した「改ざん防止用PPTX」を新規作成するマクロ – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは!PowerPoint VBAの世界へようこそ。
マクロの記録から一歩抜け出し、「自分の手でプレゼンテーションを自由自在に操りたい」と思っているあなたへ。

今回は、実務で非常に需要の高い「全スライドを編集不可の画像に変換し、改ざん防止用PPTXとして別名保存する自動化マクロ」を一緒に作っていきましょう。

「社外秘の資料を配る際、勝手に文字や図形を改変されたくない」
「フォントの崩れやデザインのズレを完全に防ぎたい」

そんな現場の悩みを、たった一撃のVBAで解決します。ここをクリアすれば、PowerPoint VBAの本質的なオブジェクト操作がグッと身につきますよ。さあ、一緒に見ていきましょう!

—

なぜ「画像化」で改ざんを防げるのか?

PowerPointの資料は、そのまま配ると誰でも簡単にテキストを書き換えたり、レイアウトを動かしたりできてしまいます。そこで、配布前に「スライドを1枚の画像(PNGなど)として書き出し、それを新しいスライドに貼り付け直す」というアプローチを取ります。

これを人間の手でやろうとすると……
1. スライドを画像としてエクスポートする
2. 新しいプレゼンテーションを作成する
3. エクスポートした画像を1枚ずつ貼り付ける
4. 位置をきれいに調整する

スライドが50枚あったら、気が遠くなる作業ですよね。
これをVBAに任せれば、わずか数秒で完了します。

—

現場でそのまま使える!改ざん防止マクロ全コード

以下のコードを、PowerPointのVBAエディタ(`Alt + F11` で起動)の標準モジュールに貼り付けて実行してください。

Sub CreateProtectedPresentation()
Dim srcPres As Presentation
Dim newPres As Presentation
Dim sld As Slide
Dim newSld As Slide
Dim tmpFilePath As String
Dim savePath As String
Dim i As Long

‘ 1. 操作元のプレゼンテーション(アクティブなプレビュー)を定義
Set srcPres = ActivePresentation

‘ 2. 保存先のパスを設定(デスクトップに「改ざん防止_元のファイル名」で保存)
tmpFilePath = Environ(“USERPROFILE”) & “\Desktop\”
savePath = tmpFilePath & “【改ざん防止】_” & Replace(srcPres.Name, “.pptx”, “”) & “.pptx”

‘ 3. 画像を一時保存するためのフォルダパス
Dim imgDir As String
imgDir = Environ(“TEMP”) & “\”

‘ 4. 新規プレゼンテーションを作成(元のスライドサイズを引き継ぐ)
Set newPres = Presentations.Add(withWindow:=msoTrue)
newPres.PageSetup.SlideWidth = srcPres.PageSetup.SlideWidth
newPres.PageSetup.SlideHeight = srcPres.PageSetup.SlideHeight

‘ 5. 元プレゼンテーションの全スライドをループ処理
For i = 1 to srcPres.Slides.Count
Set sld = srcPres.Slides(i)

‘ (A) スライドを一時的にPNG画像として書き出し
Dim imgPath As String
imgPath = imgDir & “slide_” & i & “.png”
sld.Export imgPath, “PNG”, srcPres.PageSetup.SlideWidth, srcPres.PageSetup.SlideHeight

‘ (B) 新規プレジンテーションに新しいスライド(白紙)を追加
Set newSld = newPres.Slides.Add(newPres.Slides.Count + 1, ppLayoutBlank)

‘ (C) 書き出した画像を新規スライドの原点(Left:0, Top:0)に貼り付け
‘ ※画像化することで、中のテキストや図形は完全に「ただの絵」になります
Dim pic As Shape
Set pic = newSld.Shapes.AddPicture( _
FileName:=imgPath, _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=0, Top:=0, _
Width:=srcPres.PageSetup.SlideWidth, _
Height:=srcPres.PageSetup.SlideHeight)

‘ (D) 使用した一時画像を削除(クリーンアップ)
Kill imgPath
Next i

‘ 6. 新規プレゼンテーションを指定パスに保存
newPres.SaveAs savePath

‘ 7. 完了メッセージ
MsgBox “改ざん防止用PPTXの作成が完了しました!” & vbCrLf & “保存先: ” & savePath, vbInformation, “処理完了”
End Sub

—

コードの重要なポイントを徹底解説

初心者の方でも「なぜこのコードを書く必要があるのか」が分かるよう、特に重要なポイントを3つに絞って解説します。

1. スライドサイズを完全に一致させる (`PageSetup`)

PowerPoint VBAで新規プレゼンテーションを作る際、何も指定しないとデフォルトのサイズ(古い規格の4:3など)になってしまうことがあります。
このコードでは、`srcPres.PageSetup.SlideWidth` と `Height` を使って、元のスライドの縦横比を完全にコピーしています。これにより、画像を引き伸ばしたり歪ませたりすることなく綺麗に配置できます。

2. `.Export` メソッドによる「ラスタライズ(画像化)」

sld.Export imgPath, “PNG”, 幅, 高さ

これがこのマクロの心臓部です。スライドそのものを高解像度のPNG画像としてPCの一時フォルダ(`Environ(“TEMP”)`)に書き出しています。
画像にしてしまえば、文字オブジェクトは消え、ただのピクセルの塊(画像)になるため、第三者が勝手に書き換えることは不可能になります。

3. オブジェクトの座標をピタリと合わせる

Set pic = newSld.Shapes.AddPicture(…, Left:=0, Top:=0, Width:=…, Height:=…)

新規作成した白紙スライドの `Left:0, Top:0`(左上端)から、スライド全体を覆うサイズで画像を貼り付けています。余白が生まれないため、見た目は元のスライドと完全に一致します。

—

初心者が陥りやすいエラーと対策

PowerPoint VBAを書き始めると、必ずと言っていいほど次のような壁にぶつかります。ここを知っておくだけで、エラーに怯えることがなくなりますよ。

エラー1: 「保存先ファイルが既に開かれている」と言われる

  • 原因: 既に同じ名前の「【改ざん防止】〜.pptx」を開いたままマクロを実行すると、上書き保存ができずにエラーになります。
  • 対策: 実行する前に、出力先のファイルは閉じておくか、ファイル名にタイムスタンプ(日時)を付与して重複を防ぐようにコードをアレンジしてみましょう。

エラー2: 一時ファイルの消し忘れ・アクセス権エラー

  • 原因: `Kill imgPath` で一時画像を削除していますが、何らかの理由で画像がロックされているとエラーになります。
  • 対策: Windowsのテンポラリフォルダ(`Environ(“TEMP”)`)は自動で整理されるため過度に心配する必要はありませんが、ループ内で確実にオブジェクトを解放(`Set pic = Nothing` など)する意識を持つとプログラミングの質がグッと上がります。

—

まとめ

今回は、プレゼンテーションを丸ごと画像化して改ざんを防止する、実用的なVBAテクニックをご紹介しました。

  • スライドを `.Export` でPNG画像に変換する
  • 新規プレゼンテーションに同じサイズで貼り付ける
  • 不要になった一時ファイルは綺麗に掃除する

この一連の流れをマスターすれば、PowerPointのビジュアル処理に関する自動化の引き出しが何倍にも広がります。ぜひ、実際の業務データやダミーの資料で試してみてくださいね。

ここをクリアしたあなたなら、もうPowerPoint VBAの初級者は卒業です!次のステップへ進んで、さらにスマートな業務効率化を実現していきましょう。

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