【入門編】【上級プロフェッショナル向け】大量の図面ファイル群のバージョン互換性チェックと自動変換パイプライン – AutoCAD VBA解析バイブル

スポンサーリンク

【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を動かしてみてください。

応援しています。何か詰まったら、いつでも戻ってきてくださいね。

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