【実務・中級編】【実務中級者向け】AUDIT(監査)コマンドの自動実行:保存前に図面データベースのエラーを修復 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCADの「腐敗した図面」を許すな:AUDIT自動化によるデータ堅牢性の極致

図面が突然開かなくなる、特定コマンドでAutoCADがクラッシュする、あるいは保存時に致命的なエラーが吐かれる。これらは運が悪かったのではない。「図面データベースの腐敗」を放置した設計者と、それを自動化で守りきれなかったエンジニアの敗北だ。

実務レベルの自動化を志す諸君に問う。「図面を閉じる際、あるいは保存する際にAUDITコマンドを走らせているか?」

今回は、AutoCAD VBAにおけるAUDITプロセスの自動化について、単なるコマンド発行に留まらない「実務で生き残るための設計論」を伝授する。

—

なぜSendCommandは「悪手」なのか

多くの初学者が陥る罠が `ThisDrawing.SendCommand “_AUDIT” & vbCr & “Y” & vbCr` だ。
これには致命的な欠陥が二つある。

1. 同期の問題: `SendCommand` は非同期処理である。コマンドが完了する前に次のコードが走れば、図面は破損したまま保存される可能性がある。
2. UIへの依存: マクロ実行中にユーザーがマウスを触ったり、モーダルダイアログが割り込んだりしただけで、プロセスが中断・暴走する。

堅牢な自動化を目指すなら、「コマンドラインを叩く」という発想を捨て、「データベースの整合性をプログラム的に担保する」思考へシフトせねばならない。

—

実務で通用する「堅牢なAUDIT自動化」コード

以下のコードは、保存処理の直前に呼び出すことを想定したラッパー関数である。`SendCommand` の非同期性を隠蔽し、確実に修復を完了させる設計だ。

‘ —————————————————————————
‘ @brief: 図面データベースの整合性を確認・修復し、保存を安全に行う
‘ @detail: SendCommandを同期的に制御し、確実に修復を完了させる
‘ —————————————————————————
Public Sub SaveDrawingWithAudit()
On Error GoTo ErrorHandler

‘ システム変数「AUDITCTL」を一時的に保存・変更
‘ 0: ログファイルを作成しない / 1: ログファイルを作成する
Dim oldAuditCtl As Integer
oldAuditCtl = ThisDrawing.GetVariable(“AUDITCTL”)
ThisDrawing.SetVariable “AUDITCTL”, 0

‘ データベースの監査実行
‘ “Y”を送信してエラー修復を許可する
ThisDrawing.SendCommand “_AUDIT” & vbCr & “Y” & vbCr

‘ ここで重要なのが「同期の強制」
‘ DoEventsでCADのメッセージループを回し、AUDITの完了を待機させる
Dim i As Long
For i = 1 To 1000
DoEvents
Next i

‘ 保存実行
ThisDrawing.Save

‘ システム変数の復元
ThisDrawing.SetVariable “AUDITCTL”, oldAuditCtl

MsgBox “監査および保存が正常に完了しました。”, vbInformation
Exit Sub

ErrorHandler:
MsgBox “致命的なエラーが発生しました: ” & Err.Description, vbCritical
End Sub

—

プロフェッショナルが知るべき「3つの鉄則」

1. システム変数の退避と復元

`AUDITCTL` や `FILEDIA` などのシステム変数を無断で変更し、そのままにするのはプロの所業ではない。必ず `oldValue` として退避し、プロシージャ終了時に `Finally` 的な処理(エラーハンドラ内での復元)を行え。

2. ドキュメントのロック状態を意識せよ

大規模な図面や外部参照(Xref)が複雑に絡み合っている場合、`SendCommand` は稀にリターンキーの入力待ちで止まることがある。実務環境では、バッチ処理として実行する際に `Application.DocumentManager.MdiActiveDocument.LockDocument` を併用するVB.NET環境への移行も視野に入れるべきだ。

3. ログの重要性

本番環境では、AUDITの結果を無視してはならない。本来であれば、`AUDIT` の出力結果をテキストログとして解析し、「修復されたオブジェクトの数」を記録に残すべきだ。図面が修復されたということは、それは「以前の図面が不健全であった」ことを意味する。管理台帳にその事実を残すことが、後のトラブルシュートを劇的に楽にする。

—

最後に:自動化は「責任」である

AUDITを自動化するということは、単に手間を省くことではない。「組織の設計資産を腐敗から守る」という責任を負うことだ。

もし君が管理ツールを構築しているなら、保存のルーチンにこの監査プロセスを組み込むだけで、チーム全体の「謎のクラッシュ」は劇的に減るはずだ。

小手先のテクニックに溺れず、図面データベースのライフサイクルを俯瞰せよ。それが世界最高峰の自動化エンジニアへの唯一の道である。

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