【入門編】【実務中級】アセンブリ内のすべてのコンポーネントの構成(コンフィギュレーション)名をExcelシートへ一括エクスポート – SolidWorks VBA解析バイブル

スポンサーリンク

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という巨大な空間を制御する司令塔」です。ここをクリアすれば、あなたはもう脱・初心者。堂々と「自動化エンジニア」を名乗ってください。

質問があればいつでもどうぞ。あなたの設計が、コードによってより知的で軽快なものになることを願っています。

タイトルとURLをコピーしました