【入門編】【初心者向け】SldWorks.ModelDoc2からGetCurrentConfigurationで現在のコンフィギュレーション名を取得し分岐処理を行う基本 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorks自動化の世界へようこそ。
チーフアーキテクトの私だ。

マクロの記録ボタンを押して生成されたコードを眺めて、「おっ、動いたぞ!」と感動するのも束の間。
いざ実務で使おうとすると、「あれ? 今選ばれているコンフィギュレーションによって、処理を変えたいんだけど、どう書けばいいんだ…?」 と手が止まってしまったことはないだろうか?

そう。マクロの記録は、操作をそのままトレースしてくれる優秀な相棒だが、「現在の状態を判断して分岐する」というプログラミングの核心的なスキルまでは教えてくれない。

でも、安心してほしい。ここをクリアすれば、君のSolidWorks VBAスキルは「ただの自動お人形さん」から「意思を持った自動化システム」へと劇的に進化する。
今日は、パーツファイルの中で現在アクティブなコンフィギュレーション名を取得し、条件によって処理を華麗に分岐させる基本の「キ」を、優しく、そして本質的なところまでしっかりと伝授しよう。

1. なぜ「コンフィギュレーションの判定」が重要なのか?

SolidWorksを使っていると、1つのパーツファイルの中に「大サイズ」「小サイズ」「標準品」といった複数のバリエーション(コンフィギュレーション)を同居させることがよくあるよね。

VBAで自動化を行うとき、こんな壁にぶつかるはずだ。

  • 「標準品」の時だけ、特定の穴フィーチャを追加したい。
  • 「大サイズ」の時だけ、マテリアル(材質)を別のものに変更したい。

もし、現在のコンフィギュレーションがどれなのかをVBA側で把握できていないと、意図しないコンフィギュレーションに対して処理を実行してしまい、モデルが崩壊する大惨事になりかねない。

だからこそ、「今、俺はどのコンフィギュレーションをいじっているんだ?」と、コードが自ら確認する手順(判定と分岐)が絶対に不可欠なのだ。

2. 魔法のAPI:`GetCurrentConfiguration` の正体

現在アクティブなコンフィギュレーション名を取得するには、`SldWorks.ModelDoc2` オブジェクトが持つ `GetCurrentConfiguration` というメソッドを使用する。

ここで、SolidWorks APIの構造を少しだけ思い出してほしい。

  • `SldWorks`: SolidWorksのアプリケーションそのもの。
  • `ModelDoc2`: 今、画面で開いている「ドキュメント(パーツ、アセンブリ、図面)」のこと。

つまり、「今開いているドキュメント(ModelDoc2)の、現在のコンフィギュレーション名をくれ!」と頼むわけだ。

📌 基本のコード構造

百聞は一見に如かず。まずは以下のコードを見てほしい。これが、コンフィギュレーションを判定して処理を分岐させる基本形だ。

Sub CheckCurrentConfiguration_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. 現在のコンフィギュレーション名を取得(文字列型で返ってくる)
currentConfigName = swModel.GetCurrentConfiguration()

‘ 4. 取得した名前をもとに、条件分岐(If文)を行う
Select Case currentConfigName
Case “デフォルト”
MsgBox “現在は「デフォルト」コンフィギュレーションです。” & vbCrLf & _
“標準の処理を実行します。”, vbInformation
‘ ここに標準用の処理を書く

Case “大サイズ”
MsgBox “現在は「大サイズ」コンフィギュレーションです。” & vbCrLf & _
“専用の拡張処理を実行します。”, vbInformation
‘ ここに残りの処理を書く

Case Else
MsgBox “想定外のコンフィギュレーションです: ” & currentConfigName, vbExclamation
‘ その他の場合の処理
End Select

End Sub

3. コードのポイントと、初心者が陥りやすい罠

上記のコードには、プロのエンジニアとして後々痛い目を見ないための「知見」がいくつか詰まっている。ポイントを解説しよう。

① ドキュメントが開かれていないエラーを防ぐ

`Set swModel = swApp.ActiveDoc` を実行したとき、もしSolidWorksで何もファイルが開かれていないと、`swModel` には `Nothing`(空っぽ)が代入される。
この状態で `GetCurrentConfiguration()` を呼び出そうものなら、VBAはお馴染みの「実行時エラー ’91’: オジェクト変数または With ブロック変数が見つかりません」を盛大に吐き出して強制終了する。

実務で動かすマクロには、必ず `If swModel Is Nothing Then` という「ガード節」を置くこと。これがバグを防ぐ大原則だ。

② 返り値は「文字列(String)」である

`GetCurrentConfiguration()` は、コンフィギュレーションの名前を文字列として返す。
そのため、条件分岐の `Case` や `If` で比較する際は、SolidWorksの画面に表示されているコンフィギュレーション名と一字一句(大文字・小文字、全角・半角スペースも含めて)完全に一致させる必要がある。
「動かないな?」と思ったときは、大抵ここがタイポ(入力ミス)しているケースがほとんどだ。

4. さらに現場で役立つ実践テクニック:コンフィギュレーションの切り替え

コンフィギュレーションの「取得」ができるようになったなら、ついでに「切り替え」の方法も覚えておこう。
もしVBA側で別のコンフィギュレーションに切り替えてから処理をしたい場合は、`ShowConfiguration2` というメソッドを使う。

‘ 「標準品」という名前のコンフィギュレーションに切り替える場合
Dim status As Boolean
status = swModel.ShowConfiguration2(“標準品”)

If status = True Then
Debug.Print “コンフィギュレーションの切り替えに成功しました。”
Else
Debug.Print “指定したコンフィギュレーションが存在しません。”
End If

※ `ShowConfiguration2` は、切り替えに成功すると `True`、失敗すると `False` を返してくれる。これも非常に優秀な仕様だ。

まとめ

今回は、`SldWorks.ModelDoc2` から `GetCurrentConfiguration` を用いて現在のコンフィギュレーション名を取得し、条件分岐を行う基本を解説した。

  • `swModel.GetCurrentConfiguration()` で現在の名前(String)が取れる。
  • 実行前には必ず `swModel Is Nothing` でファイルが開かれているか確認する。
  • 文字列の比較なので、名前のスペルミスに注意する。

ここをクリアできれば、パーツのバリエーションごとに処理を自動で切り替える賢いマクロが作れるようになる。君の業務効率化の幅はグッと広がるはずだ。

一歩一歩、確実にSolidWorks VBAを自分の手中に収めていこう。
次のステップでも、最高に役立つ知見を届けていく。期待していてくれ!

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