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

スポンサーリンク

【AutoCAD VBAの極意】最新図面を「過去の遺産」へ繋ぐ:DXF変換の鉄則

こんにちは。AutoCADの自動化という深淵な世界へようこそ。
「マクロの記録」から一歩踏み出し、自らの手でAutoCADを意のままに操る。その第一歩として、「図面のバージョン管理とフォーマット変換」ほど実用的で、かつ奥が深いテーマはありません。

今回は、最新のDWGをあえて旧形式のDXFで保存するという、現場で避けては通れない「互換性の作法」について、プロの視点から解説します。

—

1. なぜ「SaveAs」を理解する必要があるのか

AutoCADにおいて、`SaveAs`(名前を付けて保存)メソッドは、単なるファイル保存ではありません。「図面オブジェクトのメモリ状態を、特定のフォーマットという『型』に流し込むプロセス」です。

初心者がやりがちなのは、適当に引数を指定してエラーを吐かせること。しかし、我々エンジニアは違います。「どのバージョンで保存し、どの形式に変換するか」を制御することで、外部システムや他社との連携を完全にコントロールするのです。

—

2. DXF保存の基本コード

まずは、最も標準的な「DWGをR12形式のDXFで保存する」コードを見てみましょう。

Sub SaveAsDXF_Example()
‘ 現在アクティブなドキュメントを取得
Dim doc As AcadDocument
Set doc = ThisDrawing

‘ 保存先のフルパス(拡張子は必ず.dxfにする)
Dim filePath As String
filePath = “C:\Output\ConvertedDrawing.dxf”

‘ SaveAsメソッドの核心
‘ 引数1: ファイルパス
‘ 引数2: ファイルフォーマット定数 (acDXF_R12など)
On Error Resume Next
doc.SaveAs filePath, acDXF_R12

If Err.Number <> 0 Then
MsgBox “保存に失敗しました。パスや権限を確認してください。”, vbCritical
Else
MsgBox “成功!DXF変換が完了しました。”
End If
On Error GoTo 0
End Sub

コードの要点解説

  • `acDXF_R12`: ここが重要です。AutoCADには多くのDXFバージョンがありますが、R12は最も互換性が高く、古いCAMソフトや外部ツールでも読み込める「黄金の標準」です。
  • エラーハンドリング: `On Error Resume Next` を入れています。ファイルが既に開かれている、あるいは書き込み権限がないといった「物理的な制約」で止まらないようにするためです。

—

3. 互換性の罠:初心者が陥りやすい「3つの落とし穴」

現場でコードを書いていて、以下のような壁にぶつかったことはありませんか?

1. 「保存はできたが、開くと文字化けしている」

  • 原因: DXFのエンコーディング問題です。R12などの古い形式では、現在のUnicode文字が正しく解釈されないことがあります。必要であれば、保存前に図面内のフォントを標準的なものに置換する処理を挟む必要があります。

2. 「保存したDXFが、あまりに巨大すぎる」

  • 原因: 保存オプションを設定していないからです。`SaveAs`の前に、`AcadDocument.SetVariable` を使って「PROXYGRAPHICS」などのシステム変数を調整すると、不要なバイナリデータを削れる場合があります。

3. 「バックグラウンドで保存しているつもりなのに、ダイアログが出る」

  • 原因: `FILEDIA`システム変数が「1」になっていると、保存ダイアログが強制的に表示されます。VBA実行中は `ThisDrawing.SetVariable “FILEDIA”, 0` とし、終了後に「1」へ戻すのがプロの作法です。

—

4. プロとしての一歩先へ:システム変数の制御

自動化の精度を上げるために、以下のコードを保存処理の前後に追加してみてください。

‘ 保存前にFILEDIAをオフにしてダイアログを抑制
ThisDrawing.SetVariable “FILEDIA”, 0

‘ ここにSaveAsの処理を入れる

‘ 処理が終わったら必ず元に戻す
ThisDrawing.SetVariable “FILEDIA”, 1

これをやるかやらないかで、プログラムの「プロっぽさ」が決まります。余計なウィンドウを表示させず、静かに、確実にタスクを完了させること。これが自動化の美学です。

—

最後に:あなたへのアドバイス

AutoCAD VBAは、古い言語と言われることもあります。しかし、「AutoCADの内部メモリを直接叩ける」という事実は、最新の.NET APIであっても変わらない強みです。

まずは今回の `SaveAs` で、手元の図面を自在にフォーマット変換してみてください。それができれば、次は「フォルダ内の全DWGを一括変換する」という次のステージが見えてくるはずです。

もしエラーが出ても、それはAutoCADがあなたに「もう少し詳しく教えてくれ」と言っているだけです。一つずつ紐解けば、必ず突破できますよ。

さあ、あなたのコードで、図面管理の時間を劇的に短縮させましょう!応援しています。

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