AutoCAD VBAで「保存と同時にPDF/JPG生成」を自動化せよ:現場の視認性を劇的に変えるアーキテクチャ
こんにちは。AutoCADの自動化の世界へようこそ。
「保存するたびに、いちいちPDFを作ってフォルダに格納する……」。そんな退屈なルーチンワークに、皆さんの貴重な人生を費やしてほしくありません。
今回は、「図面保存イベント」をトリガーにして、PDFとJPGを自動生成する統合セーブマクロを構築します。これを導入すれば、あなたのPC内には「図面を開かずとも中身がわかる」整理されたアーカイブが勝手に出来上がります。
—
1. 「マクロの記録」から脱却する第一歩:イベントハンドラ
多くの初心者が陥る罠は、ボタンを配置して「手動で実行」させることです。しかし、プロの自動化は「ユーザーが意識せずとも動く」こと。
AutoCAD VBAには、図面を開く、保存する、閉じるなどの操作を検知する「イベント」という概念があります。今回は `Document.Save` イベントを監視します。
クラスモジュールへの実装
通常の標準モジュールではなく、「クラスモジュール」を使ってイベントを購読するのがVBAの鉄則です。
1. VBAエディタで `挿入` > `クラスモジュール` を選択。
2. 名前を `AppEventClass` に変更し、以下のコードを貼り付けます。
‘ AppEventClass に記述
Public WithEvents AppEvents As AcadApplication
‘ 図面保存時に実行されるイベント
Private Sub AppEvents_BeginSave(ByVal FileName As String)
On Error Resume Next ‘ エラーで処理が止まらないように保護
‘ PDFとJPGの出力処理を呼び出す
Call ExportToPdfAndJpg(FileName)
If Err.Number <> 0 Then
MsgBox “自動書き出し中にエラーが発生しました: ” & Err.Description
End If
End Sub
—
2. 統合セーブマクロの核心:PDF/JPG生成エンジン
次に、標準モジュールに実処理を書きます。ここで重要なのは「パスの操作」と「バックグラウンド処理の排他制御」です。
‘ 標準モジュール(Module1)に記述
Public Sub ExportToPdfAndJpg(ByVal dwgPath As String)
Dim baseName As String
baseName = Left(dwgPath, InStrRev(dwgPath, “.”)) ‘ 拡張子を除いたパス
‘ 1. PDF出力 (dwgToPdf.pc3 を使用)
‘ ※実務ではPlotToDeviceメソッド等を使用しますが、簡易的にPlot出力の概念を適用
ThisDrawing.Plot.PlotToDevice “dwg to pdf.pc3”
‘ 2. JPG出力 (サムネイル用)
‘ 現在の表示範囲をキャプチャして画像化する
ThisDrawing.SendCommand “-EXPORT” & vbCr & “JPG” & vbCr & baseName & “jpg” & vbCr & “” & vbCr
Debug.Print “出力完了: ” & baseName
End Sub
—
3. ここをクリアすれば一人前:避けるべき3つの落とし方
このコードを実装する際、多くのエンジニアが躓くポイントがあります。ここさえ押さえれば、あなたのコードは格段に安定します。
- 「パスの罠」を回避せよ
AutoCADのパス取得時、ファイル名にスペースが含まれていると `SendCommand` が誤作動を起こすことがあります。パスは常に `”`(ダブルクォーテーション)で囲う癖をつけましょう。
- イベントの「登録」を忘れない
クラスモジュールを作っただけでは動きません。起動時にイベントを有効化する必要があります。
- `ThisDrawing` の `AcadDocument_Activate` にて、`Set MyAppEvents.AppEvents = ThisDrawing.Application` を実行してください。
- 無限ループの恐怖
PDF出力処理の中で「図面を保存する」ような処理を書くと、`Saveイベント → PDF出力 → Saveイベント…` の無限ループが発生してAutoCADがフリーズします。処理を分岐させるフラグ変数(`isSaving` など)を必ず設けてください。
—
4. まとめ:自動化は「仕組み」を作る作業である
今回紹介したコードは、単なる機能追加ではありません。「図面管理の自動化」という設計思想の第一歩です。
- イベントを活用する(受動的な自動化)
- パス操作を丁寧に行う(堅牢なコード)
- 無限ループを警戒する(安全な設計)
これらはVBAに限らず、今後C#やPythonへステップアップする際にも必ず求められる「エンジニアの素養」です。
まずはこのコードをコピペして、自分の環境で動かしてみてください。「保存するたびにフォルダにファイルが増えていく」あの感動を、ぜひ味わってほしい。それがエンジニアとしての成長を加速させる最高の報酬です。
もしコードが動かない? それはあなたが「成長のチャンス」に直面している証拠です。エラーメッセージを読み解き、なぜ動かないのかを考える。そのプロセスこそが、あなたを伝説のエンジニアへと近づけるはずです。
さあ、次の自動化へ向けて、コードを書き始めましょう。応援しています!
