【実務・中級編】【実務中級者向け】マルチレイアウト図面の「全レイアウト別ファイル保存」自動化スクリプト – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAの深淵:マルチレイアウトを「個別ファイル化」する極限の自動化設計

AutoCADの納品業務において、1つのDWGファイルに詰め込まれた数十枚のレイアウトを、手作業で「名前を付けて保存」し、不要なレイアウトを削除する……。もしあなたが今、この作業を繰り返しているなら、それはエンジニアとして致命的な時間の浪費です。

今日は、AutoCAD VBAの特性を理解し、「壊れない」「速い」「保守できる」マルチレイアウト分離スクリプトの極意を伝授します。

1. なぜ「単純なループ処理」では失敗するのか

多くの初心者が陥る罠は、`ThisDrawing.SaveAs`を安易にループ内で実行することです。AutoCADのオブジェクトモデルは、図面データベース(Database)とエディタ(Editor)の境界が非常に繊細です。

  • カレントデータベースの汚染: レイアウトを削除する操作は、メモリ上のデータベースを破壊的に書き換えます。ループ内で図面を更新し続けると、メモリリークや未保存変更の警告(ダイアログ)で処理が停止します。
  • WBLOCKの活用: レイアウトを個別のDWGにする際、`SaveAs`を使うのは愚策です。AutoCADには、オブジェクトを個別に切り出すための強力なメソッド `Wblock` が存在します。これを使えば、現在の図面状態を保持したまま、特定のレイアウトだけを「切り出して」保存することが可能です。

2. 実務仕様のプロダクションコード

以下のコードは、単に動くだけではありません。ファイル名の重複チェック、保存先パスの自動生成、そしてエラーハンドリングを考慮した、「そのまま現場で使える」設計です。

Option Explicit

‘ ———————————————————
‘ マルチレイアウトを個別のDWGとして書き出す
‘ ———————————————————
Public Sub ExportLayoutsToFiles()
Dim doc As AcadDocument
Dim layout As AcadLayout
Dim exportPath As String
Dim baseName As String

Set doc = ThisDrawing
‘ 保存先は現在の図面と同じフォルダに「Export」フォルダを作成
exportPath = Left(doc.FullName, InStrRev(doc.FullName, “\”)) & “Exported_Layouts\”

‘ ディレクトリ存在確認(なければ作成)
If Dir(exportPath, vbDirectory) = “” Then MkDir exportPath

baseName = Left(doc.Name, InStrRev(doc.Name, “.”) – 1)

‘ エラーハンドラで強制終了を防ぐ
On Error GoTo ErrorHandler

For Each layout In doc.Layouts
‘ 「モデル」タブは除外(レイアウトのみ対象)
If layout.Name <> “Model” Then
Dim newDoc As AcadDocument

‘ WBLOCKメソッドで特定のレイアウトを新しいDBとして切り出し
‘ ※ CopyObjectsを使う方法もあるが、Wblockの方が堅牢で高速
doc.Wblock exportPath & baseName & “_” & layout.Name & “.dwg”, layout

Debug.Print “Exported: ” & layout.Name
End If
Next layout

MsgBox “全レイアウトの書き出しが完了しました。”, vbInformation
Exit Sub

ErrorHandler:
MsgBox “エラー発生: ” & Err.Description, vbCritical
End Sub

3. 設計のポイントと技術的洞察

このコードにおいて、なぜ`Wblock`メソッドを選択したのか。そこにはプロの設計思想があります。

1. 非破壊の原則: `Wblock`は、現在メモリに乗っているドキュメントを直接変更しません。そのため、ループ内で図面を保存して閉じて……といった重いオーバーヘッドを回避できます。
2. 名前空間の衝突回避: 手動で`SaveAs`を繰り返すと、AutoCADの内部オブジェクトIDが干渉し、図面データベースに微妙な破損(サニティエラー)を引き起こすリスクがあります。Wblockによる分離は、クリーンな図面を生成するための最短経路です。
3. 拡張性: 保存先パスやファイル名の命名規則をカスタマイズすることで、どんな仕様の納品フォルダ構成にも即座に対応可能です。

4. 現場での運用アドバイス

  • レイアウト名の制約: Windowsのファイルシステムでは「/」「\」「:」「」「?」「”」「<」「>」「|」が使えません。レイアウト名にこれらが含まれる可能性がある場合は、`Replace`関数でアンダーバーに置換する処理を前段に挟んでください。
  • 大規模図面の対策: 非常に巨大なxref(外部参照)を持つ図面の場合、`Wblock`実行時に警告が出る場合があります。その際は`DemandLoad`システム変数や、`PROXYGRAPHICS`の設定を見直すことで、パフォーマンスを最適化できます。

最後に:自動化の真髄

AutoCAD VBAで最も重要なのは「ツールを作ること」ではなく、「二度と同じ手作業を繰り返さない仕組みを作ること」です。

今回紹介した分離ロジックは、納品業務のボトルネックを解消する強力な武器になります。これをベースに、PDF一括出力や、図面情報の属性書き出しと組み合わせることで、あなたの設計環境は劇的に進化するはずです。

コードをコピペして終わりにするのではなく、「なぜこのAPIが選ばれたのか」を常に自問自答してください。それが、明日を生き抜くエンジニアの作法です。

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