【入門編】【数式・グローバル変数】EquationMgr.AddEquationでパーツ全体の寸法連動ネットワークをコードから構築する – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks自動化の真髄:数式マネージャをコードで操り、「生きているモデル」を作る

こんにちは。現場で泥臭い自動化と格闘し、時に洗練されたコードで設計者の時間を救うのが私の仕事です。

今日は、SolidWorks自動化の「中級者への登竜門」とも言える「EquationMgr(数式マネージャ)」の操作についてお話しします。

多くの人がマクロの記録で「形状を作る」ところまでは辿り着きます。しかし、本当のプロは形状を作る前に「設計のルール」をコードで流し込みます。「修正のたびにモデルが崩れる」という悩みは、数式を正しく定義することで完全に過去のものとなります。

さあ、設計変更に負けない「賢いパーツ」をプログラムで構築する旅に出かけましょう。

なぜ、手動ではなく「コード」で数式を埋め込むのか?

手動で「数式マネージャ」を開いて、一つひとつ「D1@Boss-Extrude1 = …”」と入力していませんか?
もしパーツが100種類あったら? もし仕様変更で数式がガラリと変わったら?

コードで数式を制御する最大のメリットは、「設計意図の標準化」です。プログラムが数式を埋め込むことで、どんなに複雑なモデルでも、誰が作っても常に同じルールで駆動する「堅牢なモデル」が瞬時に出来上がります。

EquationMgrを掌握する:基本のコード構成

SolidWorksで数式を操作するための心臓部は、`PartDoc`オブジェクトの `GetEquationMgr` メソッドです。まずはこのインターフェースを呼び出すところから全てが始まります。

Sub AddDynamicEquation()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swEqMgr As SldWorks.EquationMgr

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

‘ 1. モデルから数式マネージャのハンドルを取得
Set swEqMgr = swModel.GetEquationMgr

‘ 2. 数式を追加する(引数:インデックス, 数式文字列, 外部設定フラグ)
‘ インデックスに-1を指定すると、リストの末尾に追加されます
Dim eqIndex As Integer
eqIndex = swEqMgr.AddEquation(-1, “””D1@Boss-Extrude1″” = “”Width”” 2″)

‘ 3. モデルを再構築して反映させる
swModel.EditRebuild3

MsgBox “数式の埋め込みが完了しました!”
End Sub

ここがポイント:コードの意味を解剖する

  • `GetEquationMgr`: パーツ全体を統括する「数式管理台帳」へのアクセス権を得るイメージです。
  • `AddEquation(-1, …)`: なぜ `-1` なのか? これは「一番後ろに追加する」というお決まりの作法です。特定の行を指定する必要がない限り、常に `-1` を使うのが安全なコーディングです。
  • 文字列の扱い: `”D1@Boss-Extrude1″` のように、ダブルクォーテーションの中にさらにダブルクォーテーションを重ねる必要があります。これがVBAの文字列定義のルールです。

よくある落とし穴:初心者が必ずハマる「3つの壁」

開発現場でよく目にするエラーと、その回避策を伝授します。

1. 寸法名が一致しない問題

`D1@Boss-Extrude1` という名前は、フィーチャ名を変えると変わってしまうことがあります。
【対策】:フィーチャ名をプログラムで固定するか、数式を入れる前に必ずその寸法が存在するかを確認するバリデーション(検証)処理を入れましょう。

2. グローバル変数の未定義

数式の中で `”Width”` という変数を使っていますが、これは事前に「グローバル変数」として登録しておく必要があります。存在しない変数を数式に組み込むと、モデルがエラー(赤色)になります。
【対策】:数式の追加前に、必要なグローバル変数が定義されているか確認し、なければ先に作成するロジックを組み込みましょう。

3. 再構築(Rebuild)の忘れ

数式を追加しただけでは、画面上のモデルは動きません。`swModel.EditRebuild3` を呼び出すまでがワンセットです。ここを忘れると、「数式は入っているのに反映されない!」という怪奇現象に悩みます。

次のステップ:条件分岐で「設計ルール」を変える

ここまでできれば、後は応用です。例えば、`If` 文を使って条件によって数式を切り替えることができます。

‘ 簡略化した条件分岐の例
If materialType = “Steel” Then
swEqMgr.AddEquation(-1, “””D1@Boss-Extrude1″” = 50″)
Else
swEqMgr.AddEquation(-1, “””D1@Boss-Extrude1″” = 100″)
End If

このように、「設計条件を入力すれば、勝手に最適な数式が組まれる」という仕組みが作れれば、あなたはもうSolidWorks APIの中級エンジニアです。

最後に:自動化は「設計者のための武器」である

VBAを覚えることは、単なる事務作業の効率化ではありません。あなたが書いたコードが、設計者の思考を補完し、エラーを未然に防ぐ「設計の羅針盤」になるのです。

まずはこのコードをコピーして、ご自身のパーツで試してみてください。手動で数式を入力していたあの面倒な時間が、一瞬でゼロになる快感を味わえるはずです。

もしコードで詰まったら、いつでも戻ってきてください。現場のエンジニアとして、いつでもあなたの挑戦をサポートします。頑張ってくださいね!

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