【入門編】【エクスポート自動化】ModelDoc2.SaveAs3メソッドを使ったSTEP・Parasolid・IGESへのマルチフォーマット一括変換 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!現場でバリバリCADを使っていると、「このパーツ、取引先からSTEPとParasolid、あと念のためIGESも送ってって言われた…」なんてこと、よくありますよね。

画面を開いて、「名前を付けて保存」ポチー、形式を選んでポチー……。これを何十個もやっていると、手首が痛くなるだけでなく、絶対にヒューマンエラー(保存し忘れや、古いバージョンで上書きしちゃう等)が起き的です。

ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ!
今回は、現在開いているパーツモデルを、一度のクリックで複数フォーマットへ一斉に出力する「マルチフォーマット一括変換マクロ」の極意を、先輩エンジニアの私が徹底的に伝授します。

マクロの記録なんていう「おもちゃのコード」を卒業して、現場で即戦力になる本物の自動化を一緒に手に入れましょう!

1. なぜ「ModelDoc2.SaveAs3」なのか?

SolidWorksでファイルを保存・エクスポートするAPIといえば `SaveAs` ですが、歴史的背景からいくつかバージョンがあります。

私たちが使うべきは、現行のAPIで最も安定し、オプション制御の拡張性が高い `SaveAs3` メソッド です。

status = ModelDoc.SaveAs3(FileName, Version, Options)

このメソッドの何が素晴らしいかと言うと、「現在ドキュメントを開いているセッションを維持したまま、別名・別形式でコピーを出力できる」点にあります。余計なウィンドウを立ち上げる必要がないため、爆速で処理が完了します。

2. 現場で使える!マルチフォーマット一括変換マクロ

それでは早速、実戦でそのまま使えるコードをお見せします。
VBAエディタ(Alt + F11)を開き、標準モジュールに以下のコードを貼り付けてください。

Option Explicit

‘ =================================================================
‘ 担当者・チーフアーキテクト特製の極限エクスポートスクリプト
‘ 概要: アクティブなパーツを STEP / Parasolid / IGES へ一括出力する
‘ =================================================================
Sub BatchExportMultiFormat()

‘ 1. オブジェクトの宣言
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim activeDocPath As String
Dim folderPath As String
Dim fileNameOnly As String
Dim dotPos As Long

Dim savePathStep As String
Dim savePathX_t As String
Dim savePathIges As String

Dim lErrors As Long
Dim lWarnings As Long
Dim bRet As Boolean

‘ 2. SolidWorks アプリケーションの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ 【エラー対策】何も開いていない、またはパーツ以外なら即座に中止
If swModel Is Nothing Then
MsgBox “エクスポートするモデルが開かれていません。”, vbCritical, “エラー”
Exit Sub
End If

If swModel.GetType() <> swDocPART Then
MsgBox “このマクロは「パーツファイル」専用です。”, vbExclamation, “警告”
Exit Sub
End If

‘ 3. 現在のファイルパスとファイル名の解析
activeDocPath = swModel.GetPathName()

‘ まだ一度も保存されていない新規ファイルの場合は弾く
If activeDocPath = “” Then
MsgBox “未保存のファイルです。一度名前を付けて保存してから実行してください。”, vbCritical, “エラー”
Exit Sub
End If

‘ フォルダパスと拡張子を除いたファイル名を取得する匠の技
folderPath = Left(activeDocPath, InStrRev(activeDocPath, “\”))
dotPos = InStrRev(activeDocPath, “.”)
fileNameOnly = Mid(activeDocPath, InStrRev(activeDocPath, “\”) + 1, dotPos – InStrRev(activeDocPath, “\”) – 1)

‘ 4. 各フォーマットの出力パスを組み立て
savePathStep = folderPath & fileNameOnly & “.step”
savePathX_t = folderPath & fileNameOnly & “.x_t”
savePathIges = folderPath & fileNameOnly & “.igs”

