AutoCAD VBA極限活用術:図面フォーマット変換の自動化、その「真の設計」を伝授する
AutoCADの業務自動化において、ファイル変換は最も「安易に実装され、最も多くの悲劇を生む」領域だ。ネット上のコピペコードをそのまま使い、数千枚の図面を処理させてクラッシュさせた経験はないか?
今日は、ただ「動く」だけのコードではなく、プロフェッショナルとして現場に導入すべき「堅牢な変換アーキテクチャ」を伝授する。
—
1. なぜ「SaveAs」を安易に呼んではいけないのか
AutoCADの`SaveAs`メソッドは非常に強力だが、裏側では「図面データベースの再構築」という重い処理が走っている。これをループ処理で連続実行する際、以下の3点を見落とすと悲劇が起きる。
- COMオブジェクトの解放の甘さ: 連続処理でメモリリークを放置すると、AutoCADは確実にフリーズする。
- モーダルダイアログの罠: 警告メッセージが表示されると、VBAの処理はそこで停止する。UIを完全に遮断せねばならない。
- バージョン互換性の呪い: `ac2018_dxf` といった列挙型をハードコーディングすると、将来のAutoCADアップグレード時に即座に陳腐化する。
これらを解決するための「戦略的設計」が以下である。
—
2. 【実戦コード】堅牢なフォーマット変換モジュール
このコードは、エラーハンドリングとリソース解放を徹底したプロダクション仕様のテンプレートだ。
Option Explicit
‘ 変換実行用メインプロシージャ
Public Sub BatchConvertDrawing(ByVal sourcePath As String, ByVal targetPath As String, ByVal formatType As AcSaveAsType)
Dim doc As AcadDocument
‘ 1. UIの完全制御:ダイアログの表示を抑制する(これ必須)
On Error GoTo ErrorHandler
Application.Visible = True
‘ 2. ファイルを開く(読み取り専用で開くのが鉄則)
Set doc = Application.Documents.Open(sourcePath, True)
‘ 3. 図面データベースの整合性チェック(オプションだが推奨)
‘ doc.AuditInfo.FixErrors = True
‘ 4. バージョン変換実行
‘ 第2引数(True)は「既にファイルが存在する場合、上書きする」オプション
doc.SaveAs targetPath, formatType
‘ 5. 文脈の終了:即座に閉じる
doc.Close False
Exit Sub
ErrorHandler:
MsgBox “変換エラー発生: ” & Err.Description, vbCritical
If Not doc Is Nothing Then doc.Close False
End Sub
現場で役立つ変換定数リスト
AutoCADのバージョンに合わせ、以下の列挙型を適切に選択せよ。
- `ac2018_dwg` / `ac2018_dxf` (最新の互換性)
- `ac2013_dwg` / `ac2013_dxf`
- `acR15_dwg` / `acR15_dxf` (2000形式:古い設備図面などで多用)
—
3. 大規模運用に向けた「3つの鉄則」
もし君が100ファイル以上のバッチ処理を組むなら、以下の設計思想を必ず守れ。
① データベース(CSV/Excel)との連携
ファイルパスをハードコーディングするな。変換対象リストをExcelシートに書き出し、そこから`FileSystemObject`を用いてパスを読み込む構造にせよ。これにより、万が一処理が中断しても、どこまで終わったかを即座に追跡できる。
② 「読み取り専用」で開くという哲学
`Documents.Open(path, True)` の第二引数 `ReadOnly:=True` は、単なるロック回避ではない。意図せぬ保存や、バックグラウンドでのファイルロックによるアクセス拒否を防ぐための「エンジニアの防壁」である。
③ 処理後の「ゴミ掃除」
VBAはCOMオブジェクトの管理が甘い。大規模処理の合間には、必ず `DoEvents` を挟み、OS側のメッセージキューを解放する時間を作れ。これだけで、長時間稼働時の安定性は劇的に向上する。
—
最後に:エンジニアとしての矜持
図面変換は一見地味な「お使い」作業に見える。しかし、この自動化を「止まらない、壊れない、誰でも使える」システムとして完成させることは、設計者たちの貴重な時間を年間数千時間創出することに他ならない。
ツールは、作り手の「配慮の深さ」がすべてを決定する。
さあ、このコードをベースに、君だけの「最強の変換エンジン」を組み上げてみてほしい。何かあればまた質問に来るといい。極限の解を提示しよう。
