【入門編】【数式・グローバル変数】ModelDocExtension.GetEquationMgrによるパーツ内数式の動的書き換えと再構築 – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks自動化の極意】数式マネージャをVBAで操り、設計の「動的生命体」を創る

こんにちは。設計自動化の世界へようこそ。
「マクロの記録」ボタンを押して、生成されたコードの羅列に頭を抱えた経験はありませんか?

今日お話しするのは、単なる「操作の自動化」ではありません。「設計のロジックそのものをプログラムで書き換える」という、エンジニアとしての視座を一段上げるための技術です。

SolidWorksの「数式マネージャ(Equation Manager)」をVBAで自在に操れば、数千パターンの形状変化を瞬時に生成する「設計エンジン」を構築できます。さあ、伝説の入り口に立ちましょう。

1. なぜ「数式」をVBAで操作するのか?

多くのユーザーは、寸法値を直接VBAで打ち込もうとします。しかし、複雑なアセンブリやパーツでは、寸法同士に依存関係(Aが伸びればBも伸びる)を持たせるのが定石です。

VBAから「数式そのもの」を書き換える手法には、以下の圧倒的な利点があります。

  • 保守性の向上: 寸法を個別に計算する必要がなく、SolidWorksのソルバーに計算を任せられる。
  • 設計意図の保存: 「この値は、この計算式の結果である」という論理がモデルに直結する。
  • 一括制御: グローバル変数を一つ変えるだけで、モデル全体が最適解へ再計算される。

2. 核心技術:EquationMgrオブジェクトへのアクセス

SolidWorks APIにおいて、数式を司るのが`IEquationMgr`インターフェースです。
まずは、モデルの拡張機能(Extension)経由でこのマネージャを呼び出すのが鉄則です。

‘ 必要なオブジェクトの宣言
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swEqMgr As SldWorks.EquationMgr

‘ モデルの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ EquationMgrを取得
Set swEqMgr = swModel.Extension.GetEquationMgr

3. 実践コード:グローバル変数の値を動的に書き換える

ここでは、すでにモデルに存在するグローバル変数(例: `”Length” = 100mm`)の値を、VBAから書き換えるコードを紹介します。

ここで注意! 多くの初心者が「数式全体を書き換える」際に躓くのが、インデックスの取得ミスです。数式マネージャは「0」から始まるリストであることを忘れないでください。

Sub UpdateGlobalVariable()
Dim i As Long
Dim varName As String
Dim newValue As String

‘ 書き換えたい変数名と新しい値
varName = “Length”
newValue = “150” ‘ 単位は自動的にモデルの設定に従います

‘ 数式マネージャを走査
For i = 0 To swEqMgr.GetCount – 1
‘ 変数名が一致するか確認
If InStr(swEqMgr.Equation(i), varName) > 0 Then
‘ 数式を書き換え (例: “Length” = 150)
swEqMgr.Equation(i) = Chr(34) & varName & Chr(34) & ” = ” & newValue

‘ 【重要】再構築(Rebuild)を忘れずに!
swModel.EditRebuild3
MsgBox “更新完了しました!”
Exit Sub
End If
Next i

MsgBox “該当する変数が見つかりませんでした。”
End Sub

4. 陥りやすい罠と「先輩からのアドバイス」

① `EditRebuild3` を忘れるな

コードを実行しても画面が何も変わらない…そんな時は、モデルが「再計算」を待機している状態です。VBAで数式を変えた後は、必ず `swModel.EditRebuild3` を呼び出し、SolidWorksのジオメトリ計算エンジンを叩き起こしてあげてください。

② 文字列の「引用符(”)」問題

VBAの中で数式を定義する場合、変数名をダブルクォーテーションで囲む必要があります。しかし、VBAのコード上でもダブルクォーテーションを使うため、`Chr(34)` を活用するのが最も安全で「賢い」書き方です。これを使うだけで、コードの可読性が格段に上がります。

③ インデックスの変動

数式を追加・削除すると、インデックス番号がずれます。特定の変数を更新したい場合は、インデックスによる指定ではなく、上記のサンプルコードのように「ループで名前を検索して一致させる」手法を強く推奨します。

最後に:自動化の先にあるもの

数式マネージャを掌握することは、SolidWorksに「思考回路」を持たせることと同じです。
この手法を習得すれば、Excelのデータをもとに数千種類のバリエーションを夜中に自動生成することも、最適化アルゴリズムを組み込んで形状を自動で最適解へ導くことも可能になります。

「マクロを記録する」段階から「モデルを制御する」段階へ。
あなたの設計業務が、このコード一つで劇的に変わることを期待しています。

何か不明点があれば、いつでも聞いてください。設計自動化の旅は、ここからが本番ですよ!

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