【実務・中級編】【初心者向け】SaveAsメソッドでDWGをDXFに変換:旧バージョン互換性を意識した保存設定 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAの呪縛を解く:DXF変換を「ただの保存」で終わらせない堅牢なアーキテクチャ

AutoCADの自動化において、`SaveAs`メソッドは最も初歩的でありながら、最も地雷が埋まっている領域だ。特にDWGからDXFへの変換は、単に拡張子を変えればいいというものではない。バージョン互換性とデータベースの整合性を無視したコードは、必ず後になって「開けないファイル」「壊れたレイヤデータ」という形で現場に牙を剥く。

今回は、実務レベルで「絶対に失敗しない」DXF変換の極意を伝授する。

—

なぜ、ただの`SaveAs`では不十分なのか?

初心者が陥る最大の間違いは、開いている図面をそのままの状態で、何の考慮もせずに`SaveAs`することだ。

1. アクティブドキュメントの非同期性: `ThisDrawing`に依存しすぎると、別図面のバッチ処理時に予期せぬ挙動を生む。
2. データベースの整合性: AutoCADはメモリ上で複雑なオブジェクトグラフを構築している。保存前に`Update`や`Audit`(監査)を挟まない保存は、データの欠損を誘発する。
3. バージョン互換の罠: DXFはバージョンごとにサポートされるエンティティが異なる。最新のDWGにある高度なオブジェクト(注釈尺度やダイナミックブロックの特殊パラメータなど)は、古いDXF形式では「ただの線」や「無価値なデータ」に化ける可能性がある。

—

プロダクション環境に耐えうる「DXF変換」コード

このコードは、単に保存するだけでなく、エラーハンドリングとファイルシステムの安全性を考慮したテンプレートだ。

Option Explicit

‘ @brief 指定したDWGを特定のDXFバージョンで保存する堅牢な関数
‘ @param filePath 保存先のフルパス(拡張子は.dxf)
‘ @param dxfVersion ACAD_VERSION列挙体などを指定(例: acR12_DXF, acR2013_DXF等)
Public Sub ExportToDXF(ByVal targetDoc As AcadDocument, ByVal savePath As String, ByVal dxfVersion As AcSaveAsType)
On Error GoTo ErrorHandler

‘ 1. 保存前のアシュアランス:データベースの整合性を確保する
targetDoc.Regen acActiveViewport

‘ 2. ファイル存在チェック(上書き確認のオーバーヘッドを回避)
If Dir(savePath) <> “” Then
‘ 必要に応じて既存ファイルを削除、あるいは別名保存を促すロジックを入れる
‘ Kill savePath
End If

‘ 3. SaveAsの実行
‘ 第2引数のVersionは、AcSaveAsTypeで指定する
‘ ここがDXF互換性の肝となる
targetDoc.SaveAs savePath, dxfVersion

Exit Sub

ErrorHandler:
MsgBox “DXF変換エラー: ” & Err.Description, vbCritical
‘ 必要に応じてログ出力処理をここに記述
End Sub

‘ 実行用ラッパー
Public Sub BatchConvertCurrentDrawing()
Dim targetDoc As AcadDocument
Set targetDoc = ThisDrawing

‘ 例: AutoCAD 2013形式のDXFで保存
‘ ※互換性重視なら acR12_DXF を選択するのが業界標準
Call ExportToDXF(targetDoc, “C:\Temp\ExportedDrawing.dxf”, acR2013_DXF)

MsgBox “変換完了”
End Sub

—

アーキテクトからの設計アドバイス

1. バージョン選択の「正解」

「最新ならいいだろう」という考えは捨てよ。相手先が使用しているCADのバージョン、あるいは利用する外部システム(CAMソフトやBIM連携ツール)が解析できる形式をピンポイントで指定すること。特に、レガシーなシステムであれば `acR12_DXF` を選ぶのが鉄則だ。R12形式は余計なメタデータを持たないため、データ交換の「最小公倍数」として非常に優秀である。

2. ファイルシステムの競合を避ける

`SaveAs`を行う際、ネットワークドライブ上のファイルを直接操作するのは避けるべきだ。

  • ローカルへコピー -> 変換処理 -> 目的のパスへ移動

この手順を踏むだけで、ネットワーク切断による破損リスクは劇的に下がる。

3. 監査(Audit)の重要性

DXF変換の直前に `SendCommand` で `_.AUDIT` コマンドを実行し、Yオプションを渡すテクニックがある。自動化において、データベースが破損したままDXF化されるのを防ぐ唯一の防波堤となる。

最後に:自動化は「品質」への挑戦である

コードを書くことは手段に過ぎない。君たちが目指すべきは、「誰がいつ実行しても、同じ品質のデータが吐き出される」仕組みを作ることだ。

今回紹介したコードは、あくまで「骨組み」だ。これにログ出力、フォルダの再帰的走査、そしてエラー時のメール通知などを統合していけば、それは単なるマクロから「自動化基盤」へと進化する。

迷わず実装し、現場の非効率を根絶せよ。検討を祈る。

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