【PowerPoint VBA極道】プレゼン資料の「改ざん」を許さない。保存時の自動セキュリティ検証モジュール構築術
こんにちは。現場で泥臭く、かつエレガントに業務を自動化しているエンジニアです。
皆さんは「PowerPointの保存」をただの作業だと思っていませんか? 防衛・金融・重要機密を扱うプロジェクトでは、「保存ボタンを押した瞬間が、最大のセキュリティリスク」になり得ます。意図しないオブジェクトの挿入や、スライドのすり替わり。これらを機械的に監視し、保存前に「指差し確認」させる仕組み。
今回は、VBAを使って、スライド内の全シェイプに「デジタル指紋(GUID)」を刻み込み、保存時に差分を検出するセキュリティモジュールの構築法を伝授します。
—
1. なぜ「保存」をハックする必要があるのか?
PowerPointは柔軟すぎるツールです。悪意ある第三者が、スライドの裏側に隠しシェイプを仕込んだり、重要な図表を別のものに差し替えたりすることは、慣れたユーザーなら一瞬でできてしまいます。
我々エンジニアがやるべきは、「現在の構成が、信頼された状態の構成と一致しているか」を機械に判定させることです。
今回のミッション
1. 初期登録: プレゼン内の全シェイプに固有のID(GUID)を割り当てる。
2. 監視: 保存時に全シェイプをスキャンし、以前のGUIDリストと照合する。
3. 拒絶: 未許可のシェイプや欠損があれば保存を中断し、アラートを出す。
—
2. 実装の心臓部:シェイプを識別する
PowerPointのオブジェクトには `Shape.Name` がありますが、これは重複可能で信頼できません。そこで、`Tags`(タグ)という機能を使います。これは、シェイプの裏側に非表示のメタデータを付与できる、まさに「身分証明書」です。
準備:GUIDを付与する初期化コード
‘ 実行することで、全スライドのシェイプに固有タグを付与
Sub InitializeSecurityTags()
Dim sld As Slide
Dim shp As Shape
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
‘ まだタグを持っていない場合のみ生成
If shp.Tags(“SEC_GUID”) = “” Then
‘ スライド番号とシェイプ名を組み合わせた簡易的なユニークキー
‘ 実際にはAPIで生成したGUIDを使うことを推奨
shp.Tags.Add “SEC_GUID”, sld.SlideIndex & “_” & shp.Name & “_” & Now
End If
Next shp
Next sld
MsgBox “全オブジェクトにセキュリティタグを付与しました。”
End Sub
—
3. 保存時の「検問所」を作る
VBAには `BeforeSave` のようなイベントはありません。しかし、「リボンボタンからの保存をフックする」ことで、保存前に必ずチェックを走らせる仕組みを作ります。
セキュリティ検証ロジック
Function VerifyIntegrity() As Boolean
Dim sld As Slide
Dim shp As Shape
Dim expectedCount As Integer
‘ 本来あるべきオブジェクト数と比較するなどのロジック
‘ ここでは全シェイプにSEC_GUIDが存在するか確認
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
If shp.Tags(“SEC_GUID”) = “” Then
MsgBox “警告: 不正なオブジェクトが検出されました!: ” & shp.Name
VerifyIntegrity = False
Exit Function
End If
Next shp
Next sld
VerifyIntegrity = True
End Function
‘ ユーザーが呼び出すカスタム保存プロシージャ
Sub SecureSave()
If VerifyIntegrity() Then
ActivePresentation.Save
Else
MsgBox “セキュリティ検証に失敗したため、保存を中止しました。”
End If
End Sub
—
4. 現場のプロとして、陥りやすい罠を知る
初学者がここで躓くポイントを、少しだけ深掘りします。
- グループ化の罠: シェイプを「グループ化」すると、階層構造が変わり、以前のGUIDが参照できなくなることがあります。`GroupItems` を再帰的にスキャンする設計にするのがプロの流儀です。
- 名前の衝突: `Shape.Name` はユーザーが手動で変更できます。必ず `Tags` に依存してください。
- パフォーマンス: 数百枚のスライドがある場合、全シェイプのスキャンは重くなります。必要な時だけチェックするように設計しましょう。
—
まとめ:技術は「守るため」に使う
今回紹介した手法は、単なるVBAのテクニックではありません。「ドキュメントの整合性を担保する」という設計思想です。
1. タグ(Tags)を使い、オブジェクトの真贋を見極める。
2. 検証ロジックを保存操作の前に必ず通す。
3. 例外処理を徹底し、不正があれば即座に止める。
この3つを守るだけで、あなたの作るプレゼン資料は、ただの「スライド」から「要塞」へと進化します。
「VBAが難しい」と感じる時は、コードではなく「何を監視したいか」を紙に書いてみてください。それができれば、コードは後から必ずついてきます。また現場でお会いしましょう!
