【入門編】【初心者向け】AcadDocument.SaveAsで失敗しない!ファイル形式(DWG/DXF)とバージョン指定のパラメータ解説 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCADの自動化の世界へようこそ。
チーフアーキテクトの私です。

「マクロの記録」で作ったコードをいざ再生してみたら、なぜか保存のところでエラーが起きる、あるいは意図しない古い形式になってしまって困った――そんな経験はありませんか?

AutoCAD VBAにおいて、図面を保存する操作は最も基本でありながら、オブジェクトモデルの作法と「ファイル形式・バージョン」の罠を知らないと、簡単に牙を剥くポイントでもあります。

今回は、初心者の方が絶対に躓かないための『`AcadDocument.SaveAs`の極意』を、優しく、そして本質的なところまで徹底的に解説していきましょう。ここをクリアすれば、あなたのVBAスキルは「マクロの初心者」から「脱・初心者エンジニア」へと確実にステップアップしますよ!

1. なぜ「SaveAs」でつまずくのか?(オブジェクトモデルの基本)

まず、AutoCAD VBAの心臓部を思い出してください。
AutoCADでは、開いている図面一つひとつが `AcadDocument` というオブジェクトとしてメモリ上に存在しています。そして、その図面をファイルとしてハードディスクに書き出すのが `SaveAs` メソッドです。

ここで初心者がやりがちなミスが、現在アクティブな図面(`ActiveDocument`)のコンテキストを無視して、いきなり保存メソッドを叩いてしまうこと。さらに厄介なのが、「保存先のファイル形式(DWGなのかDXFなのか)」や「どのAutoCADのバージョンで保存するのか」を正しく指定できていないケースです。

SaveAsの基本構文

object.SaveAs FileName, [FileFormat], [SecurityParams]

  • FileName: 保存先のフルパス(例: `”C:\Works\Drawing1.dwg”`)
  • FileFormat: 保存するファイルの形式とバージョン(超重要!)
  • SecurityParams: パスワードなどのセキュリティ設定(通常は省略可)

この中の `FileFormat` に何を渡すかで、保存の成否が決まります。

2. 魔法の定数「AcSaveAsType」をマスターする

異なるバージョンのAutoCADを使っている取引先や協力会社へ図面を渡すとき、「AutoCAD 2013形式のDWGで保存してほしい」「DXF形式で吐き出してほしい」と言われることはよくありますよね。

ここで登場するのが、AutoCAD VBAがあらかじめ用意してくれている定数グループ、`AcSaveAsType`(ファイル形式列挙型) です。

これを知っていれば、もうバージョン違いのトラブルに怯える必要はありません。代表的なものをいくつか見てみましょう。

| 指定する定数 | 意味・ファイル形式 | 主な用途 |
| :— | :— | :— |
| `acR12_DXF` | AutoCAD R12/LT2 DXF | 古い他社製CAMや特殊な加工機へデータを渡すとき |
| `ac2000_DWG` / `ac2000_DXF` | AutoCAD 2000 形式 | レガシーなシステムとの連携 |
| `ac2004_DWG` / `ac2004_DXF` | AutoCAD 2004 形式 | 一部の堅いインフラ系データやり取り |
| `ac2010_DWG` / `ac2010_DXF` | AutoCAD 2010 形式 | 幅広いバージョンで読める汎用形式 |
| `ac2018_DWG` / `ac2018_DXF` | AutoCAD 2018 以降形式 | 最新の標準形式(2018〜2025現在) |

※AutoCADのバージョンが上がるにつれて、新しい形式の定数が追加されていきます。「今の自分の環境で何が使えるか」は、VBAのオブジェクトブラウザ(`F2`キー)で `Ac` から始まる定数を覗いてみると一目瞭然です。

3. 【実践】絶対に失敗しない!バージョンを指定した保存マクロ

それでは、実際に動かせる実用的なコードを見てみましょう。
このコードでは、現在開いている図面を「AutoCAD 2010形式のDWG」として別名保存する処理を行います。

Sub SaveAsSpecificVersion()
Dim oDoc As AcadDocument
Set oDoc = ThisDrawing.Application.ActiveDocument

‘ 保存先のパスとファイル名を設定
Dim targetPath As String
targetPath = “C:\AutoCAD_Works\Sample_2010.dwg”

‘ エラーハンドリングの準備(上書き時のトラブル防止)
On Error GoTo ErrorHandler

‘ 【重要】すでに同名のファイルが存在する場合の対策
If Dir(targetPath) <> “” Then
‘ すでにファイルがある場合は削除するか、別名にするなどの処理を挟む
‘ ここではシンプルに上書きを許可するため一度ファイルをキル(削除)
Kill targetPath
End If

