【入門編】【実務中級者向け】複数図面のバッチ処理:指定条件で図面を開き、一括処理を実行 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAで「徹夜」を卒業する。複数図面バッチ処理の極意

こんにちは。AutoCADの自動化の世界へようこそ。

毎日何百もの図面を開き、同じレイヤー設定を繰り返し、名前を付けて保存する。そんな「修行」のような作業に終止符を打つ時が来ました。AutoCAD VBAは、単なるマクロ記録の延長ではありません。AutoCADの心臓部(ObjectDBXとApplicationオブジェクト)を制御する、最強の自動化ツールです。

今日は、中級者への登竜門である「複数図面のバッチ処理」を、現場で即戦力となるレベルで解説します。

—

1. なぜ「手動」で開いてはいけないのか?

初学者が陥る最大の罠は、`Application.Documents.Open` を連発することです。これをやると、図面が開くたびにAutoCADの画面がチラつき、メモリを浪費し、最悪の場合は途中でフリーズします。

極限の知見:
大量の図面を処理する場合、「図面を表示せずにバックグラウンドで処理する(ObjectDBX)」か、「不可視状態で制御する」のが鉄則です。今回は、まず基本の「開いて処理して保存する」流れを堅牢に構築しましょう。

—

2. 失敗しないバッチ処理の基本構成

バッチ処理のコードは、以下の「4つの壁」を越える必要があります。

1. 対象ファイルの選定: フォルダ内のDWGを確実にリストアップする。
2. エラーハンドリング: 1つ図面が壊れていても処理を止めない。
3. 図面のクローズ: メモリリークを防ぐため、確実に閉じる。
4. バージョン管理: 保存時に余計なダイアログを出さない。

実践コード:フォルダ内の全図面を自動処理する

以下のコードは、指定フォルダ内の全図面に対して「特定のレイヤーを削除する」処理の雛形です。

Sub BatchProcessDrawings()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim doc As AcadDocument
Dim targetFolder As String

‘ 1. 処理対象フォルダの設定
targetFolder = “C:\Project\Drawings\”
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set folder = fso.GetFolder(targetFolder)

‘ 2. 各ファイルに対してループ
For Each file In folder.Files
If LCase(fso.GetExtensionName(file.Path)) = “dwg” Then
On Error Resume Next ‘ エラーが発生しても次へ進む

‘ 図面を開く(Visible:=Falseでバックグラウンド処理も可能)
Set doc = Application.Documents.Open(file.Path)

If Err.Number = 0 Then
‘ — ここに処理を記述 —
Call CleanUpDrawing(doc)

‘ 保存して閉じる(上書き保存)
doc.Close SaveChanges:=True
Else
Debug.Print “開けませんでした: ” & file.Name
End If

On Error GoTo 0
End If
Next file

MsgBox “全図面の処理が完了しました!”
End Sub

Sub CleanUpDrawing(doc As AcadDocument)
‘ 例:特定のレイヤー「TEMP」を削除する処理
Dim layerObj As AcadLayer
On Error Resume Next
Set layerObj = doc.Layers.Item(“TEMP”)
If Not layerObj Is Nothing Then
layerObj.Delete
End If
End Sub

—

3. 知っておくべき「現場の落とし穴」

① 図面のバージョン互換性

`doc.SaveAs` メソッドを使う際、第2引数の `Version` を省略してはいけません。古いAutoCADで開く必要がある場合、`ac2013_dwg` などの定数を明示的に指定しないと、最新形式で保存されてしまい、現場の誰かが開けなくなる事故が発生します。

② 「ActiveDocument」の罠

コード内で `ThisDrawing` を多用していませんか? バッチ処理中は、「今どの図面がアクティブか」が非常に不安定になります。常に `doc` オブジェクト(引数で渡したもの)を明示的に指定する癖をつけてください。

③ プロンプトの抑制

AutoCADが「この図面は読み取り専用で開きますか?」といったダイアログを出すと、マクロはそこで停止します。`Application.FileDia = 0` を一時的にセットして、ダイアログを無効化するテクニックも検討しましょう。

—

最後に:自動化エンジニアの心得

ここまでできれば、あなたはもうマクロの記録係ではありません。図面管理という退屈な作業から解放され、よりクリエイティブな設計に時間を割くことができます。

次なるステップ:
もし数千枚単位の処理が必要になったら、次は「ObjectDBX(AxDbDocument)」を学んでください。図面を一切画面に出さず、メモリ上だけで図形を操作する、まさに「伝説のエンジニア」の領域です。

ここをクリアすれば、AutoCAD VBAの基本はバッチリです。あなたの自動化ライフが、より快適なものになることを願っています。何か詰まったら、いつでも戻ってきてくださいね。応援しています!

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