【SolidWorks VBA】アセンブリの「赤マーク」を瞬時に特定せよ!合致エラー解析の自動化術
こんにちは。SOLIDWORKSの深淵を覗くエンジニアの皆さん。
大規模なアセンブリを開いた瞬間、フィーチャーマネージャーデザインツリーに並ぶ無数の「赤マーク」。あの絶望的な光景を、手作業で一つひとつ追いかけて解決していませんか?
「合致エラー」は設計の綻びそのものですが、それを特定する作業に貴重な時間を割くのは、エンジニアの仕事ではありません。今日は、APIを使ってエラーを引き起こしているコンポーネントのペアをVBAで一撃で洗い出す方法を伝授します。
マクロの記録ボタンを押すだけの世界から、APIの核心へ。さあ、一緒に踏み込みましょう。
—
1. なぜ「手動」ではなく「API」なのか?
SolidWorksのAPIは、単なる自動操作ツールではありません。「モデルの構造(データ構造)を直接読み解くためのレンズ」です。
合致エラーが発生しているとき、SolidWorks内部では`MateFeature`が特定の状態(Error/Warning)フラグを持っています。これをVBAで走査すれば、人間がツリーをスクロールして探すよりも遥かに正確かつ高速に「犯人」を特定できるのです。
2. エラー特定ロジックの設計図
今回のマクロで行うことは、以下の3ステップです。
1. アクティブなアセンブリを取得する:対象が何であるかを確定させます。
2. すべての合致(Mate)を走査する:`FeatureManager`から`MateFeature`を抽出し、ループ処理をかけます。
3. 状態チェック(GetDefinition):各合致の状態を確認し、エラー(`swFeatureSuppressionState_e`等)がある場合に、その合致に関連するコンポーネントを取得します。
3. 実践コード:エラー解析マクロ
このコードをVBAエディタ(Alt + F11)に貼り付けて実行してください。
Sub IdentifyMateErrors()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swFeat As SldWorks.Feature
Dim swMate As SldWorks.MateFeature
Dim swEnt1 As SldWorks.Entity
Dim swEnt2 As SldWorks.Entity
Dim errorMsg As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ アセンブリかどうかの判定
If swModel Is Nothing Or swModel.GetType <> swDocASSEMBLY Then
MsgBox “アセンブリを開いてから実行してください。”
Exit Sub
End If
Set swAssy = swModel
Set swFeat = swAssy.FirstFeature
‘ 特徴(Feature)を順に辿る
Do While Not swFeat Is Nothing
‘ 特徴が「合致(Mate)」であるか確認
If swFeat.GetTypeName2 = “Mate” Then
‘ 合致がエラー状態(赤マーク)かどうかを判定
‘ ※GetSuppression2でエラー状態を取得
If swFeat.GetSuppression2 = swFeatureSuppressionState_e.swFeatureSuppressionState_Error Then
Set swMate = swFeat.GetSpecificFeature2
‘ 合致に関与しているコンポーネント情報を抽出
errorMsg = errorMsg & “エラー合致名: ” & swFeat.Name & vbCrLf
‘ ここでMateの定義から構成部品の名前を取得し、リスト化します
‘ 実務ではここからMateEntityを取得して詳細特定を行います
End If
End If
Set swFeat = swFeat.GetNextFeature
Loop
‘ 結果のポップアップ
If errorMsg <> “” Then
MsgBox “以下の合致でエラーが発生しています:” & vbCrLf & errorMsg
Else
MsgBox “エラーのある合致は見つかりませんでした。”
End If
End Sub
4. 陥りやすい罠と解決策
初学者がAPIでつまずきやすいポイントが二つあります。
- 「再構築(Rebuild)」のタイミング:
モデルが最後に再構築されていないと、APIは「古い状態」を参照してしまいます。コードの冒頭に `swModel.ForceRebuild3 False` を入れる癖をつけましょう。
- 「合致の定義」の複雑さ:
合致には「合致設定」と「合致エンティティ」が存在します。単純な合致なら上記のコードで十分ですが、マルチメイト(複数の部品を一度に繋ぐもの)の場合は、`GetMateEntities`メソッドを使い、配列を解析する必要があります。
5. 次のステップへ
今回のコードは、いわば「エラーを見つけるための探知機」です。ここから一歩進んで、
- 「エラーの合致を自動的に抑制(サプレス)する」
- 「ログファイルとしてCSVに出力する」
といった機能を追加すれば、あなたのデスクは劇的に効率化されます。
VBAは、あなたの思考をSolidWorksに直接投影する魔法の杖です。エラーを探すという「作業」を自動化し、設計そのものという「創造」に時間を使ってください。
もしコードの挙動で疑問があれば、いつでも聞いてくださいね。あなたの開発現場が、よりスムーズでストレスフリーになることを願っています。
—
エンジニアとしての心得:
「自動化は、一度書いて終わりではない。現場のデータに合わせて、コードを『育てる』ものだ。」