‘ 5. 実行確認
Dim msgResult As VbMsgBoxResult
msgResult = MsgBox(“以下のフォーマットへ一括出力します:” & vbCrLf & _
“- STEP (.step)” & vbCrLf & _
“- Parasolid (.x_t)” & vbCrLf & _
“- IGES (.igs)” & vbCrLf & vbCrLf & _
“保存先: ” & folderPath & vbCrLf & vbCrLf & _
“処理を実行しますか?”, vbQuestion + vbYesNo, “一括エクスポート確認”)

If msgResult = vbNo Then Exit Sub

‘ 6. 爆速エクスポートの実行 (SaveAs3)
‘ 引数: SaveAs3(FileName, Version, Options)
‘ ※ Options = 1 (swSaveAsOptions_Silent) を指定すると、上書き確認などのダイアログを抑制できます。

‘ — STEP出力 —
bRet = swModel.SaveAs3(savePathStep, 0, 1)
If Not bRet Then
MsgBox “STEPファイルの出力に失敗しました。”, vbCritical
End If

‘ — Parasolid出力 —
bRet = swModel.SaveAs3(savePathX_t, 0, 1)
If Not bRet Then
MsgBox “Parasolidファイルの出力に失敗しました。”, vbCritical
End If

‘ — IGES出力 —
bRet = swModel.SaveAs3(savePathIges, 0, 1)
If Not bRet Then
MsgBox “IGESファイルの出力に失敗しました。”, vbCritical
End If

‘ 7. 完了通知
MsgBox “すべてのマルチフォーマット出力が正常に完了しました!”, vbInformation, “処理完了”

End Sub

3. コードの注目ポイントと知見の解説

初心者から一歩抜け出すために、このコードに込めた「プロのこだわり」を3つ解説します。

① 未保存ファイルやアセンブリの誤爆を防ぐガード節

実務で一番怖いのは、意図しないファイルに対してマクロが暴走することです。
`swModel.GetType() <> swDocPART` という一文を入れることで、アセンブリや図面でうっかり実行されたときにエラーで強制終了するのを防ぎ、優しく警告を出すようにしています。プロのコードには必ずこうした「守り」の記述があります。

② 文字列操作によるスマートなパス生成

`InStrRev` や `Left` を使って、現在開いているファイルの「フォルダの場所」と「拡張子を除いた名前」を動的に取得しています。これにより、ファイル名が何であれ、同じ場所にきれいに `.step` や `.x_t` が生成されます。ハードコーディング(固定のパス書くこと)はバグの元ですよ!

③ ダイアログを黙らせる `swSaveAsOptions_Silent (値: 1)`

`SaveAs3` の第3引数である `Options` に `1` を指定しています。
これが「サイレントモード」です。もし同名のファイルがすでに存在していた場合、通常なら「上書きしますか?」という邪魔な確認画面が出てマクロが止まってしまいます。このオプションを指定することで、裏側で自動的にスパッと上書き保存してくれるため、完全な全自動バッチ処理が可能になります。

4. 陥りやすいエラーと対策

  • エラー:ファイルが保存されていない(パスが空)
  • 対策: 新規作成しただけの「部品1.sldprt」の状態で実行すると `GetPathName` が空文字を返しエラーになります。必ず一度手動で名前を付けて保存してから実行する仕様にしています。
  • エラー:出力されたSTEPファイルが開けない、または空っぽ
  • 対策: システムオプションで、エクスポート時のバージョン(AP203 / AP214など)が古いCAD環境とミスマッチを起こしている可能性があります。必要に応じてSolidWorksのシステムオプションからデフォルトのエクスポート設定を確認してください。

おわりに:ここから広がる自動化の世界

今回は「開いている1つのパーツを3つのフォーマットに一挙に出力する」というテーマでお届けしました。

ここをクリアできれば、次は「指定したフォルダの中にある数百個のパーツを、夜間のうちにすべてSTEPに変換してシャットダウンする(ファイルダイアログと組み合わせたバッチ処理)」といった、本当の意味での業務自動化(RPA)の領域にスムーズに進むことができます。

SolidWorks VBAの基本は、オブジェクトを正しく掴み、適切なメソッドに正しい引数を渡すこと。
あなたの設計ライフが、このマクロによって少しでもスマートで快適なものになることを応援しています!

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