【入門編】【レガシー保守】古いSolidWorks 2011時代の古いAPIメソッドを最新のSolidWorks 2024対応コードへ完全リファクタリングする手順 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAの「レガシーの呪縛」を解く:2011年仕様から2024年標準への完全移行ガイド

こんにちは。設計自動化の世界へようこそ。
長年SolidWorksと歩んできたベテランの皆さん、あるいは「動くけれど、なぜか遅い・不安定な」古いマクロを抱えて頭を抱えている皆さん。

SolidWorks 2011時代のマクロは、当時のハードウェア制約とAPI仕様の中で書かれた「当時の最適解」でした。しかし、現代のSolidWorks 2024でそれらを走らせるのは、まるで最新のF1マシンに古い軽自動車のエンジンを積むようなものです。

今日は、「動けばいい」コードから「堅牢で美しい」コードへ。レガシーコードを現代へと蘇らせるための極意を伝授します。

1. なぜ「古いコード」は現代で躓くのか?

2011年当時のコードでよく見かけるのが、「型指定の甘さ」「再構築(Rebuild)のタイミングの浪費」です。

  • Object型の乱用: `Dim swPart As Object` と書くと、VBAは実行時に毎回「これは何のオブジェクトだ?」と確認しにいきます(遅延バインディング)。これが積み重なると、大規模アセンブリでは数秒のロスになります。
  • 非効率な再構築: フィーチャを追加するたびに `swApp.ActiveDoc.EditRebuild3` を呼んでいませんか? これが「マクロが遅い」最大の原因です。

2. 現代版リファクタリングの鉄則

① 型定義の適正化(Early Binding)

まずは、`Object` を卒業しましょう。SolidWorksのAPIには適切な型が存在します。これだけでIDEのインテリセンスが効き、実行速度も向上します。

② モデルの制御(ModelDoc2 vs PartDoc)

最新のAPIでは、`ModelDoc2`インターフェースをベースにしつつ、必要に応じて`PartDoc`や`AssemblyDoc`へキャストする意識が重要です。

3. 実践:レガシーコードを2024仕様へ書き換える

例として、「パーツを作成し、押し出しフィーチャを作成する」という単純な処理を、2011年スタイルから2024年モダンへ書き換えてみましょう。

【Before:2011年スタイルの悩み】

‘ 悪い例:型がObjectで、メソッド呼び出しが冗長
Dim swApp As Object
Dim swModel As Object
Set swApp = CreateObject(“SldWorks.Application”)
Set swModel = swApp.ActiveDoc
‘ …ここで頻繁に再構築をかけてしまう

【After:2024年モダン・リファクタリング】

Option Explicit

‘ 早期バインディング(参照設定でSolidWorks Type Libraryを選択しておくこと)
Public Sub CreateModernExtrude()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swFeatMgr As SldWorks.FeatureManager

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

‘ 型を明示することで処理速度が劇的に向上する
If swModel Is Nothing Then Exit Sub
If swModel.GetType <> swDocPART Then Exit Sub

Set swPart = swModel
Set swFeatMgr = swModel.FeatureManager

‘ 自動再構築を一時的にOFFにする(パフォーマンスの秘訣)
swModel.FeatureManager.EnableFeatureTree = False

‘ — ジオメトリ生成処理 —
‘ 古いAPIメソッドは、最新のオーバーロード(引数が多い版)を確認し、
‘ 不要なフラグを適切に設定する

‘ 例:押し出しフィーチャ作成
swFeatMgr.FeatureExtrusion2 0.05, 0, 0, 0, 0, 0, 0, False, False, False, False, 0, 0, False, False, False, False, True, True, True, 0, 0, False

‘ 最後に一度だけ再構築する
swModel.FeatureManager.EnableFeatureTree = True
swModel.EditRebuild3
End Sub

4. 知っておくべき「陥りやすい罠」

1. `FeatureManager`の進化: 2011年当時はフィーチャ作成に多くの引数を必要としましたが、現在は `FeatureManager` クラスのメソッドが整理されています。特に「`FeatureExtrusion2`」ではなく「`FeatureExtrusion3`」以降の新しいメソッドがないか、APIヘルプを毎回確認する癖をつけてください。
2. `Option Explicit`の徹底: これがないコードは「時限爆弾」です。変数の型定義忘れは、予期せぬバグの温床になります。
3. エラーハンドリング: `On Error Resume Next` で逃げるのは禁止です。`Err.Number` をチェックし、どの段階で失敗したかをログに出す設計にしましょう。

最後に:先輩からのアドバイス

マクロを書くことは、SolidWorksという巨大なシステムの「頭の中」を操作することです。
最初から完璧に書こうと思わず、まずは「型を明示する」「再構築回数を減らす」という2点から始めてみてください。

これだけで、あなたの書くマクロは数段上の安定感を手に入れます。
もし詰まったら、いつでもAPIヘルプ(Help.solidworks.com)という「最強の辞書」を開いてください。そこには、すべての答えが載っています。

この極限の知見が、あなたの設計ライフを少しでも楽に、そして創造的にすることを願っています。頑張ってくださいね!

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