【入門編】【パフォーマンス最適化】”Application.Options”をハック:マクロ実行中のみ自動スペルチェック等の重いオプションを一時停止し、終了後に完全復元する親切設計 – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは!PowerPoint VBAの世界へようこそ。
マクロの記録を卒業し、いざ自分でコードを書き始めると、こんな壁にぶつかったことはありませんか?

「数千枚のスライドを一括処理するマクロを書いたはいいが、ものすごく時間がかかる……」
「処理の途中で、なぜか画面がチラついたり、フリーズしかけたりしてハラハラする……」

実はそれ、あなたのコードの書き方が悪いわけではありません。PowerPointが裏側で「余計なおせっかい」を一生懸命やっているからなんです。

今回は、プロの現場でも必ず使われる「マクロ実行中のみ重い処理を一時停止し、終わったら何食わぬ顔で元の状態に戻す」という、極限のパフォーマンス最適化テクニックを伝授します。ここをクリアすれば、あなたのVBAスキルは一段も二段もレベルアップしますよ!

1. なぜPowerPointのマクロは遅くなるのか?

私たちがVBAで「スライドの文字を一括変換する」「図形を大量に配置する」といった命令を下すとき、PowerPointの心臓部(Application)は、汗水垂らして働いています。

しかし、デフォルトの状態では、PowerPointは以下のような「おせっかいな監視機能」を常に走らせています。

  • バックグラウンドでのスペルチェック(「この単語、綴り間違っていませんか?」と常にテキストを監視)
  • 自動文章校正(文法の間違いをチェック)

人間が手動で作業している時はありがたい機能ですが、一瞬で何百個ものオブジェクトを書き換えるマクロの実行中においては、これらはただの「重荷」でしかありません。VBAが1つの図形を書き換えるたびに、スペルチェック機能が「おっと、今のテキストをチェックしなきゃ!」と割り込んでくるため、処理が猛烈に重くなってしまうのです。

2. 解決策:`Application.Options` をハックせよ!

この問題を解決するのが、`Application.Options` オブジェクトです。
これを使うと、PowerPointの環境設定をプログラムから自由自在に操ることができます。

私たちが目指すアプローチは、以下の3ステップです。

1. 【退避】 ユーザーが現在設定している「スペルチェックのオン/オフ」の状態を、変数に記憶(退避)させておく。
2. 【無効化】 マクロが実行されている間だけ、スペルチェック等の重い機能を強制的にOFFにする。
3. 【復元】 マクロの処理がすべて終わったら、エラーが起きたとしても確実に、手順1で記憶しておいた元の状態に戻す。

この「元の状態に確実に戻す(親切設計)」という配慮が、プロのエンジニアと素人VBAerの決定的な違いです。もしマクロが途中でエラー終了したときにユーザーの設定が勝手に変わっていたら、クレームの元ですからね。

3. 実装コード:そのまま使える「神速テンプレート」

それでは、実際のコードを見てみましょう。
以下のプロシージャは、そのままあなたの開発環境(標準モジュール)にコピペして使えます。

Option Explicit

Sub HighSpeedProcessTemplate()
‘ ==========================================
‘ 変数の宣言
‘ ==========================================
Dim originalCheckSpelling As Boolean
Dim originalCheckGrammar As Boolean

‘ ==========================================
‘ 1. 【退避】現在のユーザー設定を記憶する
‘ ==========================================
On Error GoTo ErrorHandler ‘ 予期せぬエラーでも確実に復元させるための保険

With Application.Options
originalCheckSpelling = .CheckSpelling
originalCheckGrammar = .CheckGrammar

‘ ==========================================
‘ 2. 【無効化】重いオプションを一時停止
‘ ==========================================
.CheckSpelling = False
.CheckGrammar = False
End With

‘ 画面の描画を停止してさらに高速化(おまけのテクニック!)
ActiveWindow.View.GotoSlide 1 ‘ 画面描画の安定化

‘ ==========================================
‘ 【メイン処理】ここに重い処理を記述する
‘ ==========================================
Dim sld As Slide
Dim shp As Shape

For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
‘ 例:何か重い処理(テキストボックスの走査など)
If shp.HasTextFrame Then
If shp.TextFrame.HasText Then
‘ 実際の処理がここに入ります
End If
End If
Next shp
Next sld

‘ 処理が正常に終わった場合のメッセージ(必要に応じて)
MsgBox “高速化処理が完了しました!”, vbInformation

‘ ==========================================
‘ 3. 【復元】設定を元に戻す(正常終了時)
‘ ==========================================
With Application.Options
.CheckSpelling = originalCheckSpelling
.CheckGrammar = originalCheckGrammar
End With

Exit Sub

ErrorHandler:
‘ ==========================================
‘ 【緊急復元】エラー発生時も設定を必ず戻す
‘ ==========================================
With Application.Options
.CheckSpelling = originalCheckSpelling
.CheckGrammar = originalCheckGrammar
End With

MsgBox “エラーが発生しましたが、設定は正常に復元されました。” & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical
End Sub

4. コードの深掘りポイント(ここが重要!)

① `Boolean` 型変数による「記憶」

`Dim originalCheckSpelling As Boolean` という変数を用意し、そこに `Application.Options.CheckSpelling` の現在の状態(`True` または `False`)を代入しています。これにより、ユーザーの環境を一切壊すことなく、一時的な変更が可能になります。

② `On Error GoTo` による「安全ネット」

ここが今回のコードの魂とも言える部分です。もしメイン処理の途中でエラー(例えば、存在しないオブジェクトを参照してしまった等)が起きた場合、プログラムはそこでストップします。
もしエラーハンドリング(保険)を組んでいないと、「スペルチェックがOFFのままになるバグ」が起きてしまい、ユーザーに多大な迷惑をかけることになります。
`ErrorHandler`ラベルを用意し、どのような状況であっても最後に必ず設定が復元される仕組みを作る。これがプロの仕事です。

まとめ

いかがでしたか?
今回は、`Application.Options` をハックしてPowerPointマクロを極限まで高速化しつつ、ユーザーへの配慮も忘れない「親切設計」のテクニックをご紹介しました。

  • 大量のスライドを扱うときは、裏側の「おせっかい機能(スペルチェック等)」を止める。
  • 変更した設定は、エラーが起きようとも絶対に元の状態へ復元する。

この2つを意識するだけで、あなたの書くVBAコードの信頼性は劇的に向上します。

ここをクリアすれば、もうあなたはただの初学者ではありません。実務で頼りにされるVBAエンジニアの第一歩を踏み出していますよ。ぜひ、次の自動化ツール作成から取り入れてみてくださいね!

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