【SolidWorks VBA】マクロの記録から卒業せよ!「一括エクスポート自動化」で実現する極上のエンジニアリング
こんにちは。SolidWorksの自動化の世界へようこそ。
日々、設計変更のたびに「名前を付けて保存」を繰り返し、STEP、PDF、DWGを書き出しているあなた。その時間は、本来あなたがクリエイティブな設計に注ぐべき貴重なリソースです。
今日は、SolidWorks VBAの真髄である「ModelDocExtension.SaveAs」を完璧に制御し、バックグラウンドでマルチフォーマットを一括出力する「攻めの自動化」を伝授します。
—
1. なぜ「マクロの記録」ではダメなのか?
多くの初心者が通る道、それが「マクロの記録」です。しかし、記録されたコードは「今開いている画面上の操作」をなぞるだけ。これではエラーハンドリングもできず、特定のフォルダへの体系的な保存もままなりません。
真の自動化エンジニアが目指すのは、「APIを直接叩き、SolidWorksの脳内を直接操作する」こと。今回は`ModelDocExtension.SaveAs`という強力なメソッドを使い、GUI(ダイアログ)を一切介さない「サイレント保存」を実装します。
—
2. 魔法のメソッド:SaveAsの全貌
SolidWorks APIにおいて、保存操作の頂点に君臨するのが `SaveAs` です。
これを使うことで、「どの形式で」「どんな設定で」「どこに」保存するかを完全にプログラミング可能です。
‘ 【重要】SaveAsの構文
‘ swModel.Extension.SaveAs(FilePath, Version, Options, ExportData, Errors, Warnings)
特に重要なのが `Options` 引数。ここで「上書き保存」や「最新情報で保存」といったフラグを制御します。ここを理解すれば、もう手作業でダイアログを閉じる必要はありません。
—
3. 実践:マルチフォーマット一括出力コード
以下のコードは、現在開いているパーツファイルを指定フォルダに「STEP」「PDF」「DWG」として一括出力するテンプレートです。
Sub ExportAllFormats()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swExt As SldWorks.ModelDocExtension
Dim savePath As String
Dim fileName As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then MsgBox “ファイルを開いてください”: Exit Sub
‘ 保存先の定義(実務ではここを動的に変更しましょう)
savePath = “C:\ExportFolder\”
fileName = Left(swModel.GetTitle, InStrRev(swModel.GetTitle, “.”) – 1)
Set swExt = swModel.Extension
‘ 1. STEP形式で保存
swExt.SaveAs savePath & fileName & “.step”, 0, 0, Nothing, 0, 0
‘ 2. PDF形式で保存(図面の場合に有効)
swExt.SaveAs savePath & fileName & “.pdf”, 0, 0, Nothing, 0, 0
‘ 3. DWG形式で保存
swExt.SaveAs savePath & fileName & “.dwg”, 0, 0, Nothing, 0, 0
MsgBox “全フォーマットの出力が完了しました!”
End Sub
—
4. プロの視点:陥りやすい罠と解決策
① 拡張子の罠
`SaveAs` メソッドは、ファイルパスの拡張子によって自動的にフォーマットを判別します。パスの文字列を構築する際、ファイル名にドットが含まれていると誤作動を起こすことがあります。`InStrRev` を使って確実に拡張子部分を分離するのが定石です。
② モデルの同期(Rebuild)
「保存したのに古い形状が出力された!」という経験はありませんか?
保存前に必ず `swModel.ForceRebuild3 False` を実行する癖をつけてください。モデルのジオメトリを強制的に再計算してから保存するのが、自動化の鉄則です。
③ エラーハンドリングの欠如
コード内で `Errors` と `Warnings` を取得できるようにしておくと、将来的に「なぜ保存できなかったのか」をログとして残せます。`Dim nErrors As Long, nWarnings As Long` を定義し、引数に渡す習慣をつけましょう。
—
5. 次のステップへ
今回のコードは、いわば「基本の型」です。ここから、
- フォルダ選択ダイアログを出して保存先を自由に選べるようにする
- ファイル名を自動採番して、日付フォルダに整理して出力する
- アセンブリ内の構成部品を再帰的に処理して、全パーツを個別に書き出す
といった応用が可能です。
SolidWorks VBAは、単なる事務作業の効率化ツールではありません。あなたの設計プロセスを、より速く、より正確で、より価値のあるものに変えるための「武器」です。
まずはこのコードをコピーして、自分の環境で動かしてみてください。何かエラーが出たら、それはシステムがあなたに「もっと深く知れ」と語りかけている証拠。その壁を超えたとき、あなたは本当の意味での「SolidWorks自動化エンジニア」への階段を一段登ったことになります。
応援していますよ。不明点があれば、またいつでも聞きに来てください。
