【入門編】【実務中級者向け】図面保存と同時に「納品用PDF」と「管理用JPG」を自動生成するマルチフォーマット・セーブ – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCAD VBAの世界へようこそ。
毎日の図面作成、本当にお疲れ様です。

「図面を保存して、クライアント提出用にPDFを書き出して、さらに社内管理用にJPG画像も用意して……」
気がつけば、退社間際に毎日同じような単調な作業を何回も繰り返していませんか?

今回は、そんな手作業の地獄からあなたを解放する「図面保存と同時にPDFとJPGを自動生成するマルチフォーマット・セーブ」のテクニックを伝授します。

マクロの記録ボタンをポチポチ押すだけのレベルはもう卒業です。ここをクリアすれば、AutoCAD VBAの基本と「真の自動化」の本質がバッチリ見えてきますよ。さあ、一緒に扉を開けましょう!

—

1. なぜ「マルチフォーマット・セーブ」が必要なのか?

実務の現場では、DWG(本体)の保存だけでなく、以下のような派生ファイルの作成がセットで行われます。

1. DWG保存:設計データの本体
2. PDF出力:納品用・確認用(レイアウト通りの正確なベクター出力)
3. JPG出力:サムネイル用・チャットツールやExcel台帳への貼り付け用(軽量な画像)

これらを1回のエクスポートやボタンクリックで全自動化できたら、ヒューマンエラー(PDFの出し忘れ、古いバージョンの上書きなど)は根絶できます。

AutoCAD VBAのオブジェクトモデルを正しく理解すれば、これは驚くほどシンプルなコードで実現可能です。

—

2. 実装の全体像(処理の流れ)

今回作成するマクロ(Subroutine)の動きは以下の通りです。

1. アクティブ図面とパスの取得:現在開いている図面がどこにあるか、名前は何かをVBAで特定します。
2. DWGの上書き保存:現在の図面をそのまま保存します。
3. PDFのエクスポート:あらかじめ設定されたページ設定(PlotConfig)を基に、PDFとして出力します。
4. JPGのエクスポート:画像書き出しコマンド(EXPORT / ラスター出力)を模して、JPG化します。

—

3. 実務でそのまま使える!最強の統合マクロコード

以下のコードを、AutoCADのVBAエディタ(`Alt + F11` で起動)の標準モジュールに貼り付けてください。

Option Explicit

Public Sub MultiFormatSaveAndExport()
‘ =========================================================================
‘ 開発者魂を込めた実務用マルチフォーマット・セーブ
‘ DWG保存 + PDF出力 + JPG出力をワンアクションで実行します。
‘ =========================================================================

Dim doc As AcadDocument
Set doc = ThisDrawing

‘ 1. 安全装置:まだ一度も保存されていない(名前未設定の)図面を弾く
If doc.Path = “” Then
MsgBox “この図面はまだ保存されていません。一度手動で名前を付けて保存してから実行してください。”, vbExclamation, “保存エラー”
Exit Sub
End If

On Error GoTo ErrorHandler

‘ 画面描画をフリーズさせて処理速度を劇的に上げる(プロの常道テクニック)
doc.Utility.Prompt “=== マルチフォーマット・セーブを開始します… ===” & vbCrLf

‘ —————————————————————–
‘ 2. DWG本体の保存
‘ —————————————————————–
doc.Save
doc.Utility.Prompt “-> DWGの保存が完了しました。” & vbCrLf

‘ 基本ファイル名(拡張子なし)のパスを取得
Dim basepath As String
basepath = doc.Path & “\” & Left(doc.Name, InStrRev(doc.Name, “.”) – 1)

‘ —————————————————————–
‘ 3. 納品用PDFの出力
‘ —————————————————————–
Dim pdfPath As String
pdfPath = basepath & “_納品用.pdf”

‘ レイアウト(空間)に対してPDFパブリッシュを実行
‘ ※注意: あらかじめページ設定で「DWToPDF.pc3」などが正しく設定されている前提です
Dim currentLayout As AcadLayout
Set currentLayout = doc.ActiveLayout

‘ ここでは「ビューポート(画面表示)」ではなくレイアウト設定に従ってプロット
doc.Plot.PlotToDevice pdfPath
doc.Utility.Prompt “-> PDFの生成が完了しました: ” & pdfPath & vbCrLf

