SolidWorks APIの「深淵」を覗く:ファイル一括変換の真髄
設計現場で最も退屈かつ時間を奪う作業は何か? それは「図面を開き、エクスポートし、閉じる」という単純作業の繰り返しだ。もし君が毎日10分かけてこの作業をしているなら、年間で丸二日をドブに捨てていることになる。
今回は、SolidWorks APIの神髄である`SaveAs`メソッドを使い、「ファイルを極力開かず(あるいは高速に処理し)、一切のヒューマンエラーを排除する」ための、プロダクションレベルの自動化アーキテクチャを伝授する。
—
1. なぜ「単純なコード」では現場で破綻するのか
多くの初心者が書くマクロは、`SldWorks.OpenDoc6`をループで回すだけの脆弱な代物だ。しかし、現場のデータには必ず「例外」が存在する。
- アセンブリの構成部品が見つからない(参照エラー)
- ダイアログが勝手に出てきて処理が止まる
- メモリリークにより、100ファイルを超えるとSolidWorksがクラッシュする
これらを防ぐには、「沈黙のオペレーション」を徹底する必要がある。
—
2. 堅牢な一括変換アーキテクチャ(VBAコード例)
以下のコードは、単に変換するだけでなく、SolidWorksの「GUIの非表示」と「エラーハンドリング」を徹底した構成だ。
Option Explicit
‘ 伝説のエンジニアの知恵:オブジェクトは最小単位で解放せよ
Public Sub BatchConvertFiles()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim strFolderPath As String
Dim strFileName As String
Dim strExportPath As String
Set swApp = Application.SldWorks
‘ バックグラウンド処理の要:ダイアログを抑制する
swApp.UserControl = False
swApp.Visible = False ‘ 完全に裏で回すならTrueをFalseに
strFolderPath = “C:\SourceFiles\”
strFileName = Dir(strFolderPath & “.sldprt”)
Do While strFileName <> “”
‘ 読み取り専用で開くのが鉄則。余計な書き込み権限でロックさせない
Set swModel = swApp.OpenDoc6(strFolderPath & strFileName, swDocPART, swOpenDocOptions_ReadOnly, “”, 0, 0)
If Not swModel Is Nothing Then
‘ PDFとSTEPを同時出力する例
Call ExportFile(swModel, “C:\Export\”, “pdf”)
Call ExportFile(swModel, “C:\Export\”, “step”)
swApp.CloseDoc swModel.GetTitle
End If
strFileName = Dir
Loop
swApp.Visible = True
MsgBox “変換処理が完了しました。”, vbInformation
End Sub
Private Sub ExportFile(model As ModelDoc2, folder As String, ext As String)
Dim savePath As String
savePath = folder & Left(model.GetTitle, InStrRev(model.GetTitle, “.”) – 1) & “.” & ext
‘ SaveAsの第5引数は非常に重要。オプション設定を正確に行う必要がある
model.SaveAs3 savePath, 0, 0
End Sub
—
3. 現場で生き残るための「3つの絶対鉄則」
① 参照ファイルの断絶を恐れるな
`OpenDoc6`の第4引数(Errors)と第5引数(Warnings)を無視してはいけない。特に大規模アセンブリでは、参照が切れていると`OpenDoc`がハングアップする。`swOpenDocOptions_Silent`を指定し、ダイアログを強制的にバイパスさせる設計が必須だ。
② メモリの掃除(Garbage Collection)
VBAはCOMオブジェクトの管理が甘い言語だ。`Set swModel = Nothing`をループの最後で必ず実行し、メモリを解放する癖をつけろ。これを行わないと、変換ファイル数が増えるにつれてSolidWorksの動作が重くなり、最終的にはアクセス違反で落ちる。
③ 出力パスの正規化
ファイルシステム上のパス指定には、必ず末尾に `\` が存在するかをチェックするラッパー関数を噛ませろ。`C:\Output` と `C:\Output\` を混同するようなコードを書いてはいけない。
—
4. 最後に:エンジニアとしてのマインドセット
自動化スクリプトは、「動けばいい」ものではない。「誰がメンテナンスしても壊れない」ように設計されて初めて、それは業務改善ツールとなる。
今後、もし君がさらに高度なことをしたいなら、`DocumentManager API`を検討するといい。これはSolidWorksを立ち上げることなく、バイナリレベルで情報を抜き出すための究極のツールだ。速度は現在の10倍以上になる。
だが、まずはこのコードで「確実に動く」という成功体験を積み重ねてほしい。コードは君の意思の現れだ。適当に書けば適当な結果しか返ってこない。最高品質のコードを書き、設計者の時間を奪う退屈な作業から、世界を解放しよう。
さあ、コンパイルして結果を見せてくれ。
