SolidWorks VBAの極意:アセンブリの全コンフィギュレーションをExcelへ叩き出せ
こんにちは。現場で泥臭く設計効率化を突き詰めているエンジニアの皆さん。
「マクロの記録」ボタンを押して生成された、冗長で不安定なコードに溜息をつくのは今日で終わりにしましょう。
今日は、アセンブリ内の全コンポーネントが「今、どの構成(コンフィギュレーション)で呼び出されているか」をExcelへ一括出力するコードを伝授します。設計検証やBOMの整合性確認で、手作業でカチカチとプロパティを開く作業からは卒業です。
—
なぜ「コンポーネントの参照」が重要なのか
SolidWorksのアセンブリにおいて、各部品は単なるファイルパスではありません。「どのコンフィギュレーションを参照しているか」というメタデータが紐付いています。
これをVBAで抽出するには、`ModelDoc2`から`AssemblyDoc`へキャストし、`GetComponents`メソッドでコンポーネントの配列を回収する……というプロセスが不可欠です。ここを理解すると、SolidWorks APIの「オブジェクト階層」の息吹を感じられるようになりますよ。
—
実装:アセンブリ構成抽出マクロ
以下のコードをVBAエディタ(Alt + F11)に貼り付けてください。
Option Explicit
‘ 必要なライブラリ:Microsoft Excel XX.X Object Library を参照設定してください
Sub ExportAssemblyConfigurations()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim vComps As Variant
Dim swComp As SldWorks.Component2
Dim i As Long
‘ Excel用変数
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ アセンブリが開かれているかチェック
If swModel Is Nothing Or swModel.GetType <> swDocASSEMBLY Then
MsgBox “アセンブリを開いてから実行してください。”, vbExclamation
Exit Sub
End If
Set swAssy = swModel
vComps = swAssy.GetComponents(False) ‘ Falseは最上位のみ、Trueなら階層全てを走査
‘ Excelの準備
Set xlApp = CreateObject(“Excel.Application”)
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
‘ ヘッダー作成
xlSheet.Cells(1, 1).Value = “部品名”
xlSheet.Cells(1, 2).Value = “コンフィギュレーション名”
xlSheet.Cells(1, 3).Value = “フルパス”
‘ コンポーネント解析ループ
For i = 0 To UBound(vComps)
Set swComp = vComps(i)
‘ コンポーネントの名前とコンフィギュレーション名を書き出し
xlSheet.Cells(i + 2, 1).Value = swComp.Name2
xlSheet.Cells(i + 2, 2).Value = swComp.ReferencedConfiguration
xlSheet.Cells(i + 2, 3).Value = swComp.GetPathName
Next i
xlApp.Visible = True
MsgBox “抽出完了!”, vbInformation
End Sub
—
コードの重要ポイント:ここが「プロ」の入り口
1. `GetComponents(False)`の使い分け
`False`を指定するとトップレベルのコンポーネントのみを取得します。もしサブアセンブリを含めた全階層を網羅したい場合は、ここを`True`にするか、再帰処理(関数が自分自身を呼び出すテクニック)を組む必要があります。まずはトップレベルから攻略しましょう。
2. `ReferencedConfiguration`プロパティ
これが今回の主役です。コンポーネントがどの設定を向いているかを一撃で取得できます。API仕様書を読んでも見つけにくい隠れた名プロパティです。
3. `CreateObject(“Excel.Application”)`
参照設定を外しても動くように、あえて「レイトバインディング」を採用しています。配布先でエラーが出にくい、エンジニアとしての配慮です。
—
陥りやすい罠と対策
- 「マクロが動かない」場合:
多くの場合、アセンブリが「抑制(Suppressed)」されているコンポーネントが原因です。抑制されたコンポーネントはAPIが正しく反応しないことがあります。検証時は、アセンブリが正しく読み込まれているか確認してください。
- 名前の重複:
アセンブリ内で同じ部品を複数使っている場合、`swComp.Name2`は一意(ユニーク)な名前を返します。これを利用してExcel上でVLOOKUPを組めば、設計変更の追跡が劇的に楽になります。
次のステップへ
このマクロをベースに、特定のコンフィギュレーション名に色を付ける、あるいは設計上のルールから外れた構成を使っている場合に警告を出す……といった「自動検査」へと発展させてみてください。
VBAは単なる作業自動化ツールではありません。「SolidWorksという巨大な空間を制御する司令塔」です。ここをクリアすれば、あなたはもう脱・初心者。堂々と「自動化エンジニア」を名乗ってください。
質問があればいつでもどうぞ。あなたの設計が、コードによってより知的で軽快なものになることを願っています。
