【入門編】【ファイルコンバートの自動化】SaveAs関数を用いたPDF・STEP・IGES形式への一括変換マクロ – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks自動化】「開かずに変換」の極意|SaveAs APIで実現する一括コンバート術

こんにちは。現場で「繰り返し作業」という名の魂を削る作業を撲滅するために暗躍している、エンジニアの先輩です。

SolidWorksを使っていて、こんな悩みを抱えていませんか?
「図面を100枚PDFにするのに、いちいち開いて保存してを繰り返している…」
「STEPやIGESへの変換、もっとスマートに一括でできないのか?」

その作業、SolidWorksのAPI(Application Programming Interface)がすべて解決します。

今日は、ファイルを開くことなく、魔法のようにバックグラウンドで変換を行う「SaveAs関数」の本質を叩き込みましょう。マクロの記録ボタンを押すだけの世界とは今日でお別れです。

—

1. SolidWorks APIの「心臓部」を理解する

まずは、SolidWorksを操るための「二大巨頭」を知ってください。

  • SldWorksオブジェクト: SolidWorksアプリケーションそのもの。
  • ModelDoc2オブジェクト: 現在開いているドキュメント(部品・アセンブリ・図面)そのもの。

自動化の基本は、「SldWorksからドキュメントを開き、ModelDoc2のメソッド(命令)を呼び出して、SaveAsで出力する」。この流れです。

—

2. 【即戦力】一括コンバートマクロの全貌

今回は、「指定フォルダ内のファイルを読み込み、PDF/STEP/IGESに書き出す」ための汎用コードを用意しました。

Option Explicit

‘ 伝説の自動化エンジニアによる変換スクリプト
Sub BatchConvertFiles()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim folderPath As String
Dim fileName As String
Dim savePath As String

‘ SolidWorksオブジェクトを取得
Set swApp = Application.SldWorks

‘ 変換したいファイルが入っているフォルダを指定(適宜変更してください)
folderPath = “C:\Projects\ExportTarget\”
fileName = Dir(folderPath & “.sldprt”) ‘ 部品ファイルを対象

Do While fileName <> “”
‘ バックグラウンドでファイルを開く(Visible:=Falseで高速化)
Set swModel = swApp.OpenDoc6(folderPath & fileName, swDocPART, swOpenDocOptions_Silent, “”, 0, 0)

If Not swModel Is Nothing Then
‘ 保存パスを作成(拡張子を置換)
savePath = folderPath & Left(fileName, InStrRev(fileName, “.”) – 1) & “.pdf”

‘ SaveAsを実行!
‘ 第2引数: 0=上書き, 1=新規保存 | 第3引数: 構成設定 | 第4引数: 参照設定
swModel.SaveAs3 savePath, 0, 0

‘ メモリ解放のために閉じる(重要!)
swApp.CloseDoc fileName
End If

fileName = Dir
Loop

MsgBox “変換完了!”, vbInformation
End Sub

—

3. なぜ「マクロの記録」ではダメなのか?

初学者が最初にぶつかる壁が「マクロの記録」です。しかし、記録されるコードは冗長で、エラー処理が皆無です。

  • APIの選択: 記録されたコードは「どれを保存するか」を明示的に指定できません。今回使った `SaveAs3` メソッドなら、保存形式やオプションをコード内で自在に制御できます。
  • バックグラウンド処理: `OpenDoc6` メソッドのオプションを使えば、画面描画を停止して「見えない状態で」処理できます。これが圧倒的なパフォーマンスの差を生むのです。

—

4. 陥りやすいエラーと「賢い回避策」

現場でよくある失敗は、この2点に集約されます。

① 「ファイルが開けない」エラー

ファイルが既に他のユーザーによって開かれている、あるいは読み取り専用である場合に発生します。
対策: `If Not swModel Is Nothing Then` を使い、ファイルが開けたことを確認してから処理を進める「ガード節」を必ず入れましょう。

② メモリリーク(SolidWorksが重くなる)

ループ内で `CloseDoc` を忘れると、SolidWorksが裏で開きっぱなしになり、PCが悲鳴を上げます。
対策: 必ず `Set swModel = Nothing` をセットにし、オブジェクトを明示的にクリアする癖をつけましょう。

—

5. 次のステップへ:プロのエンジニアになるために

このコードをマスターしたあなたは、もう「マクロの記録」を使う必要はありません。次は、以下のようなステップアップを目指してください。

1. 拡張子を引数にする: サブプロシージャ化して、PDFだけでなくSTEPも同じロジックで呼び出せるようにする。
2. エラーログの作成: どのファイルが変換失敗したのかをテキストファイルに書き出す処理を追加する。

「面倒な作業はすべて自動化する」。それがこの世界で生き残るための、そしてクリエイティブな仕事に時間を割くための唯一の道です。

さあ、あなたのエディタを開いてください。まずはこのコードをコピペして、自分のPCで「秒速で変換される快感」を体験してみましょう。何かわからないことがあれば、またいつでも聞きに来てくださいね。応援しています!

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