SolidWorks VBA極意:マルチフォーマット一括出力で「保存作業」を自動化せよ
こんにちは。SolidWorksの深淵を覗き込み、APIの海を渡り歩いてきたエンジニアです。
皆さんは、設計業務の最後に「STEPで保存して、次にParasolid、あ、STLも必要だった…」と、何度も名前を付けて保存を繰り返していませんか?その時間、極めて非効率です。
今日は、SolidWorks APIの神髄である`ModelDoc2.Extension.SaveAs`を使いこなし、ワンクリックで複数フォーマットを生成する「究極のサイレント保存」を伝授します。マクロの記録から卒業し、真の自動化エンジニアへの第一歩を踏み出しましょう。
—
1. なぜ「SaveAs」を極める必要があるのか
多くの初学者は「名前を付けて保存」をGUI(マウス操作)で行いますが、APIの世界では「Extension(拡張機能)」という概念が鍵を握ります。
`ModelDoc2.Extension.SaveAs`メソッドを使えば、SolidWorksの画面をフリーズさせることなく、裏側で静かに(サイレントに)ファイルを書き出すことが可能です。これこそが、業務効率を劇的に変える「自動化の魂」です。
押さえておくべき3つの壁
1. パスの構築: OSが理解できるフルパスを文字列で正しく生成できるか。
2. オプション指定: 保存時の条件(例:STLの精度やSTEPのプロトコル)をどう制御するか。
3. エラーハンドリング: ファイルが既に開いている、保存先がない、といった事態にどう備えるか。
—
2. 実践:マルチフォーマット一括出力スクリプト
以下のコードは、現在アクティブなパーツファイルを指定したフォルダに、拡張子を変えて一括出力するテンプレートです。現場でそのまま使えます。
‘ SolidWorksマルチフォーマット一括出力スクリプト
Sub ExportMultiFormat()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExt As SldWorks.ModelDocExtension
Dim savePath As String
Dim folderPath As String
Dim baseName As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ ドキュメントが開かれているか確認
If swModel Is Nothing Then MsgBox “ファイルを開いてください”: Exit Sub
‘ 出力フォルダ設定(ここではデスクトップの”Export”フォルダを想定)
folderPath = Environ(“USERPROFILE”) & “\Desktop\Export\”
If Dir(folderPath, vbDirectory) = “” Then MkDir folderPath
‘ ファイル名取得
baseName = Left(swModel.GetTitle, InStrRev(swModel.GetTitle, “.”) – 1)
Set swExt = swModel.Extension
‘ — ここから一括出力処理 —
‘ 1. STEP形式
swExt.SaveAs folderPath & baseName & “.step”, swSaveAsVersion_Automatic, _
swSaveAsOptions_Silent, Nothing, 0, 0
‘ 2. Parasolid形式
swExt.SaveAs folderPath & baseName & “.x_t”, swSaveAsVersion_Automatic, _
swSaveAsOptions_Silent, Nothing, 0, 0
‘ 3. STL形式
swExt.SaveAs folderPath & baseName & “.stl”, swSaveAsVersion_Automatic, _
swSaveAsOptions_Silent, Nothing, 0, 0
MsgBox “全フォーマットの出力が完了しました!”, vbInformation
End Sub
—
3. コードの読み解き:ここを理解すれば怖くない
- `swSaveAsOptions_Silent`: このフラグが「サイレント保存」の正体です。これがないと、保存のたびにダイアログが表示され、自動化が止まってしまいます。
- `swSaveAsVersion_Automatic`: ファイル形式のバージョンを自動判別します。特定のプロトコル(AP214など)が必要な場合は、ここをAPIリファレンスに従って調整します。
- `Environ(“USERPROFILE”)`: PCの環境に依存しないパス指定の定石です。`C:\Users\Name\…`と直書きしてはいけません。コードのポータビリティ(持ち運びやすさ)を意識しましょう。
—
4. 初学者が陥りやすい罠と対策
① パスに日本語が含まれている
VBAのパス文字列は非常にデリケートです。フォルダが存在しない場合、`SaveAs`はエラーを吐きます。必ず`Dir`関数でフォルダの存在を確認し、なければ`MkDir`で作るという「防衛的なコーディング」を心がけてください。
② モデルが「保存」されていない
APIはディスク上のファイルを参照します。未保存の状態で実行するとパスが取得できずエラーになります。自動化の前に、「保存されていない場合は一度保存を促す」処理を追加するのがプロの流儀です。
—
最後に:自動化は「あなたの時間」を取り戻すための投資
このスクリプトを使いこなせれば、1日あたり数分、年間で数時間の「単純作業」から解放されます。浮いた時間で、あなたはもっとクリエイティブな設計検討ができるはずです。
SolidWorks APIの世界は奥が深いです。まずはこのコードを動かし、次に「特定の面だけをエクスポートしたい」「図面も一緒にPDFで出したい」といった欲求が出てきたら、それがあなたの成長の証です。
次は、どの機能の自動化に挑戦しましょうか?また次の記事でお会いしましょう。あなたの設計ライフが、より快適なものになることを願っています。
