【入門編】【初心者向け】アセンブリツリー内でコンポーネントの表示名をプログラムから変更して図面との整合性を保つ方法 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks APIの深淵へ:アセンブリツリーの「表示名」を操り、図面との整合性を極める

こんにちは。日々の設計業務、お疲れ様です。
「マクロの記録」ボタンを押すだけの自動化から一歩踏み出し、SolidWorksのAPIという広大な世界へようこそ。

今回は、アセンブリを扱っていると必ず直面する「ファイル名は変えたくないが、アセンブリツリー上の名前だけを分かりやすくしたい」という切実な願いを叶えるテクニックを伝授します。

図面の部品表(BOM)と整合性を保ちながら、設計意図をツリーに反映させる。これは、大規模アセンブリを管理するプロのエンジニアにとって必須の教養です。

—

1. なぜ「ファイル名」を直接変えてはいけないのか?

初心者の方が最初に陥りやすいのが、「部品の名前を変えたいからファイルをリネームする」というアプローチです。しかし、これをやるとSolidWorksの参照関係(Reference)は崩壊し、図面や他のアセンブリとのリンクが切れてしまいます。

そこで私たちが使うのは、`Component2` オブジェクトが持つ「ユーザー定義名(User-defined name)」という属性です。これを使えば、OS上のファイル名はそのままに、SolidWorksの画面上だけ名前を書き換えることが可能です。

—

2. 実践:コンポーネント名を書き換えるVBAコード

以下のコードは、現在選択している部品(コンポーネント)の名前を、「Project_A_001」のように動的に変更するサンプルです。

Sub RenameComponentInAssembly()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Dim swComp As SldWorks.Component2

‘ SolidWorksに接続
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ アセンブリ以外なら終了
If swModel.GetType <> swDocASSEMBLY Then
MsgBox “アセンブリを開いて実行してください。”
Exit Sub
End If

‘ 選択セットからコンポーネントを取得
Set swSelMgr = swModel.SelectionManager
Set swComp = swSelMgr.GetSelectedObjectsComponent4(1, -1)

If swComp Is Nothing Then
MsgBox “対象のコンポーネントを選択してください。”
Exit Sub
End If

‘ 【重要】ここで表示名を変更する
‘ Select2などの処理の前に実行するのがコツです
swComp.Name2 = “Project_A_001”

‘ 再構築して反映させる
swModel.ForceRebuild3 True

MsgBox “表示名を変更しました。”
End Sub

コードのここがポイント!

  • `swComp.Name2`: これが伝説のプロパティです。実は `Name` というプロパティもありますが、古いAPI互換のため、現代の設計現場では必ず `Name2` を使ってください。
  • `ForceRebuild3`: APIで名前を変えただけでは、画面上のツリーが即座に更新されないことがあります。この一文で「強制的に再描画」させるのが、バグを生まないエンジニアの嗜みです。

—

3. 陥りやすい罠:ここを理解すれば「脱・初心者」

罠その1:重複する名前は許されない

アセンブリ内で同じ名前を付けようとすると、SolidWorksはエラーを返します。自動化する際は、必ず `If` 文やループを使って「その名前が既に存在しないか」をチェックするロジックを挟みましょう。

罠その2:コンポーネントの選択状態

`SelectionManager` を使う際は、必ず `GetSelectedObjectsComponent4` を経由してください。単に「選択したもの」を扱うのではなく、「アセンブリツリーのどの階層のどの部品か」を特定するプロセスが、APIを安定させる秘訣です。

—

4. プロの視点:なぜこれが「図面整合性」に効くのか

図面のBOM(部品表)は、ファイル名やプロパティを参照しますが、アセンブリツリー上で「誰がどこに配置されているか」を判別しやすくしておくことは、設計ミスを劇的に減らします。

例えば、「シリンダ_A」「シリンダ_B」と名前を付けておけば、図面のバルーンを追う際にも、ツリーと図面が即座にリンクするようになります。この「人間にとっての分かりやすさ」をAPIで自動化することこそが、業務効率化の真髄です。

—

最後に:次のステージへ

このコードが動いたあなたは、もう「マクロの記録」を卒業しました。
次は、「アセンブリ内の全コンポーネントをループで回し、特定のルールに従って一括リネームする」という課題に挑戦してみてください。

SolidWorks VBAは、あなたの指先の延長にある強力な武器です。また困ったことがあれば、いつでもここへ来てください。あなたの設計が、より創造的でミスのないものになることを心から応援しています。

それでは、良いコーディングライフを!

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