【実務・中級編】【ファイルコンバートの自動化】SaveAs関数を用いたPDF・STEP・IGES形式への一括変換マクロ – SolidWorks VBA解析バイブル

スポンサーリンク

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倍以上になる。

だが、まずはこのコードで「確実に動く」という成功体験を積み重ねてほしい。コードは君の意思の現れだ。適当に書けば適当な結果しか返ってこない。最高品質のコードを書き、設計者の時間を奪う退屈な作業から、世界を解放しよう。

さあ、コンパイルして結果を見せてくれ。

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