【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)で制御できるように設計せよ。
「コードは書くものではなく、組み立てるもの」。
このモジュールをベースに、君たちの現場のワークフローに合わせた最適な「変換エンジン」を構築してほしい。
技術的な壁にぶつかったら、またここに戻ってくるといい。常に最高峰の解を提示しよう。
