【入門編】【アセンブリ依存関係】PartDoc.EnumExternalFileReferencesを用いたパーツ内の外部ファイル参照パスの動的検査とレポート出力 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorksの「リンク切れ」を全自動検知せよ:外部参照管理の極意

こんにちは。現場でSolidWorksと格闘するエンジニアの皆さん。
「いざ設計変更しようとしたら、外部参照が切れていてモデルがボロボロ……」そんな悪夢のような経験、一度はありますよね。

特に、大規模なアセンブリや履歴の深いパーツを扱うとき、手動でリンクを確認するのは非効率の極みです。今日は、SolidWorks VBAの真髄である「外部参照の動的検査」について、プロの視点から解説します。

マクロの記録を卒業し、APIの深淵へと足を踏み入れましょう。

1. なぜ「EnumExternalFileReferences」なのか?

SolidWorksのモデルは、単体で完結しているわけではありません。「外部参照(External References)」という目に見えない糸で、他のファイルやアセンブリと繋がっています。

今回使う `EnumExternalFileReferences` は、その名の通り「外部参照を列挙する」ための強力なメソッドです。これを使えば、ドキュメントがどのファイルを参照し、現在そのパスが「有効か・無効か」をプログラムで一瞬にして判定できます。

陥りやすい罠:ファイル状態の把握

多くの初心者は、単にファイルを開こうとしてエラーで止まります。しかし、プロは違います。「開く前にパスの整合性を検知し、ログとして吐き出す」。このプロセスこそが、設計の上流工程における品質保証の鍵なのです。

2. 実践:外部参照検査マクロ

このコードは、現在開いているパーツやアセンブリの外部参照をスキャンし、リンク切れがあればCSV形式で結果を出力します。

Option Explicit

‘ 伝説のアーキテクトによる外部参照検査ルーチン
Sub CheckExternalReferences()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim vRefs As Variant
Dim i As Long
Dim filePath As String
Dim fso As Object
Dim ts As Object

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

If swModel Is Nothing Then MsgBox “対象ドキュメントが開かれていません。”: Exit Sub

‘ 外部参照を取得
vRefs = swModel.EnumExternalFileReferences

‘ ログファイル作成準備
Set fso = CreateObject(“Scripting.FileSystemObject”)
filePath = swModel.GetPathName & “_ReferenceLog.csv”
Set ts = fso.CreateTextFile(filePath, True)
ts.WriteLine “参照先パス, 状態”

‘ 配列の確認(vRefsがEmptyなら参照なし)
If Not IsEmpty(vRefs) Then
For i = 0 To UBound(vRefs)
‘ fso.FileExistsでパスの生存確認を行うのがプロの鉄則
If fso.FileExists(vRefs(i)) Then
ts.WriteLine vRefs(i) & “, 正常”
Else
ts.WriteLine vRefs(i) & “, 【リンク切れ】”
End If
Next i
Else
ts.WriteLine “外部参照なし, -”
End If

ts.Close
MsgBox “検査終了: ” & vbCrLf & filePath, vbInformation
End Sub

3. コードのポイント解説

① `EnumExternalFileReferences` の特性

このメソッドは、外部参照のパスを文字列の「配列」として返します。配列を扱う際は必ず `IsEmpty` でチェックしましょう。さもないと、参照がないファイルでマクロがクラッシュします。

② `Scripting.FileSystemObject` の活用

SolidWorksのAPIだけでなく、Windowsのファイルシステム管理(FSO)を組み合わせるのが自動化エンジニアの嗜みです。`FileExists` メソッドを使うことで、SolidWorksが「見失っている」ファイルを、OSレベルで確実に判定できます。

③ なぜCSV出力なのか?

レポートは「画面で見せる」のではなく「データとして残す」のが鉄則です。CSVにしておけば、Excelで開いてフィルタをかけ、リンク切れのパーツだけを即座に特定できるからです。

4. 読者の皆さんへ:ここをクリアすれば「脱・初心者」

このマクロを実装する過程で、以下の3つを意識してみてください。

1. エラーハンドリング: `On Error Resume Next` を闇雲に使うのはNGです。どこで失敗したかログを出せるようになりましょう。
2. オブジェクトの解放: コードの最後に `Set swModel = Nothing` を置く癖をつけてください。メモリ管理こそが、大規模アセンブリを操るエンジニアの矜持です。
3. 拡張性: このマクロに「特定のフォルダ配下を再帰的に巡回する」機能を加えれば、プロジェクト全体のリンクチェックツールへと進化します。

最後に

マクロは、単なる作業のショートカットではありません。「設計の健全性を守るためのセンサー」です。
今日のこの一歩が、あなたの設計ワークフローを劇的に安定させることを保証します。

次は、「見つけたリンク切れを、指定フォルダから自動再リンクする」という、より高難度な領域に挑戦してみるのも面白いでしょう。また現場でお会いしましょう!

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