AutoCAD VBAで「バージョン事故」を撲滅せよ:環境適応型DWG自動保存の極意
AutoCADの業務自動化において、最も避けるべきは「ファイルを開けない」という初歩的なクレームです。特に、設計者が無意識に最新のDWG形式で保存し、取引先の旧バージョンCAD環境で「図面ファイルが読み込めません」というエラーを吐かせる事態は、エンジニアとしての信頼を根底から揺るがします。
今回は、手動のバージョン指定を排除し、相手先環境に合わせて動的にDWG形式を制御する「堅牢な保存ロジック」を伝授します。
—
1. なぜ「手動保存」が現場の地雷になるのか
AutoCADの`SaveAs`メソッドは非常に強力ですが、デフォルトの設定やユーザーの操作ミスにより、意図しないバージョンで保存されるリスクが常にあります。
多くの初心者は、定数(`ac2018_dwg`など)をコードに直書きしがちです。しかし、プロジェクトごとに相手先の環境は異なります。「設定ファイル(または定数リスト)と保存ロジックを分離する」ことこそ、保守性の高いコードの第一歩です。
—
2. 実装の要:バージョン制御アーキテクチャ
以下のコードは、単なる保存命令ではありません。環境定義を別出しし、エラーハンドリングを徹底した「プロダクション品質」の実装です。
堅牢な保存用モジュール:`FileControl.bas`
Option Explicit
‘ クライアント環境の定義(Enumで列挙し、管理を容易にする)
Public Enum ClientEnvironment
Legacy_2010 = 0
Standard_2013 = 1
Modern_2018 = 2
End Enum
”’
”’
Public Sub SaveAsVersion(ByVal targetEnv As ClientEnvironment)
Dim doc As AcadDocument
Set doc = ThisDrawing
Dim saveType As AcSaveAsType
‘ 環境に応じた定数のマッピング
Select Case targetEnv
Case Legacy_2010: saveType = ac2010_dwg
Case Standard_2013: saveType = ac2013_dwg
Case Modern_2018: saveType = ac2018_dwg
Case Else: saveType = ac2018_dwg ‘ デフォルトの安全策
End Select
‘ 保存処理の実行(エラーハンドリングを必須とする)
On Error GoTo ErrorHandler
‘ 既に同名ファイルが存在する場合の上書き許可を念頭に置くこと
doc.SaveAs doc.FullName, saveType
MsgBox “保存成功: ” & GetVersionString(saveType), vbInformation
Exit Sub
ErrorHandler:
MsgBox “保存失敗: ” & Err.Description, vbCritical
End Sub
Private Function GetVersionString(st As AcSaveAsType) As String
‘ ログ記録やUI表示用のヘルパー関数
Select Case st
Case ac2010_dwg: GetVersionString = “AutoCAD 2010形式”
Case ac2013_dwg: GetVersionString = “AutoCAD 2013形式”
Case ac2018_dwg: GetVersionString = “AutoCAD 2018形式”
End Select
End Function
—
3. 実務で「事故らない」ための3つの重要指針
コードを動かすだけでなく、システムとして完成させるために以下の規約を遵守してください。
① `SaveAs` のパス指定は絶対フルパスで
`doc.SaveAs “test.dwg”` と書くと、実行時のカレントディレクトリに依存して保存場所が迷子になります。必ず `doc.FullName` を活用し、現在開いているファイルのパスを基準に制御してください。
② ファイルロックの解放を意識せよ
大規模な図面の場合、保存処理中にフリーズすることがあります。`DoEvents`を挟む、あるいは保存前に `doc.PurgeAll`(名前削除)を実行してファイルサイズを最適化するプロセスを組み込むと、ネットワーク越しの保存トラブルが劇的に減ります。
③ データベース連携時のトランザクション管理
もしExcel等から図面情報を書き込んでいるのであれば、「書き込み完了」→「バージョン指定保存」→「閉じる」というライフサイクルを、メインの制御ルーチンで一元管理してください。保存処理だけを関数化しすぎると、閉じ忘れによるメモリリークを引き起こします。
—
4. 最後に:エンジニアとしての矜持
「動くコード」を書くのはジュニアレベルの仕事です。真のエンジニアは、「なぜそのバージョンを選択したのか」「エラーが起きたときにどう復旧するか」を設計の中に組み込みます。
このバージョン制御ロジックをテンプレート化し、貴方の開発ライブラリに組み込んでください。これにより、貴方は「バージョン依存のトラブル」という無意味な雑務から解放され、よりクリエイティブな自動化設計に集中できるようになるはずです。
AutoCADの深淵はまだ先にあります。まずは、この堅牢な土台から始めてください。
