AutoCAD VBAで「バージョン地獄」を脱出せよ:最新DWGを安全に旧形式へ一括変換する極意
現場でこんな経験はありませんか?
「最新のAutoCADで作った図面を協力会社に送ったら、『開けない』と言われてしまった……」。
AutoCADのバージョン互換性は、設計業務における永遠の課題です。これを手作業で「名前を付けて保存」からバージョンを選んで……なんて繰り返すのは、エンジニアの仕事ではありません。
今日は、AutoCAD VBAを駆使して、複数ファイルを一括で旧バージョン形式に変換する「自動化の武器」を授けます。単なるコードの提供ではなく、現場の事故を防ぐための「エンジニアの視点」を共有しましょう。
—
1. なぜ「SaveAs」だけでは不十分なのか?
VBAでファイルを保存する際、単に `SaveAs` を呼ぶだけでは不十分です。
特に注意すべきは、「オブジェクトの互換性」と「図面データベースの整合性」です。
最新版のAutoCADには、古いバージョンには存在しない「高度な図形データ」が含まれていることがあります。これらを無理やり旧形式に保存しようとすると、データが欠落したり、最悪の場合、図面が破損するリスクがあります。
この自動化を成功させるための鉄則は以下の通りです。
1. 監査(Audit)を通す: 保存前に図面の健全性を確認する。
2. パージ(Purge)を検討する: 不要な定義を削除し、ファイルサイズとトラブルを減らす。
3. パスの正規化: ファイルの読み書きにおけるパス指定を厳密に行う。
—
2. 実践:DWG一括変換スクリプト
このコードは、指定したフォルダ内の全DWGファイルを、指定のバージョン(例:AutoCAD 2013形式)へ変換して別フォルダに保存するアーキテクチャです。
Sub BatchConvertDWG()
Dim fso As Object
Dim folderPath As String
Dim savePath As String
Dim file As Object
Dim doc As AcadDocument
‘ 1. フォルダ設定(環境に合わせて変更してください)
folderPath = “C:\Projects\TargetFolder\”
savePath = “C:\Projects\ConvertedFolder\”
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ 出力先フォルダがなければ作成
If Not fso.FolderExists(savePath) Then fso.CreateFolder (savePath)
‘ 2. ファイルループ処理
For Each file In fso.GetFolder(folderPath).Files
If LCase(fso.GetExtensionName(file.Path)) = “dwg” Then
‘ 図面を開く(非表示で開くと高速化可能だが、今回は安全のため可視で)
Set doc = Documents.Open(file.Path)
‘ 3. 【重要】保存形式の指定
‘ ac2013_dwg は AutoCAD 2013/2014/2015/2016/2017 で開ける標準的な形式
doc.SaveAs savePath & file.Name, ac2013_dwg
‘ 4. 閉じる(変更を破棄して閉じる)
doc.Close False
Debug.Print “変換完了: ” & file.Name
End If
Next
MsgBox “全ファイルの変換が完了しました!”
End Sub
コードのここがポイント!
- `ac2013_dwg`: これは定数です。バージョンによって `ac2010_dwg` や `ac2018_dwg` に書き換えるだけで制御可能です。
- `doc.Close False`: ここが重要です。保存後に改めて「変更を保存して閉じる」必要はありません。`SaveAs` で既に書き出されているため、ここでは「変更を破棄して閉じる」ことで処理速度を上げ、メモリ解放を確実に行います。
—
3. 陥りやすいエラーと対策
初心者が必ずぶつかる壁と、それを回避する「現場の知恵」を伝授します。
エラー①:「開くことができません」
多くの原因は「ファイルのロック」または「別のAutoCADプロセスが掴んでいる」ことです。
- 対策: コード実行前に、必ず全ての図面ファイルを閉じてください。また、VBAが暴走してAutoCADがバックグラウンドに残っていないか、タスクマネージャーで確認する癖をつけましょう。
エラー②:バージョンが古すぎて変換できない
非常に古い(AutoCAD 2000形式以前など)ファイルは、最新のAutoCADでは開けても、`SaveAs` でエラーになることがあります。
- 対策: `On Error Resume Next` をループ内で使用し、失敗したファイルだけをログファイル(テキスト)に書き出す処理を追加すると、実務では非常に重宝されます。
—
4. さらなる高みを目指すあなたへ
このスクリプトを卒業したら、次は「VB.NET(AutoCAD .NET API)」への移行を検討してください。
VBAは手軽ですが、図面を開かずにバックグラウンドで処理する「ObjectARX」的なアプローチは、.NET APIの方が圧倒的に高速で、かつ安定しています。
今回のVBAコードは、いわば「現場の緊急回避策」であり、自動化の第一歩です。ここを完璧に理解し、自在に操れるようになれば、あなたはもう「マクロ記録」に頼るだけのユーザーではありません。「図面データという資産をコントロールするエンジニア」の仲間入りです。
何か不明な点があれば、いつでも聞いてください。設計者の時間を奪う「単純作業」は、すべて我々エンジニアがコードで消し去りましょう。応援しています!
