【入門編】【実務中級者向け】最新DWGを旧バージョンへ一括変換:バージョン互換性を保つための注意点 – AutoCAD VBA解析バイブル

スポンサーリンク

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コードは、いわば「現場の緊急回避策」であり、自動化の第一歩です。ここを完璧に理解し、自在に操れるようになれば、あなたはもう「マクロ記録」に頼るだけのユーザーではありません。「図面データという資産をコントロールするエンジニア」の仲間入りです。

何か不明な点があれば、いつでも聞いてください。設計者の時間を奪う「単純作業」は、すべて我々エンジニアがコードで消し去りましょう。応援しています!

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