【入門編】【初心者向け】図面を閉じる際に「保存しますか?」ダイアログを抑制するVBAテクニック – AutoCAD VBA解析バイブル

スポンサーリンク

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つのステップをマスターすれば、夜間に数百枚の図面を処理して、翌朝には全て完了している……そんな夢のような環境が構築できます。

最初は難しく感じるかもしれませんが、コードはあなたの書いた通りに動いてくれます。ぜひ、自分の環境で試して「ダイアログが出ずに図面が消える」快感を味わってみてください。

何か詰まったら、いつでも聞いてくださいね。応援しています!

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