【入門編】【実務中級者向け】「ExportLayout」コマンドの自動化:ペーパー空間をモデル空間へ変換して保存する – AutoCAD VBA解析バイブル

スポンサーリンク

レイアウトをモデルへ解き放つ:AutoCAD VBAによる「ExportLayout」自動化の極意

こんにちは。現場で泥臭い自動化を積み重ね、AutoCADのAPIの深淵を覗いてきたエンジニアです。

今日は、多くの設計者が一度は直面する「あの壁」を突破します。
「レイアウト空間にある複雑な図面を、取引先に渡すためにモデル空間へ変換したい。でも、手作業でコピー&ペーストするのはもう限界……」

そう、AutoCADには標準コマンドで`EXPORTLAYOUT`という魔法のような機能があります。今回は、これをVBAで完全に制御し、業務を自動化する術を伝授しましょう。単なるコードのコピペではなく、「なぜそう動くのか」という設計思想まで持ち帰ってください。

—

1. なぜ「EXPORTLAYOUT」を自動化するのか?

レイアウト空間には、ビューポート、尺度設定、XREFなど、他CAD(特に汎用CAD)が嫌がる要素が詰まっています。`EXPORTLAYOUT`コマンドは、これらを「モデル空間の生データ」として切り出し、新しいDWGファイルを作成してくれる救世主です。

しかし、これを手動で行うと、名前の付け間違いや保存場所の選定ミスが頻発します。「自動化=ミスを物理的に排除する行為」。ここが、プロとアマチュアの分かれ道です。

—

2. 実装コード:堅牢な自動化プロシージャ

以下のコードは、現在開いている図面の「現在のレイアウト」を、同じフォルダに「_LayoutExport.dwg」として書き出す汎用的なモジュールです。

Public Sub AutoExportLayoutToModel()
‘ エラーハンドリングの鉄則:予期せぬ終了を防ぐ
On Error GoTo ErrorHandler

Dim doc As AcadDocument
Set doc = ThisDrawing

‘ 現在の図面名を取得し、保存パスを生成
Dim path As String
Dim fileName As String
path = Left(doc.FullName, InStrRev(doc.FullName, “\”))
fileName = path & Left(doc.Name, InStrRev(doc.Name, “.”) – 1) & “_LayoutExport.dwg”

‘ コマンド実行前に警告を抑制(ダイアログを表示させない)
‘ Application.FileDialog 等を組み合わせるのが実務の定石ですが、
‘ まずはコマンドを確実に叩くことに集中しましょう。
ThisDrawing.SetVariable “FILEDIA”, 0

‘ EXPORTLAYOUTコマンドの実行
‘ ※コマンドライン入力と全く同じ動作を再現します
ThisDrawing.SendCommand “_EXPORTLAYOUT ” & fileName & vbCr

‘ 設定を元に戻す
ThisDrawing.SetVariable “FILEDIA”, 1

MsgBox “変換完了: ” & fileName, vbInformation, “自動化成功”
Exit Sub

ErrorHandler:
ThisDrawing.SetVariable “FILEDIA”, 1
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub

—

3. ここが重要!プロが教える「陥りやすい罠」

このコードを書いて満足してはいけません。現場で生き残るための「注意点」を3つ共有します。

① `SendCommand` との付き合い方

VBAには `Export` というメソッドも存在しますが、レイアウト変換に関しては `SendCommand` で `_EXPORTLAYOUT` を叩くのが最も確実です。なぜなら、AutoCAD内部の変換エンジンを直接呼び出せるからです。ただし、`SendCommand` は同期処理(完了を待つ)ですが、稀に処理が重なると不安定になることがあります。「コマンド実行後は図面を閉じる」というルーチンを組む際は、わずかな `DoEvents` を挟むのがコツです。

② `FILEDIA` の管理

初心者ほどこれを忘れがちです。`FILEDIA` が `0`(ダイアログ表示なし)のままマクロが終了すると、次にAutoCADを手動で使う人が「保存ダイアログが出ない!」とパニックになります。必ずエラーハンドリングで `1` に戻す習慣をつけてください。

③ モデル空間の「ゴミ」

`EXPORTLAYOUT` は非常に優秀ですが、不要なレイヤーまで書き出すことがあります。もし出力先の図面を整理したいなら、このマクロの後に「不要なレイヤーを削除する」または「名前削除(Purge)コマンドを実行する」プロセスを追加すると、より完璧なデータが納品できます。

—

4. 次のステップ:さらなる高みへ

このコードが動いたら、次は「図面内のすべてのレイアウトをループで回して、一括でPDFやDWGに書き出す」というステップに挑戦してみてください。

‘ ヒント:すべてのレイアウトを巡回するコードの断片
Dim layout As AcadLayout
For Each layout In ThisDrawing.Layouts
If layout.Name <> “Model” Then
‘ ここでレイアウトを切り替え(ActiveLayout)てからエクスポート
End If
Next

VBAは古臭いと言われることもありますが、AutoCADの強力なAPIを制御する上では、今なお最強の武器です。この「レイアウト変換」という小さな自動化が、あなたの残業を減らし、確実な図面管理への第一歩となります。

何か不明点があれば、またいつでも聞きに来てください。あなたの自動化エンジニアとしての航海を、心から応援しています!

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