【実務・中級編】【コンフィギュレーション連携】Configurations.Add3を用いたバリエーション展開とエクセル表からの自動一括生成 – SolidWorks VBA解析バイブル

スポンサーリンク

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は、使い手の設計思想を映し出す鏡だ。美しく、効率的で、誰が読んでも意図が伝わるコードを目指せ。それが、君を「ただのオペレーター」から「真のオートメーション・アーキテクト」へと引き上げる唯一の道である。

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