【入門編】【実務中級者向け】図面保存と同時に「PDF/JPGプレビュー」を自動生成する統合セーブマクロ – AutoCAD VBA解析バイブル

スポンサーリンク

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へステップアップする際にも必ず求められる「エンジニアの素養」です。

まずはこのコードをコピペして、自分の環境で動かしてみてください。「保存するたびにフォルダにファイルが増えていく」あの感動を、ぜひ味わってほしい。それがエンジニアとしての成長を加速させる最高の報酬です。

もしコードが動かない? それはあなたが「成長のチャンス」に直面している証拠です。エラーメッセージを読み解き、なぜ動かないのかを考える。そのプロセスこそが、あなたを伝説のエンジニアへと近づけるはずです。

さあ、次の自動化へ向けて、コードを書き始めましょう。応援しています!

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