【入門編】【実務中級者向け】保存直前に「名前削除(Purge)」を自動実行:ファイルサイズを最適化してセーブする – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCADの「肥大化」を根絶せよ:VBAによる自動Purge実装の極意

こんにちは。現場で長年AutoCADと向き合っていると、避けて通れないのが「図面ファイルの肥大化」という問題です。

「ただ保存するだけ」で数MBも容量が増える……。原因は、使い終わったレイヤー、消したはずのブロック定義、そして目に見えないゴミデータ(名前削除できないオブジェクト)です。

今回は、「保存ボタンを押すたびに自動でPurge(名前削除)を実行する」という、実務で即戦力となる自動化ルーチンを伝授します。マクロの記録から一歩先へ進みたいあなたへ、AutoCADの内部メモリを掌握する技術をお教えしましょう。

—

なぜ「手動のPurge」では不十分なのか

多くの設計者は、図面を閉じる前に手動で `PURGE` コマンドを打ちます。しかし、人間は忘れる生き物です。また、Purgeには「一度の実行では消せないネストされた要素」が存在することをご存知でしょうか?

本当のエンジニアリングは、「ヒューマンエラーを仕組みで殺す」ことから始まります。VBAを使って、保存プロセスの直前に「完全なクリーンアップ」を強制的に組み込むのです。

—

実装の鍵:SendCommand と「再帰的処理」

AutoCAD VBAで図面を操作する際、最も強力かつ注意が必要なのが `SendCommand` メソッドです。これはコマンドラインに直接命令を投げる手法ですが、「コマンドが終了するまで待機する」という特性を理解していないと、処理が空振りします。

自動Purgeを実行する実装コード

以下のコードをVBAエディタ(`VBAIDE`)の `ThisDrawing` モジュールに貼り付けてください。

Public Sub CleanAndSave()
‘ 1. 現在の図面オブジェクトを取得
Dim doc As AcadDocument
Set doc = ThisDrawing

‘ 2. 警告やダイアログを抑制(自動化の基本:ユーザーを待たせない)
doc.SetVariable “CMDECHO”, 0
doc.SetVariable “QAFLAGS”, 1 ‘ Purgeの確認ダイアログをスキップ

‘ 3. Purgeの実行
‘ “-PURGE” コマンドの「R(全消去)」→「(全て対象)」→「N(確認なし)」の順
‘ ネストされた不要要素を確実に消すため、3回繰り返すのが現場の定石
Dim i As Integer
For i = 1 To 3
doc.SendCommand “-PURGE” & vbCr & “R” & vbCr & “” & vbCr & “N” & vbCr
Next i

‘ 4. 図面の保存
doc.Save

‘ 5. 設定を元に戻す
doc.SetVariable “QAFLAGS”, 0
doc.SetVariable “CMDECHO”, 1

MsgBox “図面のクリーニングと保存が完了しました。”, vbInformation, “自動化完了”
End Sub

—

コードの「ここが重要!」ポイント

1. `SendCommand` と `vbCr` の関係

`SendCommand` の中にある `vbCr` は「Enterキー」を意味します。コマンドラインに文字を打ち込むだけでなく、しっかり「確定」させることで、プログラムは正しく動作します。

2. なぜPurgeを「3回」繰り返すのか?

これが経験則に基づく知恵です。AutoCADのブロック定義は「入れ子(ネスト)」になっていることが多々あります。1回目のPurgeで外側が消え、初めて2回目で内側のゴミが「削除可能」な状態になります。3回行えば、ほぼ全てのゴミがクリーンアップされます。

3. `QAFLAGS` という名の「魔法のスイッチ」

`QAFLAGS` を `1` に設定することで、通常であれば画面に表示される「このアイテムを削除しますか?」という煩わしいダイアログを強制的にOFFにできます。これを忘れると、自動化プロセスがダイアログで停止してしまいます。

—

陥りやすいエラーと対策

  • 「コマンドが実行されません」という場合

AutoCADが現在「コマンド入力待ち」の状態でない可能性があります。`ThisDrawing.SendCommand` を実行する直前に、`SendKeys “{ESC}{ESC}”` を入れて、アクティブなコマンドを確実にキャンセルする癖をつけましょう。

  • ファイルが開けないエラー

ファイルが「読み取り専用」になっていないか確認してください。VBAはOSの権限に左右されます。

—

さあ、次のステップへ

このルーチンをマスターすれば、あとはこのマクロを「リボンメニュー」に登録するだけです。そうすれば、あなたはもう「重い図面」に頭を悩ませることはなくなります。

プログラミングとは、単にコードを書くことではありません。「本来人間がやらなくていい雑務を、マシンに肩代わりさせること」です。

今日からこのコードをあなたの武器にし、一つ上のステージのエンジニアを目指してください。また何か分からないことがあれば、いつでも聞きに来てくださいね。応援しています!

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