【入門編】【数式・グローバル変数】ModelDocExtension.AddEquationでパーツ内の数式を動的制御する – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAで「設計の心臓部」を操る:`AddEquation`による数式制御の極意

こんにちは。SolidWorksの設計自動化の世界へようこそ。

「マクロの記録」ボタンを押して、生成されたコードの羅列に頭を抱えたことはありませんか?実は、それこそが脱・初心者への第一歩です。今日は、SolidWorks設計において最も強力かつ、最も扱いが繊細な「数式(Equation)」の動的制御について、現場の知見を詰め込んで解説します。

モデルの寸法を一つひとつプログラムでいじるのは、もうやめましょう。数式を支配する者が、最強のパラメトリック設計を制するのです。

1. なぜ「AddEquation」なのか?

もし、あなたが100種類のサイズのボルトを自動生成したいとします。その際、個々の寸法に直接数値を代入すると、あとで寸法の一部を変更したくなったとき、コードを全修正しなければなりません。

しかし、数式(グローバル変数)を介在させれば、話は別です。
「外径 = 10mm」「長さ = 50mm」という数式をモデル内に刻み込み、VBAからはその「数式の内容」だけを書き換える。そうすれば、モデルは自動的に再構築(Rebuild)され、設計変更に強い「生きているパーツ」が完成します。

2. 数式操作の基本アーキテクチャ

SolidWorks APIにおいて、数式を操作するのは `ModelDocExtension` オブジェクトの役割です。

核心となるメソッド:`AddEquation`

‘ 構文
Set swEqMgr = swModel.GetEquationMgr
swEqMgr.Add2(インデックス, 数式文字列, 解決するかどうか)

ここで重要なのは、「数式は文字列として渡す」という点です。
例えば、「”D1@Sketch1″ = “Length” 0.5」といった文字列をVBA上で組み立てることになります。

3. 実践:VBAで数式を制御するコード例

以下は、パーツ内のグローバル変数を動的に定義・更新する実用的なコードです。まずはこれをコピペして、自分の環境で動かしてみてください。

Sub ManageGlobalVariables()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swEqMgr As SldWorks.EquationMgr
Dim status As Long

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

‘ 数式マネージャを取得
Set swEqMgr = swModel.GetEquationMgr

‘ 1. 数式の文字列を定義(”変数名” = 値)
‘ 注意: 単位系はSolidWorksの設定に依存します
Dim myEquation As String
myEquation = “””TotalLength”” = 150mm”

‘ 2. 数式を追加(または既存のものを更新)
‘ Add2メソッドは、インデックスに -1 を渡すと末尾に追加されます
status = swEqMgr.Add2(-1, myEquation, False)

‘ 3. モデルの再構築(これが重要!)
swModel.ForceRebuild3 False

MsgBox “数式が追加されました。再構築完了です。”
End Sub

4. 現場のエンジニアだけが知っている「3つの罠」

このコードを書き始めると、必ずと言っていいほど以下の壁にぶつかります。これを回避できるかどうかが、プロの分かれ道です。

① インデックスの罠

`Add2`メソッドの第一引数(インデックス)に特定の数字を指定すると、既存の数式を上書きしてしまいます。基本は `-1` を使い、最後尾に追加するのが安全です。特定の数式を修正したい場合は、`swEqMgr.Equation(i)` で中身を確認し、文字列を特定してから `SetEquation` メソッドを使うのが正攻法です。

② 単位系の罠

`”150mm”` と書くとき、モデルの単位がインチ設定だと意図しない挙動をすることがあります。APIで数式を入れる際は、可能な限り単位を明示的に文字列に含めるか、`swModel.Extension.GetUserPreferenceDouble` 等で単位設定を確認する習慣をつけましょう。

③ 再構築のタイミング(Rebuild)

`AddEquation` を実行しただけでは、モデルのジオメトリは変わりません。必ず `swModel.ForceRebuild3` を呼び出してください。この「再構築」の重みを知っているかどうかが、大規模アセンブリを扱う際のパフォーマンスに直結します。

まとめ:ここをクリアすれば、あなたはもう「自動化の使い手」

数式の制御をマスターすれば、Excelの表からパラメータを読み込み、数千パターンのバリエーションを数分で生成するような「設計自動化プラットフォーム」の構築が可能になります。

まずは、自分の手元にある簡単なパーツで「グローバル変数」をVBAから触ってみてください。最初はエラーが出るかもしれません。しかし、そのエラーメッセージこそが、SolidWorksという巨大なシステムの構造を理解するための最良の教科書です。

何か不明点があれば、またいつでも聞きに来てくださいね。あなたの自動化の旅を、心から応援しています!

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