こんにちは!SolidWorksの自動化の世界へようこそ。
マクロの記録ボタンを押してカタカタ図形をいじっていた時期から、「そろそろ本格的にVBAでバリバリ自動化したい!」と一歩を踏み出したあなたへ。
今回は、実務でめちゃくちゃ使う「コンフィギュレーションの階層的自動生成」をテーマにお話しします。
「親コンフィギュレーションがあって、その下に派生する子コンフィギュレーション(バリエーション)をズラッと一括で作りたい!」
そんな時、手動でポチポチ作っていたら手が何本あっても足りませんよね。これを`ConfigurationManager.AddConfiguration2`という強力なAPIを使って、VBAで一網打尽に自動化しちゃいましょう。
ここをクリアすれば、SolidWorks VBAの「オブジェクトの操り方」の基本がグッと体に染み込みますよ。一緒にバッチリマスターしていきましょう!
—
1. なぜ「派生コンフィギュレーションの階層化」なのか?
SolidWorksを使っていると、1つのパーツファイルの中に「型番違い」や「サイズ違い」を閉じ込めたくなりますよね。これがコンフィギュレーション機能です。
ここで重要なのが「親子関係(階層)」です。
- 親(マスター): 基準となる形状や共通のパラメータを持つ。
- 子(派生): 親の形状を引き継ぎつつ、特定の寸法や抑止状態だけを変えたバリエーション。
子コンフィギュレーションを「派生」として作っておくことで、親の設計変更が子にスルスルと追従してくれるという、CADにとって非常にスマートな状態が作れます。これをVBAで体系的に自動展開できれば、設計のヒューマンエラーはゼロになり、大量のバリエーション展開が一瞬で終わるようになります。
—
2. 魔法のメソッド:`AddConfiguration2` の正体
VBAからコンフィギュレーションを追加するには、`ConfigurationManager`(コンフィギュレーションマネージャー)というオブジェクトの `AddConfiguration2` メソッドを使います。
まずは、このメソッドの引数の顔ぶれを見てみましょう。ちょっと引数が多くて怯むかもしれませんが、怖くありません。一つひとつ紐解いていきます。
Dim swConfig As Configuration
Set swConfig = swConfigMgr.AddConfiguration2( _
ConfigName, _ ‘ ① 新しく作るコンフィギュレーションの名前
Comment, _ ‘ ② コメント(説明文)
AlternateName, _ ‘ ③ 代替名(通常は空欄でOK)
ParentConfigName, _ ‘ ④ 親となるコンフィギュレーションの名前 ←★ここがキモ!
DeriveFromExisting, _ ‘ ⑤ 既存のものを元にするか(True/False)
AdvanceState, _ ‘ ⑥ 状態を進めるか
BarCode _ ‘ ⑦ バーコード(通常は0)
)
💡 階層化のキモとなる引数
派生コンフィギュレーション(子)を作る上で絶対におさえておかなければならないのが、以下の2つの引数です。
1. `ParentConfigName` (④): どのコンフィギュレーションの「子ども」にするか、その親の名前を文字列で指定します。ここを空欄にすると、ただの独立した新規コンフィギュレーションになってしまうので注意!
2. `DeriveFromExisting` (⑤): 親から派生させる場合は `True` を指定します。
—
3. 実践!階層的コンフィギュレーション自動生成マクロ
それでは、実際に動かせるコードを見てみましょう。
今回は、マスターとなる親コンフィギュレーションを起点にして、3つの子コンフィギュレーション(サイズ違い:S, M, L)を自動で階層作成するサンプルコードです。
VBAの標準モジュールにペーストして、お手元のパーツファイルで実行してみてください。
Sub CreateHierarchicalConfigurations()
‘ — 1. オブジェクトの宣言 —
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swConfigMgr As SldWorks.ConfigurationManager
Dim swConfig As SldWorks.Configuration
‘ — 2. SolidWorks アプリケーションとアクティブドキュメントの取得 —
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ ドキュメントが開かれていない、またはパーツ・アセンブリ以外なら終了
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントがありません。”, vbCritical, “エラー”
Exit Sub
End If
‘ — 3. ConfigurationManager の取得 —
Set swConfigMgr = swModel.ConfigurationManager
‘ — 4. 親(マスター)コンフィギュレーション名の定義 —
Dim parentName As String
parentName = “Master_Model”
‘ 現在のアクティブなコンフィギュレーションを親としてリネーム(任意)
Set swConfig = swConfigMgr.ActiveConfiguration
swConfig.Name = parentName
‘ — 5. 子コンフィギュレーション(派生)をループで一括生成 —
Dim childNames As Variant
Dim i As Long
‘ 作りたいたい子コンフィギュレーションの配列
childNames = Array(“Type_S”, “Type_M”, “Type_L”)
Dim newConfigName As String
Dim addedConfig As SldWorks.Configuration
For i = LBound(childNames) To UBound(childNames)
newConfigName = childNames(i)
‘ 【重要】AddConfiguration2による派生コンフィギュレーションの生成
‘ 引数:Name, Comment, AlternateName, ParentName, DeriveFromExisting, State, Barcode
Set addedConfig = swConfigMgr.AddConfiguration2( _
newConfigName, _ ‘ 生成するコンフィギュレーション名
“Auto-generated child”, _ ‘ コメント
“”, _ ‘ 代替名
parentName, _ ‘ ★親コンフィギュレーション名を指定
True, _ ‘ ★親から派生させる (True)
True, _ ‘ 状態を進める
0 ‘ バーコード
)
If Not addedConfig Is Nothing Then
Debug.Print “成功: ” & newConfigName & ” を ” & parentName & ” の子として作成しました。”
Else
Debug.Print “失敗: ” & newConfigName & ” の作成に失敗しました。”
End If
Next i
‘ — 6. 画面を更新して完了メッセージ —
swModel.ViewZoomtoFit2 ‘ 全体表示にズーム
MsgBox “コンフィギュレーションの階層展開が完了しました!”, vbInformation, “完了”
End Sub
—
4. 陥りやすいエラーと「知る人ぞ知る」注意点
プログラミング初学者がこのテーマに挑むとき、ほぼ100%つまずくポイントがいくつかあります。ここで先回りしてクリアしておきましょう。
① 「親の名前が存在しない」エラー
`ParentConfigName` に指定した文字列が、パーツ内に実際に存在していないと、APIは冷たくエラーを返します(あるいは無視されて意図しない挙動になります)。
- 対策: コードを実行する前に、親となるコンフィギュレーションが確実に存在するか、あるいはコード内で確実にアクティブな名前を取得してから渡すようにしてください。
② コンフィギュレーション名が重複している
すでに同じ名前のコンフィギュレーションが存在する場合、新しく追加することはできません。
- 対策: 本番環境のコードにする場合は、作成前に既存のコンフィギュレーション名をループでチェックし、重複していないかガード節(存在チェック)を入れるのがプロの技です。
③ 画面が重い・フリーズするように感じる(パフォーマンスの罠)
コンフィギュレーションを大量(例えば50個、100個)に一気に作るとき、SolidWorksはご丁寧にコンフィギュレーションを切り替えるたびにグラフィックやジオメトリの再構築を裏で走らせようとします。 これがマクロを遅くする最大の原因です。
- プロの知見: 大量生成を行う前には、`swModel.EditRebuild3` や画面描画を一時停止するテクニック、あるいは極力モデルの再構築を抑制する配慮が必要です。まずは今回の少量のサンプルで動きを掴んでから、大規模データへの応用を考えてみてください。
—
5. おわりに
お疲れ様でした!今回は `ConfigurationManager.AddConfiguration2` を使った、派生コンフィギュレーションの階層的自動生成について解説しました。
「たった数行のループとメソッドで、何個ものバリエーションが体系的に生み出されていく」
この感覚を掴めば、SolidWorks VBAの面白さは何倍にも膨れ上がります。マクロの記録では絶対にたどり着けない、APIを直接叩く醍醐味を味わっていただけたのではないでしょうか。
ここをクリアしたあなたなら、パーツの自動生成だけでなく、アセンブリとの連動や、Excelからのデータ駆動型設計(Configurable Design)へのステップアップも余裕です。
あなたの自動化ライフが、より一層エキサイティングなものになりますように。それではまた、次の極限の知見でお会いしましょう!