‘ —————————————————————–
‘ 4. 管理用JPGの出力
‘ —————————————————————–
‘ AutoCADのEXPORTコマンドはVBAからSendCommandで叩くのが最も確実で安全です
Dim jpgPath As String
jpgPath = basepath & “_サムネイル.jpg”

‘ 既存の同名JPGがあれば事前に削除(上書きエラーを防ぐプロの配慮)
If Dir(jpgPath) <> “” Then
Kill jpgPath
End If

‘ コマンドライン経由でEXPORTを実行 (_.EXPORT 図面名.jpg All )
‘ _. の前のアンダースコアは、言語環境(英語/日本語)に依存しないための鉄則です
Dim cmdStr As String
cmdStr = “_.-EXPORT ” & “G ” & Chr(34) & jpgPath & Chr(34) & ” All ” & vbCr
doc.SendCommand cmdStr

doc.Utility.Prompt “-> JPGの生成が完了しました: ” & jpgPath & vbCrLf

‘ —————————————————————–
‘ 完了通知
‘ —————————————————————–
MsgBox “すべての処理が正常に完了しました!” & vbCrLf & _
“・DWG保存” & vbCrLf & _
“・PDF出力” & vbCrLf & _
“・JPG出力”, vbInformation, “マルチセーブ成功”

Exit Sub

ErrorHandler:
‘ エラーハンドリング:予期せぬクラッシュを防ぐ防壁
MsgBox “エラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical, “致命的なエラー”

End Sub

—

4. コードの深掘り解説:ここがプロの技術

初心者から一歩抜け出すために、このコードに散りばめられた「エンジニアのこだわり」をいくつか解説します。

① 未保存チェック (`doc.Path = “”` のトラップ回避)

新規作成してまだ一度も名前をつけていない図面に対して `.Save` を呼ぶと、AutoCADは「どこに保存すればいいの?」とダイアログを出して止まってしまいます。VBAでこれをやられるとマクロが沈黙(フリーズ状態)します。
そのため、最初に `doc.Path` が空っぽでないかをチェックし、優しく警告を出して処理を安全に中断するようにしています。

② 言語依存を撃退するアンダースコア `_.`

AutoCADのコマンドを `SendCommand` で実行する際、日本語版と英語版でコマンド名が違う(例: `_.EXPORT` と `_EXPORT`)問題が発生します。
コマンドの頭にピリオドとアンダースコア(`_.-EXPORT`)をつけることで、「組み込みの標準コマンドを、英語のグローバル名で強制実行する」というお呪いになります。これは実務VBAでは絶対知っておくべき必須知識です。

③ Chr(34) によるパス囲み

ファイルパスに「スペース(半角・全角)」が含まれている場合、コマンドラインはパスを正しく認識できずエラーになります。これを防ぐため、パスの前後をダブルクォーテーション (`”`) で囲む必要があります。VBA内でダブルクォーテーションを表現するために `Chr(34)` を使っています。

—

5. 陥りやすい罠とトラブルシューティング

実際にこのマクロを動かしたときに、多くの人がつまずくポイントを先回りして解説します。

  • Q. PDFが出力されない、あるいは真っ白になる
  • A. `PlotToDevice` メソッドは、現在のレイアウト(タブ)に割り当てられている「ページ設定(プリンタ名や用紙サイズ)」をそのまま使います。あらかじめ手動で一度「DWToPDF.pc3」などを設定し、レイアウトが正常に印刷できる状態にしておいてください。
  • Q. JPGの書き出しでコマンドが止まる
  • A. `SendCommand` は非同期で実行されるため、極まれに描画速度が追いつかないことがあります。もしJPGがうまく生成されない場合は、環境変数やプロット設定の見直しが必要です。

—

まとめ

今回は、DWGの保存と同時にPDFとJPGを生成する「マルチフォーマット・セーブ」の極意をお伝えしました。

ここをクリアできれば、AutoCAD VBAの「図面ファイル操作」「プロット(出力)制御」「コマンドのハッキング(SendCommand)」という3大重要スキルが自然と身についています。

毎日のルーティンワークをコードに語らせ、あなた自身のクリエイティブなデザインや設計の仕事に集中する時間を手に入れましょう。
それでは、次のステップでお会いしましょう!

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