【入門編】【レガシー保守】古いSolidWorks 2015以前のObsolete(廃止予定)メソッドを最新のAPI仕様へ一括リファクタリングする手順 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAの「負の遺産」を浄化する:2015以前のObsoleteメソッドを最新仕様へ書き換える極意

こんにちは。現場の最前線で自動化を支え続けるエンジニアです。

長年使い続けてきた「あのマクロ」、ある日突然動かなくなっていませんか? SolidWorksのバージョンアップに伴い、以前は当たり前のように使われていたメソッドが「Obsolete(廃止予定)」となり、静かに姿を消しています。

これは単なるエラーではなく、「旧式の設計思想から、より堅牢で高速な最新APIへの乗り換え時」という合図です。今回は、レガシーコードを現代のスタンダードにアップデートするための「手術手順」を伝授します。

1. なぜ「Obsolete」が発生するのか?

SolidWorksのAPIは、単なる機能追加ではなく、内部のジオメトリエンジンやデータ構造が進化するたびに、より効率的でメモリリークを防ぐ設計へと刷新されています。

古いメソッドを使い続けると、以下のリスクが伴います。

  • パフォーマンス低下: 旧式の検索アルゴリズムは、現代の複雑なパーツモデルには重すぎます。
  • メモリの解放漏れ: 昔のコードはオブジェクトの参照解除が甘いものが多く、長時間の連続処理でSolidWorksごとクラッシュする原因になります。
  • 非推奨の警告: 将来的に、その関数自体が完全に削除され、マクロが一切動かなくなるリスクを抱えます。

2. 実践!レガシーコードの「置換」現場

最もよく遭遇する「古いメソッド」の代表例を、現代風にリファクタリングしてみましょう。

事例:スケッチの作成とフィーチャの押し出し

昔のコードには、`SelectByID` や `SelectByRay` といった、マウス操作を模倣するだけの「セレクション依存」な書き方が多く見られます。これは非常に不安定です。

【Before:不安定なレガシーコード】

‘ 昔はこれで動いた。しかし、画面上の選択状態に依存するため非常に脆い。
Set swSelMgr = swApp.ActiveDoc
swSelMgr.SelectByID “Sketch1”, “SKETCH”, 0, 0, 0
swApp.FeatureManager.FeatureExtrusion2 True, False, False, 0, 0, 0.01, 0.01, …

【After:堅牢な最新APIへの書き換え】

最新のAPIでは、`IFeature` オブジェクトを直接操作します。セレクションに頼らず、オブジェクトの参照を保持し続けるのがコツです。

‘ 最新の推奨:IModelDoc2 から IFeatureManager を介して生成する
Dim swModel As ModelDoc2
Set swModel = swApp.ActiveDoc

‘ SelectByIDに依存せず、フィーチャそのものを変数に格納する
Dim swFeat As Feature
Set swFeat = swModel.FeatureManager.FeatureExtrusion2( _
True, False, False, 0, 0, 0.01, 0.01, _
False, False, False, False, 0, 0, False, False, False, False, True, True, True)

‘ 成功したか確認する「防御的プログラミング」
If swFeat Is Nothing Then
MsgBox “フィーチャ生成に失敗しました。スケッチの状態を確認してください。”
End If

3. リファクタリングを成功させる「3つの鉄則」

コードを書き換える際、闇雲に修正するのは危険です。以下の手順を守ってください。

1. 「記録」を捨てる:
マクロの記録機能は便利ですが、生成されるコードは「画面上のクリック」を記録するだけです。実際の開発では、`Select`メソッドを極力排除し、IDやオブジェクト参照(`Set swPart = …`)で直接操作する癖をつけましょう。

2. オブジェクトの解放を徹底する:
VBAのメモリ管理は甘えが許されません。使い終わったオブジェクトは必ず `Set swObj = Nothing` で解放してください。

‘ 処理の最後には必ずこれを入れる
Set swFeat = Nothing
Set swModel = Nothing

3. オンラインヘルプを「日本語」以外で引く:
日本語のヘルプは翻訳が古いことがあります。SolidWorks API Helpを英語で確認し、「`Obsolete`」という記載がないか必ずチェックする癖をつけてください。

4. エラーが出たらまず何をすべきか?

「実行時エラー」に遭遇したら、以下の順番で原因を特定しましょう。

1. 参照設定の確認: `Tools` > `References` で「SolidWorks 20XX Type Library」が古いままになっていないか確認してください。
2. 型宣言の精査: `Object` 型で曖昧に定義せず、可能な限り `Feature`, `Sketch`, `Body2` など、具体的な型で定義し直すだけでエラーが消えることが多々あります。
3. API Helpの確認: エラーが発生しているメソッド名で検索し、ページ上部に赤い文字で「Obsolete」と書かれていないか確認してください。そこに必ず「代替メソッド(Replacement)」へのリンクがあります。

最後に:自動化は「設計」である

VBAを単なる「作業の代行」と思わず、「SolidWorksの内部構造を操作する設計行為」だと捉えてみてください。

「ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ」。一度型を覚えれば、どんなに複雑なアセンブリ操作も、あなたの手足のように動かせるようになります。

もしコードが書けなくなったり、壁にぶつかったら、いつでも戻ってきてください。現場の苦労を知る者として、またいつでも導きます。

さあ、あなたのマクロに新しい命を吹き込みましょう!

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