【入門編】【パフォーマンス改善】マクロ実行中のSwApp.VisibleやFeatureManagerの画面更新一時停止による劇的な速度向上 – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks VBA高速化の極意】そのマクロ、描画を止めるだけで「数分」が「数秒」に変わる

こんにちは。SolidWorks APIの深淵へようこそ。

「マクロを実行すると、画面がチカチカして、終わるまでコーヒーを飲みに行く羽目になる…」
もしあなたがそんな経験をしているなら、それは「SolidWorksの呼吸」を止めていないからかもしれません。

多くの初学者が陥る罠、それは「人間が操作するようにコードを書くこと」です。しかし、APIの世界では、画面の更新やフィーチャの再構築は、プログラムにとって最大のボトルネックです。今回は、マクロの実行時間を劇的に短縮する「描画抑制(Freeze)」の神髄を伝授します。

1. なぜマクロは遅いのか?「画面の再描画」という重荷

SolidWorksでフィーチャを追加するたび、背後では以下のことが行われています。
1. ジオメトリ計算(数学的処理)
2. FeatureManagerツリーの更新(GUI表示)
3. グラフィックの再描画(GPUへの命令)

特に3番目の「グラフィックの再描画」は非常に重い処理です。100個の穴を開けるマクロで、毎回画面を更新していたら、GPUは悲鳴を上げます。私たちは、この「描画」をプログラムが終了するまで一時停止させる必要があります。

2. 劇的改善!高速化の黄金パターン

これさえ知っておけば、あなたのマクロは別次元の速度を手に入れます。ポイントは `ModelDoc2` オブジェクトの `EnableGraphicsUpdate` メソッドです。

実装コードのテンプレート

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

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

‘ — 高速化の魔術:開始 —
‘ 画面更新を一時停止して、再構築を最小限にする
swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swViewDisplayRealView, False ‘ 必要に応じてRealViewも切る
swModel.EnableGraphicsUpdate = False ‘ 描画を強制停止
swModel.FeatureManager.EnableFeatureTree = False ‘ ツリー更新を停止

‘ —————————————————-
‘ ここに重いフィーチャ作成処理を記述
‘ 例: 100個の押し出しなど
‘ —————————————————-

‘ — 高速化の魔術:終了 —
‘ 処理が終わったら必ず元に戻す(これ重要!)
swModel.EnableGraphicsUpdate = True
swModel.FeatureManager.EnableFeatureTree = True

‘ 最後に一度だけ再構築して画面を更新
swModel.EditRebuild3

MsgBox “処理が完了しました!”, vbInformation
End Sub

3. なぜこれで速くなるのか?(プロの視点)

このコードの鍵は、「SolidWorksをバックグラウンドモードに追い込む」という点にあります。

  • `EnableGraphicsUpdate = False`: GPUに送る描画命令を遮断します。これにより、マクロ実行中の画面のチラつきが消え、計算だけにリソースを集中させることができます。
  • `EnableFeatureTree = False`: フィーチャツリーのスクロールや更新処理を停止します。数千個のフィーチャがあるアセンブリでは、この一行だけで数分単位の短縮が可能です。
  • `EditRebuild3`: すべての計算が終わった後、最後に一回だけ「完成図」を描画します。これでユーザーは結果だけを瞬時に目にすることになります。

4. 陥りやすいエラーと回避策

ここで初心者がよくやる失敗が一つあります。それは「エラーハンドリングを忘れること」です。

もし `EnableGraphicsUpdate = False` を実行したあとにコードがエラーで止まったらどうなるでしょう? SolidWorksは「描画しないモード」のまま固まってしまい、ユーザーは「ソフトがフリーズした!」とパニックになります。

必ず `On Error GoTo` を活用してください。

Sub SafeMacro()
On Error GoTo ErrorHandler

‘ 処理開始
swModel.EnableGraphicsUpdate = False

‘ (中略)

‘ 正常終了時
swModel.EnableGraphicsUpdate = True
Exit Sub

ErrorHandler:
‘ エラーが起きても必ず描画を戻す!
swModel.EnableGraphicsUpdate = True
MsgBox “エラーが発生しました。修正してください。”
End Sub

最後に:エンジニアとしての一歩先へ

「マクロの記録」で生成されたコードは、あくまで「人間の操作のトレース」です。しかし、今のあなたなら、SolidWorksが裏側でどう動いているのかを制御できるようになりました。

  • 描画を止める
  • 再構築のタイミングを管理する
  • エラー発生時の復旧処理を組み込む

これらは、単なる自動化を超えた「システム設計」の第一歩です。ここをクリアすれば、あなたはもう初学者ではありません。自信を持って、より高度なAPIの世界へ飛び込んでください。

また次のステップで、お会いしましょう!

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