【AutoCAD VBA】数千枚の図面を制御せよ:堅牢な一括変換パイプラインの構築術
こんにちは。AutoCADの自動化という深淵な世界へようこそ。
「マクロの記録」から卒業し、数千、数万枚の図面を自由に操る——これは単なる作業効率化ではなく、AutoCADという巨大なエンジンをあなたの掌中に収める「職人」への第一歩です。
今日は、業務で最も要求されるのに、誰もが「エラーで止まる」と頭を抱える「大規模図面の一括バージョン変換パイプライン」の構築法を伝授します。
—
1. なぜ「力技」ではいけないのか?
数千枚の図面を処理する際、もっとも避けるべきは「図面を開きっぱなしにする」ことです。AutoCADのメモリ管理は繊細です。`Documents.Open`で次々と開いていくと、数分もしないうちにメモリリークやGhostプロセスが発生し、システムは崩壊します。
極意:
1. 処理するたびに確実に閉じる(`Document.Close`)
2. エラーを握りつぶさず、ログに「逃がす」
3. 「再開ポイント(チェックポイント)」を用意する
この3つを守るだけで、あなたの自動化ツールは「おもちゃ」から「業務インフラ」へと昇華します。
—
2. 堅牢な変換パイプラインの設計図
今回は、指定フォルダ内のDWGを一括で「AutoCAD 2018形式」に変換するコードを例にします。
準備:参照設定
VBAエディタ(Alt+F11)の「ツール」→「参照設定」で、AutoCAD Type Library にチェックが入っていることを確認してください。
実装コード
Option Explicit
‘ 変換対象のバージョン定数(AutoCAD 2018形式)
Const TARGET_VERSION As AcSaveAsType = ac2018_dwg
Sub BatchConvertDrawings()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim doc As AcadDocument
Dim targetFolder As String
targetFolder = “C:\Drawings\Target\” ‘ 処理したいフォルダを指定
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set folder = fso.GetFolder(targetFolder)
‘ ログファイルの作成(エラー発生時も追跡可能に)
Dim logFile As Integer
logFile = FreeFile
Open targetFolder & “process_log.txt” For Output As #logFile
For Each file In folder.Files
If LCase(fso.GetExtensionName(file.Path)) = “dwg” Then
On Error Resume Next ‘ 万が一のクラッシュを防ぐ盾
Set doc = Application.Documents.Open(file.Path, True) ‘ 読み取り専用で開く
If Err.Number <> 0 Then
Print #logFile, “エラー発生: ” & file.Name & ” – ” & Err.Description
Err.Clear
Else
‘ ここでバージョン変換を実行
doc.SaveAs file.Path, TARGET_VERSION
doc.Close False ‘ 変更を保存せずに閉じる
Print #logFile, “成功: ” & file.Name
End If
On Error GoTo 0 ‘ エラーハンドリングを解除
End If
Next
Close #logFile
MsgBox “全処理が完了しました。ログを確認してください。”
End Sub
—
3. 解説:ここを理解すれば「プロ」への道が開ける
① `On Error Resume Next` の正しい使い方
「エラーを無視する」と教わることもありますが、これは「ピンポイントでエラーを管理する」ためのものです。特定のファイルが壊れていて開けない場合、そこでプログラム全体を停止させるのは非効率です。エラーをログに書き出し、次のファイルへ進むという「不屈のパイプライン」を作るために不可欠です。
② `Documents.Open` の引数 `ReadOnly:=True`
図面を編集しないのであれば、必ず読み取り専用で開いてください。これにより、図面が書き込み禁止状態で開かれ、処理時間が短縮されるだけでなく、誤って図面を上書き保存してしまうリスクをゼロにできます。
③ `Close False` の意味
`doc.Close` の後に `False` を付けることで、「保存せずに閉じる」を明示しています。`SaveAs` で変換済みファイルを保存した後なので、メモリ上の変更を破棄して閉じるのが最もクリーンな終了方法です。
—
4. 次のステップ:より高度なエンジニアへ
今回紹介したのは「変換」の基礎です。現場では、ここからさらに以下のような拡張が求められます。
- 処理の再開機能: ログファイルを見て、既に処理済みのファイルはスキップするように `If` 文を調整する。
- バックグラウンド処理: `Application.Visible = False` を使うことで、目に見えないところで処理を完結させる(ただし、GUI操作が絡む場合は注意が必要です)。
- 図面監査(Audit): `SendCommand` 等を組み合わせ、変換前に図面の整合性チェック(AUDITコマンド)を自動実行する。
AutoCAD VBAは、古い技術だと言われることもあります。しかし、設計図面という「資産」を直接制御できる言語は、今なおエンジニアにとって最強の武器です。
ここをクリアしたあなたなら、もうマクロの記録に頼る必要はありません。次は、特定の画層を抽出したり、図面内のブロックを自動集計したりと、あなたの思うままにCADを動かしてみてください。
応援しています。何か詰まったら、いつでも戻ってきてくださいね。
