【脱・マクロ記録】SolidWorks VBAで部品を自在に操る!パーツ視覚化自動化の極意
こんにちは。現場でSolidWorksと格闘するエンジニアの皆さん。
「マクロの記録」ボタンを押して、生成された大量のコードを眺めて溜息をついたことはありませんか?
もしあなたが、「マウスでポチポチ選択して色を変える」という作業から卒業したいなら、今がそのタイミングです。今回は、「アセンブリ内の部品を名前で特定し、瞬時に色を変える」という、自動化エンジニアへの第一歩となるテクニックを伝授します。
これは単なる色変えではありません。SolidWorksの内部構造(API)をどう操るかの「作法」を学ぶ旅です。さあ、始めましょう。
—
1. なぜ「マクロの記録」ではダメなのか?
マクロの記録は「操作の軌跡」をなぞるだけです。しかし、私たちが目指すのは「動的な指示」です。
例えば、「アセンブリ内の『ボルト』という名前の部品を全部赤くせよ」と命令したい時、マクロの記録では「特定のID」を探してしまい、別のファイルでは動きません。
APIを直接叩くということは、SolidWorksに対して「名前を頼りに探せ」とロジックを組むこと。 これができれば、設計の自動化レベルが劇的に変わります。
—
2. 核心を突くコード:コンポーネント選択と色変更
まずは、以下のコードをVBAエディタにコピーしてみてください。このコードは、指定した名前の部品をアセンブリ全体から探し出し、その色を強制的に変更するものです。
Option Explicit
Sub ChangeComponentColorByName()
‘ 1. オブジェクトの準備
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swComp As SldWorks.Component2
Dim swModelDocExt As SldWorks.ModelDocExtension
‘ 2. SolidWorksに接続
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 swModelDocExt = swModel.Extension
‘ 3. 部品名で検索(今回は “Bolt” という文字を含むものを対象)
Dim compArray As Variant
compArray = swAssy.GetComponents(False)
Dim i As Long
For i = 0 To UBound(compArray)
Set swComp = compArray(i)
‘ 部品名に “Bolt” が含まれていれば処理する
If InStr(1, swComp.Name2, “Bolt”, vbTextCompare) > 0 Then
‘ 4. 選択状態にする(SelectionManagerの基本)
swComp.Select4 True, Nothing, False
‘ 5. 色を変更する(RGB値を指定)
‘ ※注:SolidWorksの色のプロパティは配列で定義します
Dim colorProps(8) As Double
colorProps(0) = 1 ‘ 赤の成分 (0.0 – 1.0)
colorProps(1) = 0 ‘ 緑の成分
colorProps(2) = 0 ‘ 青の成分
colorProps(3) = 1 ‘ 拡散反射
colorProps(4) = 1 ‘ 鏡面反射
colorProps(5) = 1 ‘ 光沢
colorProps(6) = 0.5 ‘ 透明度
colorProps(7) = 0 ‘ 発光
swComp.MaterialPropertyValues = colorProps
End If
Next i
‘ 画面を再描画して色を反映
swModel.GraphicsRedraw2
MsgBox “Boltの着色が完了しました!”
End Sub
—
3. このコードを理解するための「3つのポイント」
① `GetComponents` で全容を把握する
`swAssy.GetComponents(False)` は、アセンブリ内の全ての構成部品を配列として取得する魔法のコマンドです。これをループで回すことで、人間がマウスで探す手間を0.1秒で終わらせます。
② `Select4` の役割
なぜわざわざ `Select4` を使うのか? それはSolidWorksにとって「選択する」という行為が、後続のプロパティ変更のトリガーになることが多いからです。第1引数の `True` は「追加選択する(前の選択を解除しない)」という意味です。ここを `False` にすると、最後の部品しか選択されず、意図しない挙動になります。
③ `MaterialPropertyValues` の深淵
色を変える際に配列を使うのは、単なる「赤」だけでなく、「反射」や「透明度」といった材料特性を一度に設定するためです。最初は難しく感じるかもしれませんが、この配列の型さえ覚えてしまえば、どんな部品も思いのままに染め上げることができます。
—
4. 初心者が陥りやすい罠と解決策
- 「名前が見つからない!」:
`swComp.Name2` は「アセンブリ内での表示名」を返します。たまに「部品名-1」のようになっていることがあるので、`InStr` 関数を使って「部分一致」で探すのが、エラーを避けるコツです。
- 「色が反映されない!」:
コードの最後に必ず `swModel.GraphicsRedraw2` を入れましょう。APIは計算を終えても、画面の更新を後回しにすることがあります。これは自動化エンジニアがよく忘れる「最後のひと手間」です。
—
最後に:ここをクリアすれば、あなたはもう「自動化の入り口」に立っています
このマクロは、単なる色変えツールではありません。
「アセンブリの中身をプログラムで走査し、条件に合致するものだけに干渉する」という、あらゆる自動化の基本パターンです。
次は、これを応用して「指定した部品だけを非表示にする」「特定の名前の部品のプロパティを一括で書き換える」といったタスクに挑戦してみてください。
もし分からないことがあれば、いつでもまた聞きに来てください。あなたのエンジニアライフが、コードの力で少しでも楽になることを願っています!
