【AutoCAD VBA】図面の「健康」を守る!保存前のAUDIT自動化術
こんにちは。AutoCADの自動化、楽しんでいますか?
マクロの記録から一歩踏み出し、「業務を止めない安定したシステム」を作ろうとしているあなたへ。今日は、AutoCADエンジニアなら避けては通れない、「図面データベースの修復(AUDIT)」をVBAで制御する方法を伝授します。
図面を開きっぱなしにしたり、他部署から送られてきた図面を修正したりする際、目に見えないエラーが蓄積して、ある日突然「致命的なエラー」で落ちる……そんな悲劇を未然に防ぐための極意です。
—
なぜ「保存前のAUDIT」が必要なのか?
AutoCADの図面(DWG)は、複雑なオブジェクトの集合体です。時として、破綻したリンクや不正なデータ構造が混入します。
これらをそのまま保存し続けると、図面はどんどん肥大化し、最悪の場合はファイル自体が破損します。手動で `AUDIT` コマンドを打つのも良いですが、「保存するたびに自動でクリーンアップする」習慣をコードで強制することで、あなたの図面は常にベストコンディションを維持できます。
—
核心コード:Document.SendCommandの活用
VBAには `Audit` オブジェクトのような直接的なメソッドは存在しません。そのため、VBAからAutoCADのコマンドラインへ命令を送る `SendCommand` メソッドを活用します。
これが現場でそのまま使える、堅牢なプロシージャです。
Public Sub AuditAndSave()
Dim doc As AcadDocument
Set doc = ThisDrawing
‘ 1. コマンドエコーを一時的にオフにして画面のちらつきを抑える
‘ 2. AUDITコマンドを実行(Yで修復を許可)
‘ 3. _SAVEコマンドで上書き保存
On Error Resume Next ‘ 万が一のコマンド失敗時にプログラムが止まらないようにする
‘ AUDITコマンド:_AUDIT [改行] Y [改行]
‘ ※環境によって言語設定が異なるため、_(アンダースコア)付きのコマンド名を使うのが鉄則
doc.SendCommand “_AUDIT” & vbCr & “Y” & vbCr
‘ 修復後、安全に保存
doc.Save
If Err.Number <> 0 Then
MsgBox “保存中にエラーが発生しました。手動での確認を推奨します。”, vbCritical
Else
MsgBox “図面の監査と保存が完了しました。”, vbInformation
End If
On Error GoTo 0
End Sub
—
このコードの「ここがプロの設計」
1. アンダースコア `_` の重要性
AutoCADには日本語版や英語版など、言語設定が複数あります。単に `AUDIT` と書くと、他言語環境で「未知のコマンド」として弾かれることがあります。コマンドの前に `_` をつけることで、グローバルなコマンド名として認識され、どんな環境でも動作するようになります。
2. `vbCr`(キャリッジリターン)の役割
`SendCommand` は、コマンドラインにテキストを入力するのと同じ動作をします。コマンドを実行した後の「Enterキー」に相当するのが `vbCr` です。`AUDIT` コマンドは実行後に「エラーを修復しますか?(Y/N)」と聞いてくるため、`”Y” & vbCr` で自動的に「はい」を選択させています。
3. エラーハンドリング(`On Error Resume Next`)
コマンド実行は、図面の状態によっては予期せぬダイアログが表示されて中断されることがあります。VBAが途中でフリーズしないよう、最低限のガードを入れています。
—
陥りやすい罠:ここだけは注意!
初学者がよくやるミスが、「図面が開かれていない状態で実行してしまう」ことや、「読み取り専用図面に対してSendCommandを投げてしまう」ことです。
- アドバイス: `If doc.ReadOnly = True Then` のように、現在の図面が編集可能かどうかを判定するロジックを冒頭に入れると、より「プロフェッショナルな」ツールになります。
—
さあ、あなたのツールをアップデートしよう
今回紹介したコードは、あくまで基本のパーツです。これを応用して、
- 「フォルダ内の全DWGファイルを一括で監査・保存する」
- 「図面を閉じるイベント(`AcadDocument_BeginClose`)に組み込んで、閉じるときに必ず監査させる」
といった発展形を作ることも可能です。
VBAは、あなたの「面倒くさい」を「資産」に変える最高のツールです。このAUDIT自動化を足がかりに、ぜひ自分の業務をどんどん楽に、そして確実にしていってください。
ここをクリアしたあなたは、もう初心者ではありません。次のステップへ進む準備は万端ですよ!また次回の記事でお会いしましょう。
