SolidWorks VBA極限攻略:自動ボルト締結バリデーターで設計ミスをゼロにする
こんにちは。設計現場の「自動化」という名の聖域を守るチーフアーキテクトです。
「マクロの記録」ボタンを押して生成された、冗長で不安定なコードに頼るのは今日で終わりにしましょう。実務で求められるのは、「設計意図をコードで解釈し、論理的な裏付けを持って品質を担保する」というエンジニアリングです。
今回は、アセンブリ内のボルト締結を自動検証する「バリデーション・マクロ」の核心部分を伝授します。これさえ理解すれば、あなたはもう「SolidWorksを操作する人」から「SolidWorksを制御するエンジニア」へと進化できます。
—
1. なぜ「自動バリデーション」が必要なのか?
手動でボルトの突き出し量を計算していませんか?
- 「板厚が変わったのにボルト長を更新し忘れた」
- 「座金を入れ忘れて、ネジの掛かりが浅い」
これらは単純なミスですが、製造現場では致命的な手戻りを招きます。プログラムは疲れません。 境界条件(板厚・穴深さ)さえ定義すれば、全部品を一瞬でスキャンし、不適合な締結箇所をログに出力する。これが設計自動化の真髄です。
—
2. 構造を理解する:アセンブリ探索の「作法」
SolidWorks APIでは、アセンブリ内の部品を「構成部品(Component)」として扱います。ここで重要なのは、「ルートコンポーネントから再帰的に潜り込む」というアルゴリズムの基本です。
陥りやすい罠:再帰処理と型定義
初心者がやりがちなのは、アクティブなドキュメントを直接触り続けることです。APIでは `IComponent2` を通じて各部品の幾何情報(Geometry)へアクセスします。特に、部品の「長さ」を測るには、単純なバウンディングボックスではなく、穴の深さや板厚といった「フィーチャー情報」にアクセスする視点が不可欠です。
—
3. 実践コード:ボルト締結バリデーターの核心
以下のコードは、アセンブリ内の全コンポーネントを巡回し、特定のプロパティを持つ部品の厚みを判定するプロトタイプです。
‘ SolidWorks API を使用した締結バリデーションの核心
Sub ValidateBoltFastening()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel.GetType <> swDocASSEMBLY Then
MsgBox “アセンブリを開いてください。”
Exit Sub
End If
‘ ルートコンポーネントから再帰的に探索を開始
Dim swRootComp As SldWorks.Component2
Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
TraverseComponents swRootComp
End Sub
‘ 再帰関数:コンポーネントを深掘りする
Sub TraverseComponents(swComp As SldWorks.Component2)
Dim vChildren As Variant
vChildren = swComp.GetChildren
If IsEmpty(vChildren) Then Exit Sub
Dim i As Long
For i = 0 To UBound(vChildren)
Dim swChild As SldWorks.Component2
Set swChild = vChildren(i)
‘ ここで部品のカスタムプロパティや寸法をチェック
‘ 例:部品名に「Bolt」が含まれるか判定
If InStr(swChild.Name2, “Bolt”) > 0 Then
Debug.Print “検知されたボルト: ” & swChild.Name2
‘ 実際の締結判定ロジックをここに実装
‘ ValidateThickness swChild
End If
‘ 階層が深い場合も想定して再帰呼び出し
TraverseComponents swChild
Next i
End Sub
コードの解説
- 再帰呼び出し (`TraverseComponents`): アセンブリはツリー構造です。サブアセンブリの中にさらにサブアセンブリがある場合、この関数は自分自身を呼び出すことで、深さを問わず全ての部品を網羅します。
- 型定義 (`SldWorks.Component2`): `Object`型で済ませず、明示的に型を指定してください。IDEのインテリセンスが効くようになり、タイプミスが激減します。
—
4. 現場で生き残るための「プラスアルファ」
このマクロを実務レベルに引き上げるには、以下の3点を意識してください。
1. エラーハンドリング: `On Error Resume Next` で誤魔化すのは初心者の証です。エラーが発生した時に「どの部品で、何が起きているのか」をイミディエイトウィンドウに吐き出すようにしましょう。
2. カスタムプロパティの活用: 部品側に「板厚(Thickness)」というカスタムプロパティを持たせておくと、APIからの読み取りが劇的に高速化します(ジオメトリ解析は計算コストが非常に重いため)。
3. 座金の判定: 座金の有無は、コンポーネントの「構成部品の状態(抑制/非抑制)」をチェックすることで判定可能です。
—
最後に:自動化の先にあるもの
「マクロを組んで楽をする」のではなく、「マクロによって設計の品質基準を底上げする」という視点を持ってください。今回紹介したコードは、言わば「設計の守護神」の第一歩です。
ここから、計測値をCSVに書き出すのか、不適合な部品を赤色にハイライトするのか、発展させるのはあなた次第です。不明な点があれば、いつでもこの極限の技術ブログに戻ってきてください。
あなたの挑戦を、心から応援しています。設計自動化の世界へ、ようこそ。
