【AutoCAD VBA】ExportLayoutを完全掌握せよ:レイアウトを「モデル空間図面」へ自動変換する堅牢な実装術
現場のCAD運用において、最も頭を抱えるのが「レイアウト空間の受け渡し」だ。
他部署や協力会社に図面を送った際、「モデル空間に何もない」「レイアウトの表示がおかしい」といった不毛なやり取りに時間を浪費していないだろうか。
今回は、AutoCADの隠し玉とも言えるコマンド『`ExportLayout`』をVBAで制御し、レイアウト図面を「単一のモデル空間図面」として書き出す、実務レベルの自動化手法を伝授する。単にコマンドを叩くだけでは不十分だ。「堅牢性」と「エラーハンドリング」の極意を理解してほしい。
—
1. なぜ「手動のExportLayout」ではダメなのか
`ExportLayout`コマンドは非常に強力だが、手動操作には以下のリスクが伴う。
- ファイル命名規則の崩壊: 人為的ミスによる上書きや、ファイル名の付け忘れ。
- 不要なオブジェクトの混入: 意図しないレイヤーやブロック定義が残存し、図面が重くなる。
- 中断の不安: 大規模な図面での変換中にCADがフリーズし、プロセスが残留するリスク。
我々エンジニアが目指すべきは、「誰が実行しても、同じ命名規則で、クリーンなDWGが生成される」ことである。
—
2. 開発における「死守すべき設計指針」
今回の自動化で、以下の3点をアーキテクチャの根幹とする。
1. 静寂な実行: `UserControl`系プロパティを一時的に制御し、ダイアログによる停止を排除する。
2. 型安全な名前空間: ファイルパスの生成には `Scripting.FileSystemObject` を使い、パスの連結ミスを物理的に防ぐ。
3. クリーンアップの保証: エラー発生時でも、CADのシステム変数を元の状態に戻すための `Error Handler` を必ず実装する。
—
3. プロダクションコード:ExportLayout自動化モジュール
以下のコードは、現在開いているドキュメントの「アクティブなレイアウト」を、同じフォルダ内に「(図面名)_Model.dwg」として保存する実用コードだ。
Option Explicit
‘ — 実務直結型:レイアウト→モデル変換関数 —
Public Sub ExportActiveLayoutToModel()
Dim doc As AcadDocument
Set doc = ThisDrawing
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ ファイルパスの生成
Dim baseName As String
Dim folderPath As String
baseName = fso.GetBaseName(doc.FullName)
folderPath = fso.GetParentFolderName(doc.FullName)
Dim exportPath As String
exportPath = fso.BuildPath(folderPath, baseName & “_Model.dwg”)
‘ システム変数の一時退避
Dim oldEcho As Integer
oldEcho = ThisDrawing.GetVariable(“CMDECHO”)
On Error GoTo ErrorHandler
‘ 処理の高速化と自動化
ThisDrawing.SetVariable “CMDECHO”, 0
ThisDrawing.SetVariable “FILEDIA”, 0 ‘ ダイアログを表示させない
‘ コマンド実行:EXPORTLAYOUT
‘ 引数として保存先パスを渡す
ThisDrawing.SendCommand “_EXPORTLAYOUT ” & exportPath & vbCr
MsgBox “変換完了: ” & vbCrLf & exportPath, vbInformation
ExitProc:
‘ システム変数の復帰
ThisDrawing.SetVariable “FILEDIA”, 1
ThisDrawing.SetVariable “CMDECHO”, oldEcho
Exit Sub
ErrorHandler:
MsgBox “致命的なエラーが発生しました: ” & Err.Description, vbCritical
Resume ExitProc
End Sub
コードの解説とポイント
- `FILEDIA = 0`: これを忘れると、コマンド実行中に保存ダイアログがポップアップし、VBAの実行がそこで停止する。自動化における最大の敵を無力化する必須設定だ。
- `vbCr`: `SendCommand`メソッドは、キーボード入力のシミュレーションだ。コマンドの終わりには必ず「Enter」に相当するキャリッジリターンが必要になる。
- `On Error GoTo`: 万が一変換中にCADが異常終了しても、システム変数が書き換わったままにならないよう、`ExitProc`で確実に環境を復元させる。これがプロのコードだ。
—
4. さらなる高みへ:運用のためのアドバイス
このツールを導入する際、以下の発展形も検討してほしい。
- 全レイアウトの一括変換: `ThisDrawing.Layouts`コレクションをループし、すべてのレイアウトを別ファイルとして書き出すロジックに拡張する。
- データベース連携: 書き出したファイル名と作成日時をExcelやデータベースに記録するログ機能を付加する。これにより、誰がいつ変換したかのトレーサビリティが確保できる。
- バージョン制御: 変換後のファイルが古いDWG形式にならないよう、`SaveAs`コマンドの引数で保存形式(`ac2018_DWG`等)を明示的に指定することを推奨する。
最後に
AutoCAD VBAは「古い」と揶揄されることもあるが、OSに近い場所でCADを直接叩ける唯一無二の手段であることに変わりはない。
今回紹介した `ExportLayout` の自動化は、日々の単純作業を「知的生産」に変える第一歩だ。
このコードをただコピペするだけでなく、君の現場のルールに合わせてカスタマイズし、最強の自動化ツールへと昇華させてほしい。健闘を祈る。
