こんにちは!AutoCAD VBAの世界へようこそ。
マクロの記録ボタンを押して「なんだか動いたけれど、中身がよくわからない…」という状態から抜け出し、自分の手で図面を自在にコントロールできるようになりたい時期ですね。
今回は、AutoCAD VBAにおける図面保存のキモ、`SaveAs`メソッドの引数(特に保存形式:`AcSaveAsType`列挙型)について徹底的に解説します。
ここをクリアすれば、意図しない古いバージョンで保存してしまったり、DWGで保存すべきところでDXFになってしまったりといった「現場のヒヤリハット」を完全に防げるようになります。優しく丁寧に紐解いていきますので、一緒にマスターしていきましょう!
—
1. なぜ「保存」でつまずくのか?(マクロの記録の限界)
AutoCADで図面を上書き保存したり、別名で保存したりするとき、画面上の「名前を付けて保存」ダイアログボックスを使いますよね。
しかし、VBAで自動化を行う場合、ダイアログを出さずに裏側でサクッと保存を完了させたいケースがほとんどです。ここでマクロの記録を使うと、以下のようなコードが出力されます。
ThisDrawing.SaveAs “C:\Work\Sample.dwg”
一見これで動くように見えますが、実務の現場ではこれだけでは不十分です。
「取引先から指定された古いバージョントラブル(例: AutoCAD 2013形式でくれ、など)」に対応する必要があったり、「CADソフト間でデータを渡すためにDXF形式で吐き出したい」という要望があったりします。
そんな時に武器になるのが、`SaveAs`メソッドの第2引数である「保存形式(`AcSaveAsType`)」です。
—
2. SaveAsメソッドの基本構文と魔法の引数
`SaveAs`メソッドは、対象となる図面オブジェクト(`Document`)に対して呼び出します。
object.SaveAs FileName [, FileFormat]
- `FileName` (文字列): 保存先のフルパス(例: `”C:\Project\2023_Design.dwg”`)
- `FileFormat` (省略可能): どのバージョン・形式で保存するかを指定する定数(`AcSaveAsType`列挙型)
この第2引数に何を渡すかによって、保存されるファイルのフォーマットが決定されます。
—
3. AcSaveAsType列挙型の一覧とバージョン互換の罠
AutoCAD VBAには、保存形式を指定するための専用の定数が用意されています。これが`AcSaveAsType`です。
初心者のうちは、「最新形式で保存しておけばいいや」と思いがちですが、AutoCADはバージョンごとにDWGの内部構造がアップデートされています。新しいバージョンで作った図面は、そのままでは古いバージョンのAutoCADで開くことができません。
実務でよく使う主要な定数を整理しておきましょう。
| 定数名(AcSaveAsType) | 実際の形式・バージョン | 主な用途・特徴 |
| :— | :— | :— |
| `acR12DXF` | AutoCAD R12/LT2 DXF | 最も古い互換用DXF。異系統CADへの受け渡しによく使われる |
| `ac2000DWG` / `ac2000DXF` | AutoCAD 2000形式 | 古い社内システムや特殊なLegacy環境向けの保存 |
| `ac2004DWG` / `ac2004DXF` | AutoCAD 2004形式 | 一昔前の標準。2004〜2006世代 |
| `ac2007DWG` / `ac2007DXF` | AutoCAD 2007形式 | 3Dモデリングの構造が大きく変わった世代 |
| `ac2010DWG` / `ac2010DXF` | AutoCAD 2010形式 | 2010〜2012世代の標準 |
| `ac2013DWG` / `ac2013DXF` | AutoCAD 2013形式 | 2013〜2017世代の標準(実務で「古いバージョンで」と言われたら大体これ) |
| `ac2018DWG` / `ac2018DXF` | AutoCAD 2018形式 | 近年の標準フォーマット(2018以降現在まで継続中) |
> 💡 シニアエンジニアからのワンポイントアドバイス
> 引数を省略して `ThisDrawing.SaveAs “C:\path\file.dwg”` と書いた場合、現在実行しているAutoCADが持っている「デフォルトの保存形式」で保存されます。
> しかし、マクロで厳格にバージョンをコントロールしたい場合は、必ず第2引数を明示的に指定するのがプロの作法です。「意図しないバージョンで保存されて先方に怒られた…」という事故を防ぐためにも、ここは省略しないことを強く推奨します。
—
4. 【実践】形式をパッと切り替えるVBAコード例
それでは、実際にコードを書いてみましょう。
以下のサンプルコードは、現在開いている図面を「指定したフォルダ」に「AutoCAD 2013形式のDWG」と「汎用的なDXF」の両方でバックアップ保存する実用的なマクロです。
Sub SaveWithFormatExample()
Dim targetPath As String
Dim targetFolder As String
‘ 保存先のフォルダパス(環境に合わせて書き換えてください)
targetFolder = “C:\AutoCAD_Backup\”
‘ フォルダが存在するか簡易チェック(エラーハンドリングの基本)
If Dir(targetFolder, vbDirectory) = “” Then
MsgBox “保存先フォルダが存在しません: ” & targetFolder, vbCritical, “エラー”
Exit Sub
End If
On Error GoTo ErrorHandler
‘ —————————————————-
G1: AutoCAD 2013形式のDWGとして保存する
‘ —————————————————-
targetPath = targetFolder & “Drawing_v2013.dwg”
‘ 第2引数に ac2013DWG を指定
ThisDrawing.SaveAs targetPath, ac2013DWG
‘ —————————————————-
‘ 2. 同じ図面を AutoCAD 2018形式のDXFとして別名保存する
‘ —————————————————-
targetPath = targetFolder & “Drawing_v2018.dxf”
‘ 第2引数に ac2018DXF を指定
ThisDrawing.SaveAs targetPath, ac2018DXF
MsgBox “ファイルの保存が正常に完了しました!”, vbInformation, “成功”
Exit Sub
ErrorHandler:
‘ 予期せぬエラー(ファイルが開かれている、書き込み権限がない等)をキャッチ
MsgBox “保存中にエラーが発生しました: ” & Err.Description, vbCritical, “致命的エラー”
End Sub
コードの解説
1. `ac2013DWG` や `ac2018DXF` の利用:
これらはAutoCAD VBAにあらかじめ組み込まれている定数(グローバル定数)です。そのため、宣言なしでそのまま使うことができます。
2. 拡張子と定数の整合性:
`ac2013DWG`を指定しているのに、ファイル名を `.dxf` にするなど、形式と拡張子がチグハグになるとAutoCAD側でエラーになるか、意図しないファイルが生成されます。保存する定数とファイルの拡張子は必ず一致させましょう。
—
5. 初心者が陥りやすいエラーと回避策
最後に、実務でよくあるハマりどころをいくつかご紹介します。ここを知っておくだけで、無駄なデバッグ時間を大幅に削減できます。
トラブル①:すでに同名のファイルが存在していてエラーになる
`SaveAs`メソッドは、指定したパスにすでに同名のファイルが存在する場合、確認なしで上書きするか、あるいは環境や設定によってはエラーで止まることがあります。
- 対策: あらかじめ `Dir` 関数などでファイルの存在をチェックし、上書きしてもよいか確認するロジックを入れるか、不要な古いファイルを `Kill` ステートメントで削除する処理を挟みましょう。
トラブル②:現在の図面が「未保存(新規作成したばかり)」のとき
一度も保存されていない(名前がついていない)図面に対して、いきなり`SaveAs`を実行すると、パスの指定が正しければ問題なく保存されますが、もしパスを誤ったりするとエラーになります。
- 対策: `ThisDrawing.Path` プロパティが空(`””`)かどうかを判定し、新規図面の場合は適切なフォルダパスを自動生成してあげる親切設計にするとマクロの品質がグッと上がります。
—
まとめ
今回は、`SaveAs`メソッドの引数と、DWG/DXFの保存形式の切り替えについて解説しました。
- 保存形式をコントロールするには、第2引数に `AcSaveAsType` 列挙型(`ac2013DWG` や `ac2018DXF` など)を指定する。
- 相手の環境(古いAutoCADバージョンなど)に合わせた配慮ができるよう、定数の選び方をマスターする。
- 保存する「定数」とファイル名の「拡張子」は必ず一致させる。
ここをクリアできれば、もう「マクロの記録」に頼り切りの初心者ではありません。現場のニーズに合わせた賢い図面自動化ツールが作れるようになりますよ。
日々のAutoCADライフを、より快適でスマートなものにしていきましょう!それでは、次のステップでお会いしましょう。
