【実務・中級編】【初心者向け】マクロ記録機能の限界を知る!アセンブリ自動化で自作コードを書くべき理由と基本設計 – SolidWorks VBA解析バイブル

スポンサーリンク

マクロ記録は「設計図」ではない。SolidWorksアセンブリ自動化の闇と、プロが選ぶ堅牢な設計手法

SolidWorksでアセンブリの自動化を志したとき、誰もが最初に通る道が「マクロ記録機能」だ。しかし、このマクロ記録を信じてプロダクションコードを書こうとしているなら、今すぐ立ち止まってほしい。

マクロ記録が出力するコードは、単なる「操作の履歴」であり、再利用性もエラー耐性もゼロの「その場しのぎの文字列」に過ぎない。本稿では、なぜマクロ記録が実務で通用しないのか、そして堅牢なアセンブリ構築のための「真のアーキテクチャ」について解説する。

—

1. なぜ「マクロ記録」を使ってはいけないのか

マクロ記録が生成するコードには、致命的な欠陥が2つある。

欠陥1:`SelectByID2` への過度な依存

マクロ記録は、画面上の選択状態をベースにコードを生成する。
`swModel.Extension.SelectByID2(“Part1-1@Assembly1”, “COMPONENT”, …)`
このように、名前(文字列)でコンポーネントを特定する方法は、アセンブリの階層が変わったり、ファイル名が変更された瞬間に破綻する。 現場で修正に追われるエンジニアの最大の要因はここにある。

欠陥2:オブジェクトのライフサイクル無視

マクロ記録は、APIが内部で管理している「アクティブな選択セット」を操作する。しかし、プログラムは「どのオブジェクトを操作しているか」を明示的にハンドル(変数)として保持しなければならない。画面上の選択に頼るコードは、裏で別のウィンドウが開いたり、再計算が走ったりした瞬間に制御不能となる。

—

2. プロが実践する「堅牢なコンポーネント指定」の極意

堅牢なコードの要諦は、「文字列による検索」を避け、「オブジェクトの参照(IComponent2)」を維持することにある。

アセンブリ構築の際、以下のステップを徹底せよ。

1. 参照を取得する: `AddComponent6` メソッドの戻り値として、`IComponent2` オブジェクトを直接受け取る。
2. 名前を検索しない: コンポーネントを特定するために名前を使うのは、どうしても必要な時(DB連携等)のみにする。
3. 合致条件の直接指定: 面(Face)の選択も `SelectByID2` ではなく、オブジェクトの `GetEntityByName` や `GetSelectedObject6` を経由した「型」による指定を行う。

—

3. 実践:保守性の高いアセンブリ構築コード

以下は、コンポーネントを読み込み、明示的に合致を追加するプロダクションレベルの基本テンプレートだ。

‘ SolidWorks アセンブリ自動構築テンプレート
Option Explicit

Sub AddComponentAndMate()
Dim swApp As SldWorks.SldWorks
Dim swAssy As SldWorks.AssemblyDoc
Dim swComp As SldWorks.IComponent2
Dim swModel As SldWorks.ModelDoc2
Dim swMate As SldWorks.Mate2

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swAssy = swModel

‘ 1. コンポーネントの追加
‘ ファイルパスは定数化し、Config管理下に置くのが鉄則
Dim compPath As String
compPath = “C:\Parts\BasePlate.sldprt”

‘ 戻り値としてIComponent2を保持することで、以降の処理が確実になる
Set swComp = swAssy.AddComponent6(compPath, “Default”, 0, 0, 0, False)

If swComp Is Nothing Then
MsgBox “コンポーネントの挿入に失敗しました。”
Exit Sub
End If

‘ 2. ここで合致処理(簡略化例)
‘ 実務では swComp.GetModelDoc2 を経由して面を選択し、
‘ IAssemblyDoc::AddMate5 を呼ぶのが定石。
‘ 文字列検索(SelectByID2)は極力排除する設計を心掛ける。

swModel.EditRebuild3
End Sub

—

4. データベース連携とスケールする設計へのヒント

アセンブリ自動化が本格化すると、ExcelやSQL Server上のBOM(部品表)データと連携したくなるはずだ。その際、以下の鉄則を守るだけで保守コストは劇的に下がる。

  • コンフィギュレーション管理: アセンブリ内のコンポーネントは、必ず特定のコンフィギュレーションを指定して読み込む(`AddComponent6` の第2引数)。「Default」と決め打ちしないこと。
  • パスの抽象化: ファイルパスをコード内に直接書かず、設定ファイル(JSONやXML、または別シート)から読み込む。環境が変わってもコードを一行も書き換えない設計こそが、プロの仕事だ。
  • エラーハンドリングの義務: APIが返す `Boolean` 値を無視してはいけない。`If Not swAssy.AddComponent6(…) Then` と記述し、失敗時のログ出力とロールバック処理を必ず用意する。

最後に:なぜ「自作コード」が必要なのか

マクロ記録は、APIという広大な海を航海するための「コンパス」にはなり得る。しかし、目的地(自動化による業務効率化)に到達するためには、自ら操舵し、エンジンの仕組み(APIのライフサイクル)を理解しなければならない。

「動けばいい」というコードは、数ヶ月後の自分を苦しめる。今日紹介した「オブジェクト参照の維持」という考え方は、SolidWorks自動化の基礎体温だ。まずは、あなたのコードから `SelectByID2` を一つずつ減らすことから始めてほしい。

それが、世界最高峰の自動化エンジニアへの第一歩だ。

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