AutoCAD VBAの「不屈のバッチ処理」術:破損ファイルで止まらないための極意
こんにちは。AutoCADの自動化の世界へようこそ。
マクロの記録から一歩踏み出し、大量の図面を一括処理するバッチ処理に挑むとき、多くのエンジニアが必ずぶつかる壁があります。それが「図面ファイルが有効ではありません(Drawing file is not valid)」という悪夢のようなエラーです。
数百枚の図面を夜通し処理させていたのに、朝出社したら3枚目で止まっていた……。そんな悲劇を防ぐための、実務で必須の「エラー耐性」を身につけましょう。今日は、AutoCAD VBAを掌握するための「不屈のコード」を伝授します。
—
1. なぜ「エラー」で止まってはいけないのか?
AutoCADは非常に繊細なアプリケーションです。特にDWGファイルは、ネットワークの瞬断や過去のバージョン変換の影響で、どうしても「破損」や「読み込み拒否」が起こり得ます。
VBAで `Documents.Open` を実行したとき、ファイルが壊れていればAutoCADはダイアログを出して処理を停止させます。これを放置すると、プログラムは「待ち状態」になり、永遠に終了しません。
「エラーを恐れず、エラーを記録する」。これが、プロの自動化エンジニアが持つべき唯一の哲学です。
—
2. 実践:エラーをトラップする魔法のコード
以下は、リスト化した複数のDWGを順次開き、エラーがあればログを出力して「次へ進む」ためのテンプレートです。
Sub BatchProcessWithSafety()
Dim doc As AcadDocument
Dim fileList As Variant
Dim i As Long
Dim logFile As Integer
‘ 処理したいファイルパスの配列(実際にはフォルダ取得処理等で生成してください)
fileList = Array(“C:\Data\Good.dwg”, “C:\Data\Broken.dwg”, “C:\Data\Normal.dwg”)
‘ ログ出力用の準備
logFile = FreeFile
Open “C:\Data\ErrorLog.txt” For Output As #logFile
‘ AutoCADの警告ダイアログを抑制(重要!)
ThisDrawing.Application.DisplayAlerts = False
For i = LBound(fileList) To UBound(fileList)
On Error Resume Next ‘ エラーが発生しても止めない
Set doc = Documents.Open(fileList(i))
If Err.Number <> 0 Then
‘ エラー発生!ログに記録してスキップ
Print #logFile, “エラー発生: ” & fileList(i) & ” | 内容: ” & Err.Description
Err.Clear ‘ エラー情報をクリアして次のループへ
Else
‘ — ここに本来の業務処理を記述 —
Debug.Print “処理成功: ” & doc.Name
‘ doc.Close SaveChanges:=True
‘ ——————————–
doc.Close False
End If
On Error GoTo 0 ‘ エラーハンドリングを通常に戻す
Next i
ThisDrawing.Application.DisplayAlerts = True
Close #logFile
MsgBox “処理が完了しました。詳細はログファイルを確認してください。”
End Sub
—
3. コードの「極限の知見」:ここがポイント
このコードには、ただ動くだけではない「現場の知恵」が詰まっています。
① `DisplayAlerts = False` の意味
AutoCADは、ファイルを開く際に何らかの問題があると、ユーザーの入力を待つダイアログを出します。これを制御しないと、VBAはいつまでもダイアログの「OK」ボタンを待って沈黙してしまいます。まずはこれを無効化することが、自動化の第一歩です。
② `On Error Resume Next` の正しい使い方
「エラーを無視する」と誤解されがちですが、実際には「エラーが発生した後に、プログラムを強制終了させずに次の行へ進ませる」ための制御です。必ず直後に `Err.Number` をチェックし、エラーがあればログに吐き出すというセットで運用してください。
③ `Err.Clear` を忘れない
`Err` オブジェクトには、直前のエラー情報が保持され続けます。これをクリアしないと、2枚目の正常なファイルを開いた際に、前回の古いエラー情報を拾ってしまう危険があります。必ず処理の最後でリセットしましょう。
—
4. 最後に:エンジニアとしてのマインドセット
AutoCAD VBAにおいて、「完璧なコード」など存在しません。存在するはずのない「図面ファイルが有効ではありません」という事態が起きる前提で、「どう失敗し、どう復旧し、どう記録するか」を設計すること。これができる人こそが、真の意味での「自動化エンジニア」です。
まずはこのコードをベースに、ご自身の環境で小さなバッチ処理を試してみてください。エラーログにファイル名がズラリと並んだとき、あなたはもう「マクロを記録する人」ではなく、「システムを設計する人」になっています。
ここをクリアすれば、AutoCAD自動化の風景は劇的に変わりますよ。応援しています!
