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

スポンサーリンク

こんにちは!SolidWorksの自動化の世界へようこそ。
長年現場で使われてきたマクロが、SolidWorksのバージョンアップを機に突然動かなくなって頭を抱えた経験はありませんか?

「昔の先輩が残してくれたマクロだけど、どこが悪いのか分からない…」
「『マクロの記録』で作ったコードをそのまま動かしたらエラーが出る…」

大丈夫、安心してください。今回は、SolidWorks 2012以前の古いAPI(レガシーコード)を、最新のSolidWorks 2024でも完璧に、かつ安全に動作するようリファクタリングする極意を伝授します。

ここをクリアすれば、古い資産に振り回されることはもうありません。SolidWorks VBAの本質を掴んで、スマートな自動化ライフを手に入れましょう!

1. なぜ古いマクロは最新のSolidWorksで動かなくなるのか?

SolidWorksは、毎年大きな進化を遂げているハイエンド3D CADです。それに伴い、内部のAPI(アプリケーション・プログラミング・インターフェース)もより効率的で安全な構造へとアップデートされています。

2012年以前のコードによく見られる「動かなくなる原因」は主に以下の3つです。

1. 非推奨メソッド(Obsolete Methods)の廃止
古いバージョンで使われていた処理方法が、数世代を経て完全に削除されたケース。
2. 型(Type)の厳密化と引数の変更
渡すべきデータの種類や数が変わり、エラーを起こすケース。
3. ドキュメント・セレクション管理の仕様変更
モデルの選択方法やアクティブなドキュメントの取得方法がスマート化されたことによる影響。

特に「パーツの新規作成やフィーチャ生成」の領域は、APIの歴史が長いため、レガシーな記述が残りやすい魔窟となっています。

2. レガシーコードを発見・駆逐する3つのステップ

古いコードを最新版に対応させるためのアプローチは、以下の3ステップで進めます。

  • Step 1: 参照設定と変数の型の確認(環境の土台を整える)
  • Step 2: 非推奨メソッドの特定と置換(新仕様のAPIへ書き換える)
  • Step 3: エラーハンドリングと安全なオブジェクト解放(プロの技を入れる)

百聞は一見にしかず。実際のコードを見ながら、新旧の比較と書き換えの作法を学んでいきましょう。

3. 実践!レガシーコードのリファクタリング

ここでは、「古いパーツテンプレートを使って新規パーツを作成し、そこにボス・押し出しフィーチャを作る」という、よくある処理を例にします。

【ビフォー】SolidWorks 2012以前のレガシーコード

以下のコードは、昔の「マクロの記録」や古い技術書によく見られた書き方です。あちこちに地雷(非推奨な書き方)が埋まっています。

‘ =================================================================
‘ 【レガシーコード】SolidWorks 2012以前のスタイル(※動かない可能性が高い)
‘ =================================================================
Sub LegacyCreatePart()
Dim swApp As Object
Dim swPart As Object
Dim boolstatus As Boolean

‘ Object型でアプリケーションをバインド(バッドプラクティス)
Set swApp = CreateObject(“SldWorks.Application”)

‘ 古い新規作成メソッド(テンプレートパスの指定が曖昧)
Set swPart = swApp.NewDocument(“C:\ProgramData\SolidWorks\SolidWorks 2012\templates\part.prt”, 0, 0, 0)

‘ 古い選択メソッドで平面を選ぶ
boolstatus = swPart.Extension.SelectByID2(“正面”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0)

‘ 押し出しフィーチャの作成(古い引数の構成)
‘ ※実際の古いコードではここに複雑で巨大な引数の羅列がありました

MsgBox “パーツを作りました!(古い書き方)”
End Sub

このコードのヤバいポイント

  • `Dim swApp As Object` のように遅延バインディング(Late Binding)や曖昧な型定義に頼っているため、インテリセンス(入力補助)が効かず、エラーの温床になります。
  • `NewDocument` の引数構造が古く、現在の強固なテンプレート管理仕様と噛み合いません。

【アフター】SolidWorks 2024対応のモダンコード

それでは、これを現代のSolidWorks API仕様に合わせて完全にリファクタリングしたコードをお見せします。

‘ =================================================================
‘ 【モダンコード】SolidWorks 2024 完全対応版
‘ =================================================================
Sub ModernCreatePart()
‘ 1. 適切な型を宣言(早期バインディングによるパフォーマンス向上)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim templatePath As String
Dim errors As Long
Dim warnings As Long

