「記録」から「制御」へ。図面保存時にPDFとDWGを自動生成する、エンジニアへの第一歩
こんにちは。現場で自動化を推進しているアーキテクトです。
SolidWorksを使っていると、必ずと言っていいほど直面する「地味に、でも確実に時間を奪っていく作業」がありますよね。そう、「図面を保存した後、わざわざPDFとDWGに書き出して、決まったルールで名前を付けて、指定のフォルダに放り込む」という作業です。
「マクロの記録」を使えば、この一連の動作を記録することはできます。でも、記録されたコードを見てみてください。ファイル名が「図面1.pdf」のように固定されていたり、保存先があなたのPCのデスクトップに直結していたりしませんか?
これでは、ファイル名が変わるたびにマクロを書き直さなければなりません。これこそが「マクロの記録」の限界です。
今日は、その限界を突破しましょう。「図面のプロパティから図面番号とリビジョンを読み取り、自動的に名前を組み立てて、PDFとDWGを同時に出力する」。この仕組みを作ることで、あなたは「操作を記録する人」から「システムを制御するエンジニア」へと進化します。
ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ。
1. 設計図を描こう:自動化のメカニズム
いきなりコードを書き始めるのは、設計図なしで部品を作るようなものです。まずは、このマクロがどのような「論理のステップ」で動くのかを理解しましょう。
今回のマクロのワークフローは以下の4ステップです。
1. 情報の取得: 現在開いている図面の「カスタムプロパティ」から、「図面番号」と「リビジョン」という値を取り出す。
2. 名前の組み立て: 取り出した値を使って、「[図面番号]_[リビジョン].pdf」のようなファイル名を作成する。
3. パスの決定: 保存先のフォルダパスと、作成したファイル名を合体させる。
4. 書き出し実行: SolidWorksの命令(API)を使って、PDFとDWGをそれぞれ保存する。
この「情報を読み取って、加工して、命令する」という流れこそが、プログラミングの本質です。
2. 実装:自動エクスポート・マクロ
それでは、魂を込めて書いたコードを見ていきましょう。このコードは、初心者の方でも「何をしているか」がわかるように、極めて丁寧にコメントを記述しています。
' **
' ツール名: 図面自動エクスポート(PDF & DWG)
' 機能概要: 図面のカスタムプロパティに基づき、指定の命名規則でPDFとDWGを保存する
' 作成者: Senior Architect
' **
Option Explicit
Sub main()
' --- 1. 変数の宣言 ---
' SolidWorksのオブジェクトを操作するための「ハンドル」を定義します
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
' プロパティやファイル名に関する変数を定義します
Dim drawingNo As String
Dim revision As String
Dim baseFileName As String
Dim savePath As String
Dim fullPathPDF As String
Dim fullPathDWG As String
' エラーハンドリング用の変数
Dim errors As Long
Dim warnings As Long
' --- 2. SolidWorksへの接続 ---
' 現在動いているSolidWorksの本体(アプリケーション)を捕まえます
Set swApp = Application.SldWorks
' 今、画面に表示されているドキュメントを取得します
Set swModel = swApp.ActiveDoc
' 【重要】ドキュメントが開かれていない、または図面ではない場合のガード
If swModel Is Nothing Then
MsgBox "図面ファイルを開いてから実行してください。", vbExclamation
Exit Sub
End If
If swModel.GetType <> swDocDRAWING Then
MsgBox "このマクロは図面ファイル専用です。", vbExclamation
Exit Sub
End If
' 図面オブジェクトとして扱うためにキャスト(型変換)します
Set swDraw = swModel
' --- 3. カスタムプロパティの取得 ---
' ここがエンジニアの腕の見せ所です。図面の中身(データ)を読み取ります
' ※ プロパティ名 "PartNo" と "Rev" が図面に存在することを前提としています
drawingNo = swModel.GetCustomInfoValue("", "PartNo")
revision = swModel.GetCustomInfoValue("", "Rev")
' もしプロパティが空だったら、エラーを防ぐためにデフォルト値を入れます
If drawingNo = "" Then drawingNo = "UnknownNo"
If revision = "" Then revision = "0"
' --- 4. 保存ルール(命名規則)の構築 ---
' 保存先のフォルダを指定します(末尾に必ず \ を入れるのがコツです)
' 今回は図面と同じフォルダに保存する設定にします
savePath = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, "\"))
' ファイル名を組み立てます(例: ABC-123_RevA)
baseFileName = drawingNo & "_" & revision
' 拡張子を付けたフルパスを作成します
fullPathPDF = savePath & baseFileName & ".pdf"
fullPathDWG = savePath & baseFileName & ".dwg"
' --- 5. エクスポートの実行 ---
' PDFの出力
' SaveAs3メソッドを使用します。第4引数は「保存して閉じる」かどうか等の設定です
Dim status As Boolean
status = swModel.Extension.SaveAs(fullPathPDF, swSaveAsCurrentVersion, swSaveAsOptionsSilent, Nothing, errors, warnings)
If status Then
Debug.Print "PDF保存成功: " & fullPathPDF
Else
MsgBox "PDFの保存に失敗しました。エラーコード: " & errors, vbCritical
End If
' DWGの出力
' DWGも同様に、現在の形式で保存を実行します
status = swModel.Extension.SaveAs(fullPathDWG, swSaveAsCurrentVersion, swSaveAsOptionsSilent, Nothing, errors, warnings)
If status Then
Debug.Print "DWG保存成功: " & fullPathDWG
Else
MsgBox "DWGの保存に失敗しました。エラーコード: " & errors, vbCritical
End If
' --- 6. 完了通知 ---
MsgBox "エクスポートが完了しました!" & vbCrLf & _
"保存先: " & savePath & vbCrLf & _
"ファイル名: " & baseFileName, vbInformation
End Sub
3. アーキテクトの視点:ここが「プロ」への分かれ道
コードをコピペして動かすだけでは、あなたはまだ「ユーザー」です。このコードの裏側にある「なぜこう書くのか?」という意図を理解することで、あなたは「エンジニア」になれます。
① オブジェクトの「型」を意識する
コードの冒頭で `Dim swModel As SldWorks.ModelDoc2` と宣言しています。SolidWorks VBAの世界では、すべてのものは「オブジェクト」です。
「図面」という物体を、プログラムが扱えるように「ModelDoc2(モデルドキュメント)」という型に当てはめてあげているのです。これを怠ると、プログラムは「君が何を操作したいのか分からないよ」と混乱してしまいます。
② 「ガード(防御)」を固める
プロのコードには、必ず「もし~だったら、処理を中断する」というガードが組み込まれています。
- ファイルが開かれていない時 (`If swModel Is Nothing`)
- 図面ではないファイル(部品やアセンブリ)を開いている時 (`If swModel.GetType <> swDocDRAWING`)
これがないマクロは、予期せぬ操作をした瞬間にエラーでクラッシュし、ユーザーの信頼を失います。
③ パスの扱いは慎重に
`InStrRev` という関数を使っていますね。これは「文字列を後ろから検索して、最初に見つかった位置(この場合は最後の `\`)を返す」という関数です。ファイルパスの操作は、一文字間違えるだけで保存に失敗します。文字列操作の精度が、自動化の安定性を決めます。
4. 次のステップへのアドバイス
このマクロを動かしてみて、「成功した!」と感じたら、次は以下の課題に挑戦してみてください。これこそが、さらなる成長へのロードマップです。
1. フォルダの自動作成: 指定したフォルダが存在しない場合、`MkDir` 関数を使って自動で作るように改造してみる。
2. 禁止文字の排除: 図面番号に `/` や `:` などの「ファイル名に使えない文字」が入っていた場合、それを自動で `_` に置換する処理を追加してみる。
3. ログ出力: 成功したか失敗したかを、テキストファイルに記録する機能を作ってみる。
おわりに
マクロの記録から脱却し、自分でロジックを組み立てることは、最初は少し難しく感じるかもしれません。しかし、一度「自分の手でシステムを動かした」という感覚を掴めば、世界の見え方が変わります。
SolidWorks VBAは、あなたの強力な武器になります。一歩ずつ、着実に。
次は、もっと複雑で、もっと面白い自動化の世界で会いましょう。
Happy Automating!
