【実務・中級編】【エクスポート自動化】ModelDoc2.Extension.SaveAsサイレント保存を用いたSTEPAP214/242とParasolidの厳密なバージョン別一括出力 – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks VBA】究極のサイレントエクスポート:STEP/Parasolid一括変換の技術的極意

現場で「データ変換」という作業に時間を溶かしてはいないか?
GUIで「名前を付けて保存」を繰り返し、ダイアログと格闘し、バージョン設定を確認する。それはエンジニアの仕事ではない。

SolidWorks APIにおけるエクスポート自動化の真髄は、「Documentのライフサイクルをいかに制御し、Extensionオブジェクトをいかに正しく叩くか」に集約される。今回は、実務で死なない、堅牢で拡張性の高い一括変換アーキテクチャを伝授する。

1. なぜ「SaveAs」で躓くのか?

初心者が陥る罠は、`ModelDoc2.SaveAs`をそのまま使うことだ。これではダイアログが顔を出し、処理が止まる。
我々が使うべきは `ModelDocExtension.SaveAs` である。しかし、これも単に呼べばいいわけではない。特にSTEPファイルにおいて、バージョンや設定を制御するには `swExportData` という強力な武器を使いこなす必要がある。

制御の要:`swExportData`

STEPのAP214やAP242の指定、Parasolidのバージョン指定は、このオブジェクトのプロパティを操作することで「バックグラウンドで」完結させる。これを使わずに変換を行うのは、目隠しをして高速道路を走るようなものだ。

2. 堅牢なプロダクションコード

以下のコードは、単なるサンプルではない。実務で発生する「ファイルパスの不整合」や「拡張子の付け忘れ」を未然に防ぐ設計となっている。

‘ SolidWorks VBA: 高精度一括変換モジュール
Option Explicit

Public Sub ExportDocument(ByVal swModel As SldWorks.ModelDoc2, ByVal savePath As String, ByVal formatType As String)
Dim swExt As SldWorks.ModelDocExtension
Dim swExportData As SldWorks.ExportPdfData ‘ ※実は他の形式でも共通のインターフェース
Dim errors As Long, warnings As Long

Set swExt = swModel.Extension

‘ 重要: 拡張子を強制的に補正する防衛的プログラミング
Dim extension As String
Select Case UCase(formatType)
Case “STEP”: extension = “.step”
Case “X_T”: extension = “.x_t”
Case Else: Err.Raise 1001, , “未対応のフォーマットです”
End Select

If Right(savePath, 5) <> extension Then savePath = savePath & extension

‘ 保存オプションの設定 (サイレントモードの極意)
‘ swSaveAsOptions_Silent: ダイアログを殺す
‘ swSaveAsOptions_Copy: ドキュメントの参照関係を壊さずコピー
Dim options As Long
options = swSaveAsOptions_Silent + swSaveAsOptions_Copy

‘ 保存実行
Dim success As Boolean
success = swExt.SaveAs(savePath, swSaveAsCurrentVersion, options, Nothing, errors, warnings)

If Not success Then
Debug.Print “変換失敗: ” & savePath & ” (Error Code: ” & errors & “)”
End If
End Sub

3. 実務で勝つための「3つの設計指針」

① 常に「カレントセッション」の状態を意識せよ

`ModelDoc2`オブジェクトは、メモリ内で常に生存している。一括変換中に他のドキュメントを開く際、`Set swModel = swApp.ActivateDoc` を乱用すると、メモリリークやコンテキストの喪失を招く。`swApp.Documents`コレクションを直接走査し、必要に応じてファイルを`swApp.OpenDoc6`で読み込み、処理が終われば即座に`swApp.CloseDoc`で閉じる。この「開閉の作法」が、安定稼働の9割を決める。

② STEP変換の「APバージョン」はレジストリで制御する

SolidWorksのSTEPエクスポート設定は、実はAPIの引数以上に「システムオプション(レジストリ)」の影響を受ける。もし特定のAP242規格を厳密に守る必要があるなら、VBAから`swApp.SetUserPreferenceIntegerValue`を叩き、事前に設定を強制変更してから保存せよ。これが「厳密な一括出力」を実現する唯一の解だ。

③ データベース連携のベストプラクティス

変換したファイルをネットワークドライブに保存する場合、「まずローカル(Tempフォルダ)に書き出し、完了を確認してから移動(Move)する」こと。ネットワーク越しに直接保存すると、書き込み途中で接続が切れた際、0バイトのゴミファイルが残り、次回の実行で致命的なバグを引き起こす。

最後に:自動化とは「責務の分離」である

君たちが作るツールは、単なる変換スクリプトであってはならない。
「どのファイルを」「どの形式で」「どこに」保存するかを切り離し、設定ファイル(JSONやExcel)で制御できるように設計せよ。

「コードは書くものではなく、組み立てるもの」。
このモジュールをベースに、君たちの現場のワークフローに合わせた最適な「変換エンジン」を構築してほしい。

技術的な壁にぶつかったら、またここに戻ってくるといい。常に最高峰の解を提示しよう。

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