【入門編】【実務中級者向け】「図面ファイルが有効ではありません」エラーのトラップとログ出力によるバッチ処理の継続 – AutoCAD VBA解析バイブル

スポンサーリンク

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自動化の風景は劇的に変わりますよ。応援しています!

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