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

スポンサーリンク

SolidWorks自動化の真髄:Configuration.Add3によるバリエーション量産の最適解

現場で「VBAでコンフィギュレーションを回すとSWが落ちる」という嘆きを耳にするたび、私はいつもこう返す。「それはAPIのせいではない。貴方がメモリの呼吸を止めているからだ」と。

SolidWorksのAPI、特に`Configurations.Add3`を用いた自動生成は、適切に扱えば最強の武器になるが、無策で実装すれば瞬時にメモリリークを招き、プロセスを肥大化させる。本稿では、レガシーなVBA環境下で、いかに堅牢かつ高速にバリエーション展開を完遂するか、その「極限の知見」を共有する。

1. コンフィギュレーション生成の「禁忌」と設計指針

多くのエンジニアは、ループの中で無邪気に`Add3`を呼び出し、モデルを再構築させている。これが最大の間違いだ。

  • 再構築のコストを制御せよ: `swModel.ForceRebuild3`をループ内で多用してはならない。必要なのは「必要なときだけ、最小限のスコープで」計算を走らせることだ。
  • オブジェクトのライフサイクル管理: VBAにはガベージコレクタが存在しない。`Set obj = Nothing`をただ書けばいいと思っているなら甘い。COMオブジェクトの参照カウントを意識し、スコープを徹底的に細分化せよ。

2. 実装コード:堅牢なバリエーション自動生成エンジン

エクセル上のマスタデータを読み込み、パーツへ展開する実用的なパターンを提示する。エラーハンドリングとオブジェクト解放の作法に注目してほしい。

‘ 伝説的な堅牢性を担保するコンフィギュレーション生成ルーチン
Sub GenerateConfigurationsFromExcel()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swConfig As SldWorks.Configuration
Dim vConfigParams As Variant

‘ 1. アプリケーションの取得と高速化の準備
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If swModel Is Nothing Then Exit Sub

‘ 描画停止によるパフォーマンス向上(重要)
swApp.Visible = True
swModel.FeatureManager.EnableFeatureTree = False

‘ マスタデータ(配列)を想定
Dim vData As Variant
vData = Range(“A2:B10”).Value ‘ [型式名, 寸法値]

Dim i As Long
For i = LBound(vData, 1) To UBound(vData, 1)
‘ Add3の真髄: オプションフラグの制御
‘ swConfigOption_SuppressByDefault はパフォーマンスの要
Set swConfig = swModel.ConfigurationManager.Add3( _
vData(i, 1), “”, “”, swConfigOption_SuppressByDefault)

If Not swConfig Is Nothing Then
swModel.ShowConfiguration2 vData(i, 1)
‘ 寸法更新(Dimension.SystemValueを操作)
UpdateDimensions swModel, vData(i, 2)

‘ 最小限の再構築でメモリをクリーンに保つ
swModel.EditRebuild3
End If

‘ オブジェクトの明示的解放
Set swConfig = Nothing
Next i

‘ 後処理
swModel.FeatureManager.EnableFeatureTree = True
MsgBox “全バリエーションの生成が完了しました。”
End Sub

Private Sub UpdateDimensions(model As ModelDoc2, val As Double)
‘ 寸法の更新ロジックを分離することで、スコープを限定する
Dim swDim As Dimension
Set swDim = model.Parameter(“D1@Sketch1”)
swDim.SystemValue = val 0.001 ‘ m単位換算のケア
Set swDim = Nothing
End Sub

3. シニアエンジニアが意識すべき「裏側の技術」

Windows APIによる「生存確認」

大規模なバリエーション展開では、SolidWorksが「応答なし」に見える瞬間がある。これに対し、`User32.dll`の`GetInputState`や`SendMessage`を組み合わせることで、フリーズ検知と自動復旧ロジックを組み込むのがプロの流儀だ。単に待つのではなく、プロセスを監視せよ。

メモリの断片化対策

`Add3`で次々とフィーチャを生成すると、メモリ内のキャッシュが肥大化する。これを防ぐには、定期的な強制保存とモデルのクローズ・再オープンを挟むのが最も確実だ。

  • 30個生成ごとに、`swApp.CloseDoc` → `swApp.OpenDoc6` を実行せよ。
  • このオーバーヘッドは、全生成後に発生する「メモリ不足によるクラッシュ」の損失に比べれば微々たるものだ。

4. 総括:ツールを作るな、システムを作れ

「エクセルからパーツができる」ことは、自動化の入り口に過ぎない。
真の自動化とは、データの整合性を担保し、エラー時にはどこの行で、どの寸法が物理的に破綻したかをログとして残す「検証システム」を構築することである。

コードを書くときは、常に「このスクリプトを、自分以外のエンジニアが深夜3時に修正する羽目になったとき、どれだけ罵倒されるか」を想像せよ。疎結合な設計、明確なスコープ、そして何よりSolidWorksという複雑怪奇なエンジンの挙動への敬意。それこそが、伝説を築くアーキテクトの条件だ。

さあ、次は貴方の環境で、このアーキテクチャを昇華させてほしい。

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