こんにちは!SolidWorks自動化の世界へようこそ。
マクロの記録ボタンを押して生成されたコードを眺めるだけの日々は、今日で終わりにしましょう。
今回は、SolidWorks VBAにおいて最も基本的でありながら、実務の自動化では「絶対に避けて通れない最重要スキル」を取り上げます。それが、「現在のコンフィギュレーション名を取得し、名前によって処理を分岐させる方法」です。
ここをクリアすれば、1つのパーツファイルで「Aパターンならこの穴を開ける、Bパターンなら寸法を変える」といった動的な自動化の扉が開きます。優しく、かつ本質的なところまでしっかりと解説していきますね。
—
なぜ「コンフィギュレーション名の取得と分岐」が必要なのか?
SolidWorksを使っていると、1つのモデルの中に複数の形状バリエーション(標準品、特注品、試作モデルなど)を「コンフィギュレーション」として同居させることがよくありますよね。
もしあなたが、「現在画面に表示されている(アクティブな)コンフィギュレーションがどれであるか」をVBAで判定できなければどうなるでしょうか?
- 意図していない形状に対して穴あけフィーチャを生成してエラーになる
- 全てのコンフィギュレーションで同じ寸法になってしまい、バリエーション管理が崩壊する
こうした悲劇を防ぐために、「今、どのコンフィギュレーションがアクティブなのかをプログラム自身に自覚させ、状況に応じた処置を選ばせる(条件分岐する)」必要があるのです。
—
核心に迫る:ModelDoc2 と Extension の関係
SolidWorks VBAの根幹には、`SldWorks.ModelDoc2` というドキュメントを司る巨大なオブジェクトが存在します。現在開いているパーツやアセンブリは、すべてこの `ModelDoc2` の子孫です。
しかし、SolidWorksのAPI設計において、ドキュメントの「拡張機能(Extension)」や細かなメタデータへのアクセスは、`ModelDoc2.Extension` という専用の窓口(オブジェクト)に委譲されています。
現在のコンフィギュレーション名を取得する魔法の呪文がこちらです。
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim currentConfigName As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ Extension経由でアクティブなコンフィギュレーション名を取得
currentConfigName = swModel.Extension.GetActiveConfigurationName(swThisConfiguration)
💡 初心者がハマりやすいポイント:「ドキュメントが開いていない」エラー
VBAを実行した際、もしSolidWorksで何もパーツが開いていない状態で `swApp.ActiveDoc` を呼び出すと、`swModel` は `Nothing`(空っぽ)になり、次の行で「オブジェクト変数が設定されていません」というおなじみのエラー(実行エラー 91)が発生します。
実務のコードでは、必ず `If swModel Is Nothing Then` でドキュメントが開かれているかチェックする優しさを持ちましょう。
—
実践!コンフィギュレーション名に応じた処理の切り替えコード
それでは、実際にコピペして動かせる実用的なコードを見ていきましょう。
このスクリプトは、アクティブなコンフィギュレーション名が “Default” なのか、それとも “Custom” なのかを判定し、イミディエイトウィンドウにメッセージを出力するものです。
Sub CheckActiveConfiguration_Sample()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim currentConfigName As String
‘ 1. SolidWorksアプリケーションのインスタンスを取得
Set swApp = Application.SldWorks
‘ 2. 現在アクティブなドキュメントを取得
Set swModel = swApp.ActiveDoc
‘ 【安全装置】ドキュメントが開かれていない場合は処理を中断
If swModel Is Nothing Then
MsgBox “パーツまたはアセンブリファイルを開いてから実行してください。”, vbExclamation, “エラー”
Exit Sub
End If
‘ 3. 現在のコンフィギュレーション名を取得
‘ ※ swThisConfiguration は SolidWorksが用意している定義済み定数です
currentConfigName = swModel.Extension.GetActiveConfigurationName(swThisConfiguration)
‘ 4. 名前文字列に応じた条件分岐 (Select Case文を使用)
Select Case currentConfigName
Case “Default”
‘ — 標準(Default)コンフィギュレーションの場合の処理 —
Debug.Print “現在地: 標準モデル (Default)”
MsgBox “標準モデル用の処理を実行します。”, vbInformation, “判定OK”
‘ ここに標準用のフィーチャ操作コードなどを記述
Case “Custom”, “Special”
‘ — 特殊(Custom または Special)コンフィギュレーションの場合の処理 —
Debug.Print “現在地: 特殊モデル (” & currentConfigName & “)”
MsgBox “特殊モデル用の処理を実行します。”, vbInformation, “判定OK”
‘ ここに特殊用のパラメータ書き換えコードなどを記述
Case Else
‘ — 上記以外の予期せぬコンフィギュレーションの場合 —
MsgBox “未定義のコンフィギュレーションです: ” & currentConfigName, vbExclamation, “警告”
End Select
End Sub
—
コードのポイント解説
1. `Select Case currentConfigName` の採用
`If…ElseIf` でも書けますが、コンフィギュレーションが増えてきたときのメンテナンス性を考慮し、複数条件の分岐に強い `Select Case` を使っています。文字の大文字・小文字にも注意してください(SolidWorksはデフォルトで厳密に文字列を区別します)。
2. `Debug.Print` の活用
いきなりポップアップ(MsgBox)出すだけでなく、`Debug.Print` でVBAエディタの「イミディエイトウィンドウ」にログを吐き出す癖をつけておくと、後々のデバッグ効率が何倍にも跳ね上がります。プロのエンジニアはみんな使っていますよ。
—
まとめ:ここをクリアすれば基本はバッチリ!
お疲れ様でした!今回は `ModelDoc2.Extension.GetActiveConfigurationName` を使ったコンフィギュレーション名の取得と、`Select Case` による条件分岐の基本を学びました。
ここをマスターすれば、
- 「この形状バリエーションの時だけ、特定の穴の寸法をΦ10に変更する」
- 「特定のコンフィギュレーションの時だけ図面を自動保存する」
といった、「状況判断ができる賢いマクロ」が書けるようになります。マクロの記録の枠を大きく飛び越え、あなただけの強力な自動化ツールを作り上げていきましょう。
ここをクリアしたあなたなら、次のステップも余裕です。明日からのSolidWorksライフをさらに快適にしていきましょう!
