【入門編】【パフォーマンス改善】SwApp.SetUserPreferenceToggleで画面描画を停止してマクロを爆速化 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAを掌握する:画面描画を止めてマクロを「爆速化」する極意

こんにちは。SolidWorksの自動化の世界へようこそ。

「マクロを動かすと、画面がチラチラして時間がかかる」
「数千個の部品を処理している間に、コーヒーを一杯飲めてしまう」

もしあなたがそんな悩みを抱えているなら、それはSolidWorksのAPIに対する「配慮」が足りない証拠です。SolidWorksは、あなたがプログラムで一行命令を下すたびに、律儀に画面を再描画し、フィーチャーを再計算し、メモリを整理しようとします。

マクロの実行中、この「律儀さ」は最大の足枷です。今日は、SolidWorksという巨大なエンジンを効率的に制御し、あなたのマクロを異次元の速度へ引き上げる「画面描画停止」の奥義を伝授しましょう。

—

1. なぜ、画面の再描画が「悪」なのか?

SolidWorksのGUIは、あなたが操作する「人間」のために存在しています。しかし、マクロは人間ではなくプログラムです。

1. 描画コスト: マクロが一つ処理を終えるたびに、SolidWorksは「画面を更新しなきゃ!」と頑張ります。これには膨大なGPUリソースが消費されます。
2. イベントのオーバーヘッド: 画面が変わるたびに、関連するイベントが発火し、不必要なチェック処理が走ります。

私たちがやるべきことは単純です。「マクロが作業している間は、画面をフリーズさせ、全ての計算リソースを処理に集中させる」のです。

—

2. 爆速化の鍵:`SetUserPreferenceToggle`

このテクニックの核となるのが、`SldWorks`オブジェクトが持つ`SetUserPreferenceToggle`メソッドです。

魔法のコード

以下の設定をマクロの冒頭に配置するだけで、世界が変わります。

‘ SolidWorksアプリケーションオブジェクトの取得
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks

‘ — 爆速化の呪文 —
‘ swUserPreferenceToggle_e.swViewDisplayMode_ViewDisplayShadows などの設定も重要ですが、
‘ 以下の2つが最も強力です。

‘ 1. 画面の再描画を停止 (swViewDisplayMode_ViewDisplayShadows よりも広範囲に効く)
swApp.SetUserPreferenceToggle swViewDisplayMode_ViewDisplayShadows, False ‘ 影をオフ
swApp.Frame.KeepAlive = False ‘ フレームの更新を抑止

‘ 2. 最も重要な「再描画の完全停止」
swApp.Visible = True ‘ アプリは見えている状態にする
swApp.UserControl = False ‘ ユーザー操作を一時的に遮断

…と言いたいところですが、実務で最も安定して効果を発揮するのは、`swModelDoc2`に対する再描画の抑制です。

実践的な爆速テンプレート

Sub FastMacroTemplate()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If swModel Is Nothing Then Exit Sub

‘ — 【重要】処理開始前のセットアップ —
‘ 画面の再描画を完全に無効化する
swApp.SetUserPreferenceToggle swViewDisplayMode_ViewDisplayShadows, False
swModel.EnableGraphicsUpdate = False ‘ ★これが最強のコマンドです

‘ エラーハンドリングを組み込む(重要!)
On Error GoTo Cleanup

‘ — ここに重い処理を書く —
‘ 例: 大量のフィーチャー操作、アセンブリの構成部品入れ替えなど

‘ ————————-

Cleanup:
‘ — 【重要】処理終了後の復帰 —
‘ これを忘れるとSolidWorksが壊れたように見えるので注意
swModel.EnableGraphicsUpdate = True
swModel.GraphicsRedraw2 ‘ 最後に一度だけ画面を更新

If Err.Number <> 0 Then
MsgBox “エラーが発生しました: ” & Err.Description
End If
End Sub

—

3. このテクニックで陥りやすい「罠」

伝説的なエンジニアほど、「終了処理」に命をかけます。

  • 復帰を忘れる: `EnableGraphicsUpdate = False` にしたままマクロが終了すると、ユーザーは「SolidWorksがフリーズした」と勘違いします。必ず `On Error GoTo` を使い、どんなエラーが起きても最後に `True` に戻るようにしてください。
  • 途中確認ができない: 画面が止まるので、デバッグが難しくなります。開発中はコメントアウトして、リリース直前に有効化するのがプロの作法です。

—

4. まとめ:あなたのマクロはもっと速くなれる

今回紹介した `EnableGraphicsUpdate = False` は、SolidWorks APIを使いこなす上での「作法」です。

1. 冒頭で画面描画をOFFにする。
2. 重い処理を回す。
3. 最後に必ずONに戻し、`GraphicsRedraw2`で画面をリフレッシュする。

これだけで、数分の待ち時間が数秒に短縮されることも珍しくありません。

マクロはただ動けばいいものではありません。「コンピュータに優しく、ユーザーを待たせない」。これこそが、一流の自動化エンジニアの誇りです。

次は、さらなる高みを目指して、「APIのコールバック処理」や「イベントハンドラの活用」について深く掘り下げていきましょう。あなたのコーディングライフが、より洗練されたものになることを願っています。

それでは、また次回の講義でお会いしましょう。

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