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のコールバック処理」や「イベントハンドラの活用」について深く掘り下げていきましょう。あなたのコーディングライフが、より洗練されたものになることを願っています。
それでは、また次回の講義でお会いしましょう。
