AutoCADの「沈黙の爆弾」を解除せよ:VBAで実現する一時ファイル自動クリーンアップ術
こんにちは。AutoCADの自動化の世界へようこそ。
マクロの記録ボタンを押して「なんとなく動いた」という段階を卒業し、今あなたは「現場で本当に使える安定したシステム」を構築しようとしていますね。その一歩は非常に重要です。
さて、大量の図面をバッチ処理する際、多くのエンジニアが直面し、そして頭を抱える問題があります。それが「ディスク容量不足による突然の強制終了」です。AutoCADは、図面を開くたびにテンポラリファイル(`.ac$`, `.bak`など)を生成しますが、これが数千ファイル単位になるとシステム全体を圧迫します。
今日は、AutoCAD VBAの心臓部である `AcadApplication` オブジェクトを操作し、この「沈黙の爆弾」を自律的に解除するコードを解説します。
—
1. AutoCADオブジェクトモデルの「深層」に触れる
AutoCAD VBAをマスターする鍵は、「今、自分はどこにアクセスしているのか?」を常に意識することです。
- `AcadApplication`: AutoCADそのもの。神の視点です。
- `Preferences`: AutoCADの設定画面(Options)のすべて。
- `Files`: その設定の中にある「ファイル」タブ。
- `TempFilePath`: 一時ファイルが保存されている聖域へのパス。
ここを `VBA` から直接叩くことで、AutoCADが「今どこにゴミを捨てようとしているか」をリアルタイムに特定できます。
—
2. 実装:自律型クリーンアップ・エンジン
以下のコードは、処理の合間に一時ファイルを監視し、古いゴミを掃除する「掃除屋」モジュールです。
Option Explicit
‘ — バッチ処理の守護神:一時ファイルクリーンアップ —
Public Sub AutoCleanupTempFiles()
Dim acadApp As AcadApplication
Dim tempPath As String
Dim fso As Object
Dim folder As Object
Dim file As Object
‘ 1. Applicationオブジェクトを取得
Set acadApp = ThisDrawing.Application
‘ 2. AutoCADの設定から一時フォルダのパスを取得
‘ ここが一番のポイント。固定パスではなく設定から拾うのがプロの鉄則
tempPath = acadApp.Preferences.Files.TempFilePath
‘ 3. ファイルシステムオブジェクト(FSO)でフォルダにアクセス
Set fso = CreateObject(“Scripting.FileSystemObject”)
If Not fso.FolderExists(tempPath) Then Exit Sub
Set folder = fso.GetFolder(tempPath)
‘ 4. ファイルをループして削除
On Error Resume Next ‘ 処理中のファイルは消せないので無視する
For Each file In folder.Files
‘ .ac$ 拡張子を持つ一時ファイルをターゲットにする
If LCase(fso.GetExtensionName(file.Name)) = “ac$” Then
file.Delete True
End If
Next file
On Error GoTo 0
Debug.Print “クリーンアップ完了: ” & tempPath
End Sub
コードの解説:なぜここで躓くのか?
- `On Error Resume Next` の効能:
AutoCADは現在開いている図面に関連するファイルをロックしています。ロック中のファイルを消そうとするとエラーになりますが、バッチ処理を止めるわけにはいきません。「消せるものだけ消す」という割り切りが、現場では正義なのです。
- `Preferences.Files.TempFilePath`:
PC環境によって一時フォルダの場所は異なります。ハードコードせず、常にAPIから現在のパスを取得するようにしましょう。
—
3. なぜ「マクロの記録」ではダメなのか?
マクロの記録は、あくまで「ユーザーの操作をトレースする」だけです。しかし、今回のような「環境設定を読み取り、論理的に判断して削除する」といったロジックは、記録ボタンでは一生作れません。
このコードをあなたのメインバッチ処理のループの中に組み込んでみてください。
‘ バッチ処理のループ例
For Each dwg In Drawings
‘ 1. 図面を開く
‘ 2. 編集処理
‘ 3. 保存・閉じる
‘ 4. ここで掃除!
Call AutoCleanupTempFiles
Next dwg
これだけで、数千図面の処理を完遂しても、ディスクは常にクリーンに保たれます。
—
4. 最後に:エンジニアとしてのマインドセット
AutoCAD VBAを操るということは、「AutoCADという巨大なソフトウェアの挙動を、コードで制御する」ということです。
今回学んだ「一時ファイルの監視」は、単なる掃除テクニックではありません。「プログラムが動作する環境(リソース)を自身で管理する」という、中級者から上級者へステップアップするための重要な思想なのです。
ここをクリアしたあなたは、もう「マクロを動かしている人」ではなく「業務を自動化するアーキテクト」です。次は何を自動化しましょうか? 困ったことがあれば、またいつでも聞きに来てくださいね。
皆さんの開発が、エラー知らずで快適なものになりますように!
