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

スポンサーリンク

AutoCAD VBAの極致:ペーパー空間を「完全別ファイル化」する自動化の流儀

こんにちは。AutoCADの自動化という荒野を切り拓くエンジニアの皆さん。
今日は、現場で必ずと言っていいほど直面する「レイアウトを個別の図面ファイルとして切り出したい」という要求を、AutoCAD VBAでスマートに解決する方法を伝授します。

マクロの記録機能に頼る時代は終わりです。今日は、AutoCADの内部メモリを直接操作するような、洗練されたアプローチを学びましょう。

—

なぜ「ExportLayout」を自動化するのか?

実務において、図面セットから特定のレイアウトだけを抽出して別名で保存する作業、手動で行っていませんか?
AutoCAD標準の `EXPORTLAYOUT` コマンドは強力ですが、これをVBAで制御することで、以下のような恩恵が得られます。

  • 完全自動化: 100枚のレイアウトを一括で個別のDWGに変換する。
  • 名前付けの標準化: ファイル名に図面番号や日付を自動付与。
  • 一貫性の担保: 手動操作による「モデル空間の掃除忘れ」を防ぐ。

さあ、実装へ進みましょう。

—

実装コード:ExportLayoutの神髄

このコードは、現在アクティブなレイアウトを新しい図面ファイルとして書き出すものです。

Sub ExportCurrentLayoutToNewFile()
‘ 変数の宣言:AutoCADのオブジェクトを操作するための器を用意します
Dim acadApp As Object
Dim doc As AcadDocument
Dim layoutName As String
Dim savePath As String

‘ 現在のドキュメントを取得
Set doc = ThisDrawing
layoutName = doc.ActiveLayout.Name

‘ 保存先のパスを設定(ここではデスクトップを指定)
‘ ※環境に合わせてパスは適宜変更してください
savePath = Environ(“USERPROFILE”) & “\Desktop\” & doc.Name & “_” & layoutName & “.dwg”

‘ 【重要】ExportLayoutコマンドの実行
‘ このコマンドは、レイアウト内のビューポート内容をモデル空間に再構築して保存します
On Error Resume Next ‘ エラー回避(ファイル存在時など)

‘ AutoCADのコンソールへコマンドを送信
‘ 「_」は国際版対応のコマンド接頭辞です
ThisDrawing.SendCommand “_EXPORTLAYOUT” & vbCr & savePath & vbCr

If Err.Number <> 0 Then
MsgBox “書き出しに失敗しました。ファイルが既に存在するか、パスが不正です。”, vbCritical
Else
MsgBox “成功!保存先: ” & savePath, vbInformation
End If
On Error GoTo 0
End Sub

—

コードの深層解説:ここが「プロ」のこだわり

1. `SendCommand` の扱い方

`SendCommand` は、ユーザーがキーボードを叩くのと同じ動作を再現します。なぜコマンドを使うのか? それは、APIだけで「レイアウトのモデル空間化」を再現しようとすると、莫大な計算負荷と複雑なオブジェクト変換処理を自前で書く必要があるからです。「餅は餅屋」。AutoCADの強力なコマンドを背後から叩くのが、最も安定する自動化の極意です。

2. `vbCr`(復帰改行コード)の重要性

`SendCommand` でコマンドを送る際、文字列の末尾に `vbCr` を入れるのを忘れないでください。これは「Enterキー」を意味します。AutoCADはコマンドを入力した後、確定させる必要があります。この「Enter」を送り忘れてコードが止まってしまうのは、初心者が陥る最大の罠です。

3. `On Error Resume Next` の正しい使い方

実務では、同名のファイルが既に存在してエラーになることがよくあります。「エラーで止まる」ことは現場では悪です。一度エラーを無視させ、結果を判定する処理を組むことで、堅牢な自動化ツールが出来上がります。

—

陥りやすいエラーとその対策

  • 「コマンドが実行されません」:

AutoCADの `FILEDIA` システム変数が `0` になっていませんか? `FILEDIA` がオフだと、ファイル保存ダイアログが出ず、コードが期待通りに動きません。必要に応じて、コードの最初で `ThisDrawing.SetVariable “FILEDIA”, 1` を実行しましょう。

  • 「パスが見つかりません」:

`Environ(“USERPROFILE”)` を使用して動的なパスを取得するのが安全です。特定のフォルダに保存したい場合は、必ず末尾に `\` が含まれているか確認してください。

—

次のステップへ

今回のコードは「現在開いているレイアウト」を保存するものです。これを応用して、`ThisDrawing.Layouts` コレクションをループ(For Each文)で回せば、すべてのレイアウトを一括で抽出する「最強の変換機」に進化させることができます。

AutoCAD VBAは、単なる自動化ツールではありません。あなたの「設計業務の代行者」です。
このコードをベースに、自分だけの自動化ライブラリを築き上げてください。

何か不明点があれば、いつでも聞いてくださいね。エンジニアとして、あなたの成長を心から応援しています。

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