【入門編】【アセンブリ依存関係】PartDoc.ExternalFileReferencesを使ったパーツ内の外部参照(IN-CONTEXT)の有無チェックと切断自動化 – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks VBA極意】「外部参照(In-Context)」の呪縛を解く!自動化によるパーツ保守の完全自動化術

こんにちは。SOLIDWORKS自動化の深淵へようこそ。

現場でよく耳にする悲鳴があります。「アセンブリの親パーツを移動したら、子パーツの形状が崩壊した」「参照元が見つからず、パーツが読み取り専用で固定されてしまった」……。これらはすべて、外部参照(In-Context)がもたらす「呪縛」です。

今日は、マクロの記録ボタンを卒業し、APIの深層に触れることで、この厄介な外部参照を検知し、必要に応じて断ち切る「外科手術」のようなマクロを構築しましょう。ここをクリアすれば、あなたはSOLIDWORKSの設計資産を支配する側になれますよ。

1. 外部参照(In-Context)の正体を知る

SOLIDWORKSにおける外部参照とは、パーツが「自分以外のファイルの情報(アセンブリの他パーツやスケッチ)」を食って育つ状態を指します。

  • メリット: 親パーツに追従して形状が動く(連動性)。
  • デメリット: 親ファイルが移動・削除されると参照エラーが発生し、動作が重くなり、管理不能になる(依存性)。

APIにおいて、この状態を確認するには `PartDoc.GetExternalFileReferences` メソッドを使います。これは、パーツがどの外部ファイルに依存しているかを配列として引きずり出す、非常に重要な武器です。

2. 外部参照を検知・切断する究極のスクリプト

このコードは、現在のパーツが開いているアセンブリや外部ファイルへの依存関係をスキャンし、もし「参照切れ」や「意図しない依存」があれば、それらを断ち切る(`BreakAllExternalReferences`)処理を行います。

Option Explicit

‘ メインプロシージャ:アクティブなパーツの外部参照を管理する
Public Sub ManageExternalReferences()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc

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

‘ ドキュメントが開かれていない、またはパーツではない場合は終了
If swModel Is Nothing Or swModel.GetType <> swDocPART Then
MsgBox “パーツファイルを開いてから実行してください。”, vbCritical
Exit Sub
End If

Set swPart = swModel

‘ 外部参照の取得
Dim vRefs As Variant
vRefs = swPart.GetExternalFileReferences

‘ 配列が空であれば参照なし
If IsEmpty(vRefs) Then
MsgBox “このパーツには外部参照は存在しません。健全な状態です。”, vbInformation
Exit Sub
End If

‘ 外部参照のログを表示(デバッグウィンドウへ)
Debug.Print “— 検出された外部参照 —”
Dim i As Long
For i = LBound(vRefs) To UBound(vRefs)
Debug.Print vRefs(i)
Next i

‘ 【決断】参照を断ち切るか?
If MsgBox(“外部参照をすべて切断して、独立したパーツにしますか?” & vbCrLf & _
“※元には戻せません。”, vbYesNo + vbExclamation) = vbYes Then

‘ 外部参照の切断実行
Dim bRet As Boolean
bRet = swPart.BreakAllExternalReferences

If bRet Then
MsgBox “外部参照を切断しました。パーツは完全に独立しました。”, vbInformation
Else
MsgBox “切断に失敗しました。フィーチャの状態を確認してください。”, vbCritical
End If
End If

End Sub

3. ここが重要!開発現場で陥りやすい罠

このコードを実務で使う上で、以下の3点は必ず押さえておいてください。

① `BreakAllExternalReferences` の不可逆性

このメソッドは「核兵器」です。一度実行して保存すると、アセンブリとの連動性は二度と戻りません。開発環境では、必ずバックアップを取った上で検証してください。

② スケッチの投影と外部参照

「参照を切ったのにエラーが出る」という場合、スケッチ内の「投影されたエッジ」や「交差」が残っていることが大半です。APIで完全に消し去るには、フィーチャだけでなく、スケッチエンティティ内の外部依存関係(`Sketch.GetSketchExternalReferences`)まで遡る必要があります。まずは上のコードで大枠の依存を切ることから始めましょう。

③ パフォーマンスへの意識

アセンブリの規模が大きくなると、`GetExternalFileReferences` の呼び出し自体が重くなります。頻繁にチェックを行う場合は、`swModel.Extension.HasExternalReferences` を先に使い、依存がある場合のみ詳細を解析する「二段構え」にすると非常に高速です。

先輩からのアドバイス:自動化の先にあるもの

外部参照を制御できるようになると、あなたは「パーツの寿命」を管理できるようになります。

「プロジェクト開始当初はアセンブリの親に追従させ、設計が固まったら参照を断ち切って軽量パーツとしてライブラリ化する」

このサイクルをマクロで回すことで、あなたの設計チームのパフォーマンスは劇的に向上します。最初はエラーが出るかもしれませんが、それが成長の証です。

次は、スケッチの中身を解析し、特定の外部参照だけをピンポイントで切断する方法に挑戦してみましょうか。SOLIDWORKSのAPIは、知れば知るほど面白いですよ。また次回の講義でお会いしましょう。

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