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`を組み合わせ、干渉した瞬間にログを吐き出す。
「マクロが自動で動いてくれる」感動は、一度味わうと病みつきになります。
まずはこのコードをコピペして、お手元のモデルで動かしてみてください。何かエラーが出たとしても、それはあなたがプロに一歩近づいた証拠です。
分からないことがあれば、いつでも聞いてください。設計者の時間を奪う退屈な作業を、一つずつコードに託していきましょう。
