【入門編】【実務中級】距離合致(Distance Mate)のオフセット値を条件分岐で動的に変更し、スライド機構の可動範囲を検証するVBA – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAの極意:スライド機構を自動制御し、干渉の限界を突き止めろ

こんにちは。自動化の深淵へようこそ。
「マクロの記録」ボタンを押して生成された、冗長で壊れやすいコードを卒業する時が来ました。

今回は、実務で最も要望が多く、かつ多くのエンジニアが「なぜか動かない」「合致が壊れる」という壁にぶつかる「距離合致の動的制御」に焦点を当てます。スライド機構の可動範囲を検証し、干渉リスクを自動で検知する。これは単なる自動化ではなく、設計の質を一段引き上げるための「武器」です。

さあ、SolidWorks APIの真髄に触れていきましょう。

—

1. なぜ「合致」の制御は難しいのか?

多くの初心者が陥る罠は、「合致の選択」の不安定さです。
SolidWorksにおいて、合致(Mate)はアセンブリ内の「関係性」です。これをAPIから操作するには、フィーチャーマネージャツリー上の名前で指定するのではなく、対象の合致オブジェクトを正確にキャプチャする必要があります。

成功の鍵:合致を「名前」で特定する

マクロの記録で生成されるコードは「SelectByID2」を多用しますが、これは非常に不安定です。名前を変えた瞬間に動かなくなるからです。
実務で生き残るコードは、「特定の合致フィーチャーを検索し、その定義(Definition)を編集する」というアプローチを取ります。

—

2. 実装コード:スライド距離を動的に制御する

以下のコードは、指定した名前の「距離合致」の数値をプログラムから書き換え、再構築(Rebuild)をかける一連の流れです。

Option Explicit

Sub UpdateSlideDistance()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swMate As SldWorks.Feature
Dim swMateDef As SldWorks.DistanceMateFeatureData

‘ 初期化
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ アセンブリであることを確認
If swModel.GetType <> swDocASSEMBLY Then Exit Sub
Set swAssy = swModel

‘ 1. 「DistanceMate1」という名前の合致を探す
Set swMate = swModel.FeatureByName(“DistanceMate1”)

If swMate Is Nothing Then
MsgBox “対象の合致が見つかりません!名前を確認してください。”
Exit Sub
End If

‘ 2. 合致の定義を取得
Set swMateDef = swMate.GetDefinition

‘ 3. 距離を動的に変更(例:0mmから100mmまで10mm刻み)
Dim i As Double
For i = 0 To 100 Step 10
‘ 距離を設定(単位はメートル系。100mm = 0.1m)
swMateDef.Distance = i / 1000

‘ 4. 定義を反映させて再構築
If swMate.ModifyDefinition(swMateDef, swAssy, Nothing) = False Then
MsgBox “合致の更新に失敗しました”
Exit Sub
End If

‘ モデルを再構築して干渉チェック等のタイミングを作る
swModel.EditRebuild3

‘ 必要に応じてここで「干渉検知」APIを呼び出す
Debug.Print “現在のストローク: ” & i & ” mm”
Next i

MsgBox “検証完了です!”
End Sub

—

3. 実務で「壊れない」コードを書くための注意点

このコードをあなたの現場で使う際、以下の3点だけは必ず押さえてください。

① 単位系(MKS)の呪縛

SolidWorks APIの数値は、基本的にメートル(m)単位です。
100mmを動かしたいとき、`100`と入力してはいけません。必ず`/ 1000`を忘れないように。ここを間違えると、アセンブリが宇宙の彼方へ飛んでいくような挙動(エラー)を起こします。

② ModifyDefinitionの重み

`ModifyDefinition`は、フィーチャーを一度解除して再定義するような重い処理です。ループの回数が多すぎるとSolidWorksはフリーズします。検証時は、`DoEvents`をループ内に入れ、PCに呼吸をさせる隙間を作ってあげると安定します。

③ エラーハンドリングの重要性

スライド機構が物理的にぶつかる位置まで動かそうとすると、SolidWorksは「合致エラー」を出します。
`ModifyDefinition`の戻り値(Boolean)を必ずチェックし、`False`が返ってきたら「干渉発生」とみなしてループを抜けるロジックを組むのが、プロのエンジニアの流儀です。

—

4. 次のステップへ

今回のコードは、いわば「自動化の種火」です。
これを応用すれば、以下のような発展が可能です。

  • Excelとの連携: Excelに記載されたストローク表を読み込み、自動で全パターンを検証する。
  • スクリーンショットの自動保存: 各ストローク位置で画面をキャプチャし、設計検討書を自動作成する。
  • 干渉検知APIの連結: `swAssy.GetInterference`を組み合わせ、干渉した瞬間にログを吐き出す。

「マクロが自動で動いてくれる」感動は、一度味わうと病みつきになります。
まずはこのコードをコピペして、お手元のモデルで動かしてみてください。何かエラーが出たとしても、それはあなたがプロに一歩近づいた証拠です。

分からないことがあれば、いつでも聞いてください。設計者の時間を奪う退屈な作業を、一つずつコードに託していきましょう。

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