【入門編】【プロフェッショナル】Application.WindowSelectionChangeイベントによるリアルタイム校正:選択されたTextRangeの文字数や禁則処理を監視しステータスバーで警告するアシスタント – PowerPoint VBA解析バイブル

スポンサーリンク

PowerPoint VBAで「リアルタイム校正」を実装する:あなたのスライド作成をAIのように支援する極意

こんにちは。現場で「動くこと」以上に「美しく、かつ壊れない自動化」を追求しているエンジニアです。

皆さんは、PowerPointで資料を作っている最中に「あ、また禁則文字を使ってしまった」「文字数が長すぎて枠からはみ出した」といった経験はありませんか?

今回は、ただの「マクロ」を超えて、あなたの指先一つひとつの動きを監視し、その場でアドバイスをくれる「リアルタイム校正アシスタント」をVBAで構築します。これをマスターすれば、あなたはPowerPoint VBAの「イベント駆動」という、プロの扉を叩いたことになります。

1. なぜ「イベント駆動」なのか?

マクロの記録から脱却する第一歩は、「ボタンを押して実行する」という待ちの姿勢から、「PCが何をしているかを監視する」という攻めの姿勢に変わることです。

今回使う `Application.WindowSelectionChange` イベントは、「ユーザーが何かを選択した瞬間」に自動的に発火するトリガーです。これを使うことで、ユーザーがテキストボックスをクリックした瞬間、その中身を裏側でチェックし、ステータスバーという「静かな通知領域」に結果を出す。これがプロの隠し味です。

2. 実装の舞台:クラスモジュールという「守護者」

PowerPointのイベントを監視するには、標準モジュールではなく「クラスモジュール」を使う必要があります。なぜなら、PowerPoint起動中ずっと「監視役」として常駐させる必要があるからです。

手順

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

‘ — クラスモジュール: AppEventClass —
‘ PowerPointのアプリケーションイベントを監視する心臓部
Public WithEvents App As Application

Private Sub App_WindowSelectionChange(ByVal Sel As Selection)
‘ 選択範囲が変わるたびに呼び出される魔法のメソッド

‘ テキストを選択しているか判定
If Sel.Type = ppSelectionText Then
Dim txtRange As TextRange
Set txtRange = Sel.TextRange

‘ 文字数をチェック(例:50文字以内か)
If Len(txtRange.Text) > 50 Then
‘ ステータスバーへ警告を飛ばす(ユーザーの邪魔にならない配慮)
Application.StatusBar = “【警告】文字数が多すぎます!50文字以内に収めてください。”
Else
‘ 正常時はクリア
Application.StatusBar = “執筆中…(文字数OK)”
End If
Else
Application.StatusBar = “準備完了”
End If
End Sub

3. 監視を「始動」させる儀式

クラスを作っただけでは、PowerPointは「誰が監視しているのか」を知りません。標準モジュールに「監視開始」の命令を書きましょう。

‘ — 標準モジュール: Module1 —
Dim myAppEvent As AppEventClass

Sub StartMonitoring()
‘ 監視役をインスタンス化
Set myAppEvent = New AppEventClass
‘ アプリケーション本体と紐付け
Set myAppEvent.App = Application
MsgBox “リアルタイム校正を開始しました!”
End Sub

これを実行した瞬間、あなたのPowerPointは「校正アシスタント」に生まれ変わります。

4. プロのエンジニアが教える「陥りやすい罠」

このコードを書いて満足してはいけません。現場で生き残るための「注意点」を伝授します。

  • 変数の生存期間(スコープ):

上記の `myAppEvent` をプロシージャ内で宣言すると、マクロが終わった瞬間に監視が止まります。必ずモジュールの冒頭で `Dim` してください。

  • エラーの温床:

`Sel.TextRange` にアクセスする際、図形(Shape)を選択している場合など、テキストが含まれていないとエラーになります。必ず `If Sel.Type = ppSelectionText` で型を判定するガード節(門番)を設けてください。

  • パフォーマンスへの配慮:

`WindowSelectionChange` は、マウスを動かすたびに発火します。あまりに重い処理をここに入れるとPowerPointがカクつきます。警告を出すなどの「軽量な処理」に留めるのが美学です。

最後に:ここをクリアすれば、あなたはもう中級者

今回の実装、いかがでしたか?「イベントを制御する」という感覚は、Excel VBAやAccess VBAでも共通する、エンジニアリングの核心部分です。

もし「禁則処理を自動化したい」という要望があれば、`InStr` 関数を使って特定のNGワードが含まれているかチェックするロジックを `App_WindowSelectionChange` 内に追加するだけで完成します。

あなたの業務効率を劇的に変えるのは、こうした小さな「自動化のスパイス」です。ぜひ、自分だけの校正ルールを組み込んで、最強の執筆環境を作り上げてください!

何か詰まったら、いつでも聞きに来てくださいね。応援しています。

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