【実務・中級編】【初心者向け】アセンブリ挿入時の固定(Fix)とフロート(Float)をVBAから明示的に切り替えるプロパティ操作 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAを掌握する:アセンブリ初期配置の「固定(Fix)」を支配せよ

SolidWorks APIを扱うエンジニア諸君。アセンブリの自動生成において、最初の一歩で躓くのが「初期コンポーネントの強制固定」だ。

`InsertComponent4` を実行した直後、SolidWorksは親切心から最初の部品を原点に固定する。だが、自動化ツールを組む我々にとって、この「勝手な固定」は時として設計意図を阻害するノイズでしかない。

今日は、この「固定(Fix)」と「浮動(Float)」の状態をコードで完全に掌握し、堅牢なアセンブリ構築プロセスを実現する方法を伝授する。

—

なぜ「固定の解除」が重要なのか

自動化ツールにおいて、部品を配置した後に合致(Mate)を付加する際、部品が固定されたままだとどうなるか。
SolidWorksは「固定された部品には合致を付加できない(またはエラーを吐く)」という制約を持つ。無理に合致を入れれば、過定義エラーの温床となる。

実務レベルのツールでは、以下のフローが鉄則だ。
1. 部品挿入
2. (必要に応じて)固定解除
3. 合致付加
4. 最終的な位置決定

この手順を自動化できなければ、あなたのツールは「動くが、すぐ壊れる」という最低の品質に成り下がる。

—

堅牢な「固定解除」の実装コード

SolidWorks APIにおいて、コンポーネントの状態(固定/浮動)を制御するのは `SelectByID2` で対象を選択し、`Part.UnfixComponent` を実行する手法が一般的だが、ここではよりモダンで確実なアプローチを提示する。

‘ ———————————————————
‘ コンポーネントの固定を解除し、合致可能な状態にする関数
‘ @param swModel : 現在のアセンブリドキュメント
‘ @param compName : コンポーネント名(ファイル名)
‘ ———————————————————
Public Sub ReleaseComponentFix(ByVal swModel As SldWorks.ModelDoc2, ByVal compName As String)
Dim swAssy As SldWorks.AssemblyDoc
Dim swComp As SldWorks.Component2
Dim status As Boolean

Set swAssy = swModel

‘ コンポーネントを取得
Set swComp = swAssy.GetComponentByName(compName)

If swComp Is Nothing Then
Err.Raise vbObjectError + 1, “ReleaseComponentFix”, “コンポーネントが見つかりません”
End If

‘ 重要: コンポーネントを選択状態にする
‘ API操作の鉄則として「操作対象を選択してからコマンドを投げる」のが最も安定する
status = swModel.Extension.SelectByID2(compName, “COMPONENT”, 0, 0, 0, False, 0, Nothing, 0)

If status Then
‘ 固定解除を実行(Float)
‘ ※固定したい場合は swModel.EditFixComponent を使用する
swModel.EditUnfixComponent
End If

‘ 再構築を行い状態を確定させる
swModel.EditRebuild3
End Sub

—

現場で差がつく「設計の極意」

1. 「名前」への過信を捨てよ

`GetComponentByName` は便利だが、同一名称のコンポーネントが複数ある場合、意図しない挙動を引き起こす。大規模アセンブリを扱う場合は、`ComponentID` やファイルパスのフルパス管理を検討すべきだ。

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

VBAは非同期的な処理が混じることがある。`EditUnfixComponent` の直後に合致を付加しようとすると、SolidWorks側の計算が追いつかず失敗することがある。必ず `EditRebuild3` を挟み、計算を完了させてから次のステップに進むのが「通」のやり方だ。

3. エラーハンドリングの徹底

「部品が最初から浮動状態だった場合」にエラーを出すのではなく、状態をチェックしてから処理を分岐させるのが、真に堅牢なコードである。

‘ 状態チェックのロジック
If swComp.IsFixed Then
‘ ここで固定解除を実行
End If

—

最後に:自動化ツールは「保守性」が全て

コードが動くのは当たり前だ。重要なのは「明日、仕様変更があっても3分で修正できるか」である。

今回のコードは、関数化(カプセル化)を意識している。メインの処理ルーチンに直接書き込むのではなく、このようなユーティリティ関数を別モジュールに切り出しておくことで、将来的に他のプロジェクトでも資産として活用できる。

SolidWorks VBAは、決してレガシーな言語ではない。APIという「強大な力」を正しく御すことができれば、手作業で数時間かかっていたアセンブリ構築が、数秒で完了するようになる。

諸君、まずはこのコードを実装し、アセンブリの固定状態を自在に操るところから始めてみてほしい。次に会うときは、さらに深いメモリ管理や、データベース連携の領域で語り合おう。

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