SolidWorks APIの真髄:Configuration.Add3による「バリエーション自動生成」の極意
SolidWorks APIを使いこなすということは、単にマクロを走らせることではない。「SolidWorksの内部エンジンであるPrtDocと、ユーザーの意図(マスタデータ)の間に、淀みのないパイプラインを構築すること」に他ならない。
多くのエンジニアが「コンフィギュレーション追加」で躓くのは、再構築(Rebuild)のタイミングと、オブジェクトの解放、そしてエラーハンドリングの欠如だ。今日は、エクセルからパーツのバリエーションを数千パターン叩き込むための、プロフェッショナルな設計論を授ける。
—
1. なぜ「力技のコード」は破綻するのか
初心者が書きがちなのは、`AddConfiguration3`をループで回し、その直後に`ForceRebuild3`を叩くというコードだ。
これは「メモリの墓場」への片道切符である。
- 無駄な再構築: 全てのパラメータを更新する前に再構築を走らせると、幾何学的なエラー(スケッチの崩れや合致の喪失)が連鎖する。
- オブジェクトの残留: `PartDoc`や`Configuration`オブジェクトを適切に参照解除しないと、プロセスがゾンビ化する。
- 非同期的なエラー: 形状が破綻した状態で次のバリエーションへ移行すると、SolidWorksは「何が起きているか」を教えてくれないままフリーズする。
—
2. 堅牢な設計指針:3つの黄金律
1. データ先行型処理: SolidWorksを触る前に、エクセル側の全データをメモリ(配列)に読み込む。APIとの対話回数を最小化せよ。
2. 遅延再構築(Deferred Rebuild): フィーチャの寸法変更を全て終えた後、最後に一度だけ`ForceRebuild3`を実行する。
3. 完全なクリーンアップ: 処理の終わりには必ず`DoEvents`を差し込み、COMオブジェクトの解放を促す。
—
3. 実践:高信頼性バリエーション生成スクリプト
このコードは、エクセルの「型式」「長さ」「幅」を読み込み、パーツにコンフィギュレーションを自動生成する。
‘ SolidWorks VBA プロダクション・コード
Option Explicit
Sub GenerateConfigurationsFromExcel()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swConf As SldWorks.Configuration
Dim swDim As SldWorks.Dimension
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then Exit Sub
‘ データを配列に格納(シート名「MasterData」を想定)
Dim dataRange As Variant
dataRange = ThisWorkbook.Sheets(“MasterData”).Range(“A2:C100”).Value
Dim i As Long
For i = 1 To UBound(dataRange, 1)
Dim confName As String: confName = dataRange(i, 1)
Dim valLen As Double: valLen = dataRange(i, 2)
Dim valWid As Double: valWid = dataRange(i, 3)
‘ 1. コンフィギュレーション追加(Add3メソッドの活用)
Set swConf = swModel.ConfigurationManager.AddConfiguration3( _
confName, “”, “”, swConfigurationOption2_SuppressByDefault)
If Not swConf Is Nothing Then
swModel.ShowConfiguration2 confName
‘ 2. 寸法の更新(パラメータ駆動)
‘ ※事前に寸法名(D1@Sketch1等)を特定しておくこと
swModel.Parameter(“Length@Sketch1”).SystemValue = valLen / 1000 ‘ メートル単位変換注意
swModel.Parameter(“Width@Sketch1”).SystemValue = valWid / 1000
‘ 3. エラーチェックを兼ねた再構築
‘ 毎回やると重いが、検証のために必要であれば実行
swModel.ForceRebuild3 False
End If
‘ プロセスの解放を助ける
DoEvents
Next i
MsgBox “全バリエーションの生成が完了しました。”
End Sub
—
4. 現場で生き残るための「高度な注意点」
単位系の罠
SolidWorksのAPIは内部的に「メートル・キログラム・秒(MKS)」で動作する。エクセルの数値がミリメートルなら、必ず1000で割る処理を忘れてはならない。これを怠ると、巨大なパーツが生成され、計算エラーでモデルが壊れる。
コンフィギュレーション・オプションの選択
`AddConfiguration3`の第4引数(`swConfigurationOption2`)は、パフォーマンスの要だ。
- `swConfigurationOption2_SuppressByDefault`: 新規コンフィグ作成時にフィーチャを抑制状態にする。大規模なアセンブリや複雑なパーツでは、これが最も動作が軽い。
エラーハンドリングの必須化
プロダクション環境では、`On Error GoTo`によるトラップを必ず実装すること。特定の寸法値がジオメトリ的に不可能(例:円の直径が0になる)な場合、`ForceRebuild3`が失敗する。このとき、どのコンフィギュレーションで落ちたかをログに残すロジックがないと、後で地獄を見る。
—
最後に:エンジニアへのメッセージ
自動化とは、単に工数を減らすことではない。「ヒューマンエラーという不確実性をシステムで排除すること」である。
今回紹介したコードは、あくまで「骨子」だ。ここに貴社の製品知識、つまり「どの寸法が変化するとどのフィーチャが影響を受けるか」という依存関係のロジックを肉付けしていってほしい。
APIは、使い手の設計思想を映し出す鏡だ。美しく、効率的で、誰が読んでも意図が伝わるコードを目指せ。それが、君を「ただのオペレーター」から「真のオートメーション・アーキテクト」へと引き上げる唯一の道である。