‘ AutoCAD 2010 形式の DWG として保存を実行
‘ ac2010_DWG を指定することで、古いバージョンを使っている相手にも優しく渡せます
oDoc.SaveAs targetPath, ac2010_DWG

MsgBox “保存が正常に完了しました!”, vbInformation, “成功”
Exit Sub

ErrorHandler:
MsgBox “保存中にエラーが発生しました: ” & Err.Description, vbCritical, “エラー”
End Sub

コードの解説とエンジニアの知見

1. `ThisDrawing.Application.ActiveDocument`:
今まさに操作しているドキュメントを安全に取得しています。`ActiveDocument` を明示的に変数に格納することで、コードが迷子になるのを防げます。
2. `Dir` 関数と `Kill` ステートメント:
実は、`SaveAs` メソッドは「すでに同名のファイルが存在する場合、エラーを吐くか、警告ダイアログを出して処理が止まる」という性格を持っています。完全自動化(バッチ処理など)を目指す場合、このダイアログは致命的な足止めになります。そのため、事前にファイルが存在するかチェックし、安全にクリアしておくのがプロの技です。

4. 警告ダイアログや上書きエラーを華麗に回避する極意

先ほど少し触れましたが、AutoCAD VBAで最も厄介なのは、「保存しますか?」「上書きしますか?」という見えないダイアログが背後でポップアップし、プログラムがフリーズしたように止まってしまう現象です。

これを防ぐための、知られざる強力なシステム変数があります。それが `EXPERT``FILEDIA` です。

もし完全に裏側でサイレント保存(確認なしでの上書き保存)を行いたい場合は、以下のようにシステム変数を一時的に操作します。

Sub SilentSaveAs()
Dim oDoc As AcadDocument
Set oDoc = ThisDrawing.Application.ActiveDocument

Dim targetPath As String
targetPath = “C:\AutoCAD_Works\SilentSample.dwg”

‘ — ダイアログや警告を完全ブロック —
‘ FILEDIAを0にすると、ファイル保存ダイアログの表示を抑制
Dim oldFileDia As Integer
oldFileDia = ThisDrawing.GetVariable(“FILEDIA”)
ThisDrawing.SetVariable “FILEDIA”, 0

‘ EXPERTを5などにすると、「上書きしますか?」の警告すらスキップして強制上書き
Dim oldExpert As Integer
oldExpert = ThisDrawing.GetVariable(“EXPERT”)
ThisDrawing.SetVariable “EXPERT”, 5
—————————————–

On Error GoTo SafeExit

‘ 保存実行(同名ファイルがあっても警告なしで上書きされる)
oDoc.SaveAs targetPath, ac2018_DWG

SafeExit:
‘ — 設定を必ず元の状態に戻す(これ超重要!) —
ThisDrawing.SetVariable “FILEDIA”, oldFileDia
ThisDrawing.SetVariable “EXPERT”, oldExpert

If Err.Number = 0 Then
MsgBox “サイレント保存が完了しました。”, vbInformation
Else
MsgBox “エラー: ” & Err.Description, vbCritical
End If
End Sub

チーフアーキテクトからの警告

`FILEDIA` や `EXPERT` などのシステム変数をいじるコードを書くときは、必ず「エラーが起きようとも、元の値に復元する(SafeExitのような脱出経路を作る)」ことを鉄則にしてください。これを怠ると、ユーザーが手動でAutoCADを操作するときに「ファイル保存画面が出ない!」「警告が出なくて怖い!」という深刻なユーザビリティのバグを引き起こす原因になります。

まとめ:ここをクリアすればAutoCAD VBAの基本はバッチリ!

今回は、`AcadDocument.SaveAs` を用いたファイル形式・バージョンの指定方法と、自動化の大敵である「警告ダイアログの回避策」について解説しました。

  • ファイル形式の指定には `AcSaveAsType` 列挙体(例: `ac2010_DWG`)を使うこと
  • 同名ファイルが存在する場合のエラーやダイアログの挙動を予測しておくこと
  • 完全自動化にはシステム変数(`FILEDIA` や `EXPERT`)のコントロールが有効だが、復元処理を忘れないこと

この3つさえ押さえておけば、図面の保存周りで路頭に迷うことはもうありません。
日々の面倒な「バージョン変換の手間」や「ファイル名の付け替え作業」は、すべてVBAに肩代わりさせちゃいましょう。

あなたのAutoCAD自動化ライフが、より快適で創造的なものになることを応援しています!

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