‘ アプリケーションのインスタンス取得
Set swApp = Application.SldWorks
If swApp Is Nothing Then
MsgBox “SolidWorksが起動していません。”, vbCritical
Exit Sub
End If

‘ 2. ユーザーの標準テンプレートパスを動的に取得(バージョン依存を排除!)
templatePath = swApp.GetUserPreferenceStringValue(swUserPreferenceStringValue_e.swDefaultTemplatePart)

If templatePath = “” Then
‘ 万が一取得できない場合のデフォルトフォールバック
templatePath = “C:\ProgramData\SolidWorks\SolidWorks 2024\templates\パーフェクトパーツ.prt” ‘ 環境に合わせて変更
End If

‘ 3. 最新の安全なドキュメント作成メソッドを使用
‘ NewDocument ではなく NewDocument2 または 現代の仕様に合わせた引数指定
Set swModel = swApp.NewDocument(templatePath, swDwgPaperSizes_e.swDwgPaperA4size, 0#, 0#)

If swModel Is Nothing Then
MsgBox “パーツドキュメントの作成に失敗しました。”, vbCritical
Exit Sub
End If

‘ 4. フィーチャ操作の近代化(例:スケッチ平面の確実な選択とフィーチャマネージャの活用)
Set swFeatMgr = swModel.FeatureManager

‘ 現代の SelectByID2 は失敗時のハンドリングを必ず入れる
Dim selectSuccess As Boolean
selectSuccess = swModel.Extension.SelectByID2(“正面”, “PLANE”, 0#, 0#, 0#, False, 0, Nothing, 0)

If selectSuccess Then
‘ ここに最新のフィーチャ生成処理を記述(例:ボス押し出しなど)
‘ swFeatMgr.FeatureExtrusion2 … など
End If

MsgBox “SolidWorks 2024 環境でのパーツ作成が完了しました!”, vbInformation

‘ 5. メモリのクリーンアップ(プロの作法)
Set swFeatMgr = Nothing
Set swModel = Nothing
Set swApp = Nothing
End Sub

4. リファクタリングの重要ポイント解説

ここで、コードを書き換える際に意識した「プロの知見」をいくつか解説します。

① `Object` 型の追放と「参照設定」

古いコードによくある `Dim swApp As Object` は、実行速度が遅くなるだけでなく、コード補完(インテリセンス)が効かないため開発効率が最悪になります。
VBAのVBE画面から [ツール] > [参照設定] を開き、以下にチェックが入っていることを必ず確認してください。

  • SldWorks 20x.x Type Library
  • SolidWorks 20x.x Constants Type Library

これにより、`SldWorks.ModelDoc2` のような厳密な型が使えるようになり、コードの信頼性が劇的に跳ね上がります。

② 固定パスの排除(`GetUserPreferenceStringValue` の活用)

レガシーコードの最大の悪習は、`C:\ProgramData\SolidWorks 2012\…` のようにハードコーディング(直書き)されたファイルパスです。PCの環境が変わったり、バージョンが上がったりした瞬間に必ず破綻します。
最新コードでは、SolidWorks自身から「現在設定されている標準テンプレートのパス」を動的に取得する仕組みに置き換えています。これがメンテナンスフリーなマクロを作る最大の秘訣です。

③ オブジェクトの適切な解放

VBAでは、処理の終わりに `Set swModel = Nothing` のようにオブジェクト変数を解放してメモリをクリーンにすることが、SolidWorksをフリーズさせないための重要な防衛策です。特に大規模なアセンブリや連続処理を行うマクロでは、この一手間で安定性が別物になります。

まとめ:レガシー脱却は怖くない!

今回は、レガシーなSolidWorks VBAコードを最新の2024環境へ適応させるためのリファクタリング手法を解説しました。

  • 古い `Object` 型を廃し、適切な型と参照設定を行う
  • バージョンや環境に依存するハードコーディングを廃止する
  • 最新のAPI仕様(メソッドや引数)に置き換える

ここをクリアすれば、SolidWorks VBAの基本はもうバッチリです!古いマクロの呪縛から解放されて、サクサク動く快適な自動化環境を自分の手で構築していきましょう。

あなたの業務効率化が最高のものになるよう、応援しています!

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