【入門編】【プロフェッショナル】WithEventsでApplicationのPresentationClose直前イベントを監視し、特定の「社外秘」タグを持つプレゼンテーションが閉じられる前に、自動的に一時ファイルを暗号化してローカルに退避させるセキュリティシステム – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは。現場で血肉となった「生きたVBA」の世界へようこそ。
マクロの記録を卒業し、PowerPointという巨大なアプリケーションの「心臓部」に直接触れようとしているあなたを、心から歓迎します。

今日は、単なる自動化を超えた、「セキュリティをコードで担保する」というエンジニアの神髄に触れていきましょう。

—

1. なぜ「イベント監視」が必要なのか?

PowerPointは通常、ユーザーが閉じるボタンを押せば、何も聞かずにメモリから消滅します。しかし、企業戦士たる我々には「閉じられる瞬間にこそ、やるべき仕事」があるはずです。

「社外秘」タグを持つ機密データが、不意に閉じられる瞬間に消えてしまう……そんなリスクを回避するため、`Application`オブジェクトのイベントを監視し、「閉じる」という挙動をプログラムで制御(フック)します。

—

2. 準備:クラスモジュールの魔法

標準モジュールだけでは、アプリケーション全体のイベントは拾えません。ここで登場するのが「クラスモジュール」です。

手順

1. VBE(Alt + F11)で「挿入」>「クラスモジュール」を選択。
2. 名前を `AppEventClass` に変更。
3. 以下のコードを貼り付けます。

‘ クラスモジュール: AppEventClass
‘ WithEventsを使うことで、Applicationレベルのイベントを検知可能にする
Public WithEvents App As Application

Private Sub App_PresentationBeforeClose(ByVal Pres As Presentation, Cancel As Boolean)
‘ プレゼンテーションが閉じられる直前に発火するイベント

‘ “Confidential” というタグを検索
Dim tagValue As String
tagValue = Pres.Tags(“SecurityLevel”)

If tagValue = “Secret” Then
‘ 警告の表示
MsgBox “機密ファイルです。暗号化バックアップを実行します。”, vbExclamation

‘ ここで本来は暗号化や退避処理を行う
‘ 実際にはFileSystemObjectなどを使用してファイルをコピー・暗号化する
Call ExportEncryptedBackup(Pres)
End If
End Sub

Private Sub ExportEncryptedBackup(Pres As Presentation)
‘ 簡易的な退避処理のデモ
Dim backupPath As String
backupPath = Environ(“USERPROFILE”) & “\Desktop\Backup_” & Pres.Name

‘ 保存処理
Pres.SaveCopyAs backupPath
Debug.Print “バックアップ完了: ” & backupPath
End Sub

—

3. 実行のトリガー:起動時に仕込む

クラスを作っただけでは動きません。PowerPointが起動した瞬間に「監視役」をスタンバイさせる必要があります。標準モジュールで以下を定義します。

‘ 標準モジュール: Module1
Dim myAppEvents As New AppEventClass

‘ PowerPoint起動時に自動実行されるマクロ(Auto_Open等を利用)
Sub InitializeApp()
Set myAppEvents.App = Application
MsgBox “セキュリティ監視システムが稼働しました。”
End Sub

※ 本格運用では `Auto_Open` やアドインの `AddIns.Add` を利用しますが、まずは手動で `InitializeApp` を実行して、監視が始まる感覚を掴んでください。

—

4. プロの視点:陥りやすい罠と対策

① 「メモリの寿命」を意識せよ

`myAppEvents` 変数が標準モジュール内で `Public` や `Static` で宣言されていないと、PowerPointのガベージコレクションによって変数が破棄され、イベントが突然反応しなくなります。 「なぜか動かなくなる」という現象の多くはこれです。

② Tagsの利便性と脆さ

`Pres.Tags` は非常に便利ですが、あくまで「ファイル内に埋め込まれたメタデータ」です。もしユーザーが「名前を付けて保存」で別名保存した場合、タグが引き継がれないこともあります。要件に応じて `DocumentProperties` を併用するなどの多段構えが必要です。

③ Cancel引数の重要性

`PresentationBeforeClose` の `Cancel` 引数を `True` にすると、ファイルを閉じる動作そのものをキャンセルできます。「バックアップが完了するまで閉じさせない」といった強固なセキュリティを組むことも可能です。

—

最後に:コードを書くことは「守ること」

今回紹介したコードは、単なるプログラミングのテクニックではありません。「操作者のうっかり」をシステムでカバーする、エンジニアの優しさです。

まずは、自分の環境で `Pres.Tags.Add “SecurityLevel”, “Secret”` を実行して、この監視システムを実験してみてください。自分の書いたコードがPowerPointの挙動を支配し、安全を守る――その瞬間、あなたはマクロの記録者から、「自動化エンジニア」へと進化しています。

ここをクリアしたあなたは、もうVBAの初心者ではありません。次はAPI連携か、それともXML操作によるスライド構造の解析か。あなたの広大な自動化の旅を、心から応援しています。

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