AutoCAD VBAの「保存しますか?」ダイアログを完全に制圧する――自動化の第一歩
こんにちは。現場で日々、CADの自動化と格闘しているエンジニアです。
AutoCADのマクロを書き始めると、必ず一度はぶつかる壁があります。それが「図面を閉じるときに毎回出てくる『保存しますか?』というダイアログ」です。
自動化ツールを作っているのに、最後にいちいち人間がマウスをクリックしなければならない。これでは本当の自動化とは言えませんよね。今日は、このダイアログをプログラムの力で黙らせ、意図通りに図面を閉じるための「プロの作法」を伝授します。
—
1. なぜ「ダイアログ」が出てくるのか?
AutoCADの内部では、開いている図面に対して「変更が加えられた(Dirty状態)」というフラグが管理されています。`Close`メソッドをただ呼び出すだけだと、AutoCADは「未保存の変更があるけど、破棄していいの?」と律儀に確認してくるわけです。
これを制御するには、「保存してから閉じる」か「変更を破棄して閉じる」の二択を、コード側で明示的に指示する必要があります。
—
2. 実践コード:ダイアログを抑制して閉じる
以下のコードをVBAエディタに貼り付けてみてください。ここが自動化のマスターキーになります。
Sub CloseDrawingExample()
Dim doc As AcadDocument
Set doc = ThisDrawing ‘ 現在開いている図面を対象にする
‘ パターンA:変更を保存して閉じる場合
‘ Saveメソッドを呼ぶことで、AutoCADは「保存済み」と判断し、ダイアログを出さずに閉じます
doc.Save
doc.Close False ‘ Falseは「変更を保存せずに閉じる(既に保存したので実質閉じるだけ)」
‘ パターンB:変更を破棄して閉じる場合
‘ あえてSaveせずにClose Falseを呼ぶことで、変更を無視して強制終了させます
‘ doc.Close False
End Sub
コードの解説
- `doc.Save`: 文字通り、現在のドキュメントを保存します。これを実行した時点で、AutoCADの「Dirtyフラグ」がクリアされます。
- `doc.Close False`: `Close`メソッドの引数に`False`を渡すと、「保存確認なしで閉じる」という挙動になります。
—
3. 初学者が陥りやすい「落とし穴」
多くの初心者がここでつまづくのが「保存先(ファイルパス)が未定義の場合」です。
新しく作成した図面(図面1.dwgなど)で`Save`を呼ぶと、AutoCADは「どこに保存すればいいの?」とダイアログを出して止まってしまいます。これを防ぐには、以下のように`SaveAs`を使うのが鉄則です。
‘ 名前をつけて保存してから閉じるプロのテクニック
If doc.Path = “” Then
‘ まだ保存されていない図面なら名前をつけて保存
doc.SaveAs “C:\Temp\AutoSavedDrawing.dwg”
Else
‘ 既に保存されているなら上書き保存
doc.Save
End If
doc.Close False
—
4. なぜ「Close False」だけではダメなのか?
「じゃあ最初から `doc.Close False` だけでいいのでは?」と思うかもしれません。しかし、これだけだと「最後に編集した内容がすべて消える」というリスクがあります。
- 自動化の鉄則: 「何が起きてもデータが失われないこと」を最優先してください。
- 判断ロジックを組む: プログラムで「保存すべきか、破棄すべきか」を条件分岐(`If`文)で制御することが、システムを安定させる唯一の道です。
—
5. まとめ:ここをクリアすれば、あなたはもう初心者じゃない
今回紹介した「図面を静かに閉じる」という処理。地味ですが、実は大規模な図面一括処理ツールを作るための心臓部です。
1. `Save` でフラグをクリアする
2. `SaveAs` でパスを確定させる
3. `Close False` でダイアログを回避する
この3つのステップをマスターすれば、夜間に数百枚の図面を処理して、翌朝には全て完了している……そんな夢のような環境が構築できます。
最初は難しく感じるかもしれませんが、コードはあなたの書いた通りに動いてくれます。ぜひ、自分の環境で試して「ダイアログが出ずに図面が消える」快感を味わってみてください。
何か詰まったら、いつでも聞いてくださいね。応援しています!
