【SolidWorks VBA極意】Excelのリストからアセンブリを自動構築する「設計自動化の第一歩」
こんにちは。自動化の深淵へようこそ。
日々、手作業で何十もの部品をアセンブリにドラッグ&ドロップしていませんか? その作業、今日で卒業しましょう。
今回は、「ExcelのBOM(部品表)を読み込み、SolidWorksでアセンブリを自動生成する」という、設計自動化における「聖杯」とも言えるテーマを扱います。
マクロの記録ボタンを押して終わりのレベルから、プロフェッショナルなAPIエンジニアへと脱皮するための極意を伝授します。
—
1. 脳内に刻むべきSolidWorks APIの「階層構造」
SolidWorks VBAを操る上で、まず理解すべきは「SldWorks」と「ModelDoc2」という二大巨頭の役割分担です。
- SldWorksオブジェクト: SolidWorksというアプリケーションそのもの。ファイルを開く、新規作成する、設定を操作する「司令塔」です。
- ModelDoc2オブジェクト: 現在開いている具体的な「ドキュメント(部品やアセンブリ)」。面を選択したり、部品を追加したり、保存したりする「作業者」です。
この二つをどう繋ぐか。これがコードの生命線になります。
—
2. 準備:ExcelからSolidWorksを操る魔法
まず、ExcelのVBAエディタ(`Alt + F11`)を開き、`ツール > 参照設定` から 「SolidWorks 20xx Type Library」 にチェックを入れてください。これをしないと、SolidWorksの命令語(Intellisense)が効かず、コードを書くのが苦行になります。
アセンブリ自動生成のロジック
1. Excelのリストからファイルパスを取得する。
2. `SldWorks.NewDocument`で新規アセンブリを作成する。
3. `ModelDoc2.AddComponent5` で部品を順次アセンブリへ放り込む。
—
3. 実践コード:アセンブリ構築エンジン
以下のコードは、ExcelのA列にパーツのフルパスが記載されている前提です。
Option Explicit
Sub BuildAssemblyFromExcel()
‘ — 1. オブジェクトの定義 —
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swComp As SldWorks.Component2
Dim row As Integer
Dim filePath As String
‘ SolidWorksに接続(起動していなければ新規起動)
Set swApp = CreateObject(“SldWorks.Application”)
‘ 新規アセンブリを作成 (テンプレートパスは環境に合わせてください)
Set swModel = swApp.NewDocument(“C:\ProgramData\SolidWorks\…\Assembly.asmdot”, 0, 0, 0)
Set swAssy = swModel
‘ — 2. Excelからデータを読み込みアセンブリに追加 —
row = 1
Do While Cells(row, 1).Value <> “”
filePath = Cells(row, 1).Value
‘ 部品をアセンブリに追加
‘ AddComponent5(ファイルパス, 設定名, X, Y, Z)
Set swComp = swAssy.AddComponent5(filePath, “”, 0, 0, 0)
If swComp Is Nothing Then
Debug.Print “エラー: 次のファイルが読み込めません – ” & filePath
End If
row = row + 1
Loop
MsgBox “アセンブリの構築が完了しました!”
End Sub
—
4. 陥りやすい罠と対策
現場でコードを動かすと、必ずと言っていいほど「止まる」場所があります。
- 罠1:ファイルパスの誤り
- 対策: `Dir(filePath)` を使い、`AddComponent`する前にそのファイルが本当に存在するかチェックするロジックを挟んでください。
- 罠2:メモリリーク(SolidWorksが重くなる)
- 対策: ループ内で何度も`SldWorks`を呼び出さないこと。必ず最初に一度だけインスタンス化し、使い回してください。
- 罠3:テンプレートパスの不一致
- 対策: `NewDocument`の引数はPC環境(インストールドライブ)によって異なります。`swApp.GetUserPreferenceStringValue`を使って正しいテンプレートパスを取得するのが「プロの流儀」です。
—
5. 次のステップへ
今回のコードは、あくまで「部品を置く」だけです。ここから先は、以下のような高度な技術へ発展させることができます。
1. 合致(Mates)の自動設定: `swAssy.AddMate5` を使い、面と面を自動的に拘束する。
2. 部品構成の階層化: サブアセンブリを先に生成し、それをメインアセンブリに組み込む。
3. UIの構築: ユーザーフォームを作成し、ドラッグ&ドロップでExcelファイルを読み込めるようにする。
SolidWorks VBAは、単なる事務作業の自動化ツールではありません。「あなたの設計思想をコードとして定着させるための武器」です。
まずはこのコードを動かし、部品がアセンブリ内に次々と現れる瞬間の感動を味わってください。それが、エンジニアとしての確かな一歩になります。
何か分からないことがあれば、いつでも聞いてくださいね。一緒に最高峰の自動化環境を築き上げましょう!
