【入門編】【初心者向け】図面を閉じる際の確認ダイアログ制御:保存せずに閉じるオプション – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCADの自動化の世界へようこそ。
今日は、VBAを使って図面をスマートに閉じる方法、特に「保存確認のダイアログを出さずに、変更を破棄して閉じる方法」について解説していくね。

「マクロの記録」から一歩踏み出し、自分の手でCADをコントロールしたい初学者の方にとって、ここは最初に感動するポイントの一つなんだ。
「ここをクリアすれば、AutoCAD VBAの基本はバッチリですよ!」という温かい気持ちで解説していくから、一緒にマスターしていこう!

—

なぜ「図面を閉じる処理」でつまづくのか?

AutoCADで作業をしていて、変更を加えた図面をVBAから閉じようとしたとき、こんな画面に出くわしたことはないかな?

> 「変更内容を保存しますか?」 [はい] [いいえ] [キャンセル]

人間が手動で操作しているときは親切なこのダイアログも、何百枚もの図面を連続処理する自動化(バッチ処理)の現場では、最大の障害になるんだ。
このダイアログが出た瞬間、プログラムはピタリと止まり、あなたが「いいえ」をクリックするのを待ち続けてしまう。これじゃあ、夜間に全自動で図面を整理する…なんて夢のまた夢だよね。

だからこそ、「ダイアログを無視して、変更を破棄して閉じる」という制御を覚える必要があるんだよ。

—

AutoCAD VBAにおける「図面を閉じる」基本のキ

まず、AutoCAD VBAで図面(データベース)をどう捉えているかを知ろう。
AutoCADでは、現在開いている図面の集まりを `Documents` コレクション、開いている特定の1枚の図面を `Document` オブジェクトと呼ぶよ。

図面を閉じるためのメソッドが、`Close` メソッドだ。

Closeメソッドの正しい書き方

実は、`Close` メソッドにはお作法がある。何も考えずに `ActiveDocument.Close` と書くと、冒頭の保存確認ダイアログが暴発してしまうんだ。

ダイアログを出さずに(あるいは保存するかどうかをコードで指定して)閉じるには、`Close` メソッドに引数を渡してあげる必要があるよ。

object.Close [bSaveChanges], [FileName]

  • `bSaveChanges` (引数1):
  • `True` を指定すると、「変更を保存して閉じる」。
  • `False` を指定すると、「変更を保存せずに(破棄して)閉じる」。
  • `FileName` (引数2):
  • `bSaveChanges` が `True` のとき、別名で保存する場合のファイルパスを指定するよ(今回は使わないから省略でOK!)。

—

【実践】保存せずに図面を閉じるコード

それでは、実際に動かせるコードを見てみよう。
以下のコードは、現在アクティブな図面に対して、「変更を一切保存せず、強制的に閉じる」ものだよ。

Sub CloseWithoutSaving()
‘ エラーハンドリングの準備(実務では必須!)
On Error GoTo ErrorHandler

‘ 現在アクティブな図面があるかチェック
If Application.Documents.Count = 0 Then
MsgBox “現在開いている図面はありません。”, vbExclamation, “通知”
Exit Sub
End If

Dim targetDoc As Document
Set targetDoc = ThisDrawing.Application.ActiveDocument

‘ 【超重要】
‘ 変更フラグ(Database.CasModifiedなど)があっても、強制的に破棄して閉じる
‘ 第1引数に False を指定するのがポイント!
targetDoc.Close Save:=False

Exit Sub

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

コードの解説

1. `ThisDrawing.Application.ActiveDocument`: 今まさに画面に映っている図面をオブジェクトとして取得しているよ。
2. `targetDoc.Close Save:=False`: ここが今回の核心! `Save:=False`(または単に `False`)と明示することで、AutoCADは「あ、保存しなくていいんだな」と理解し、あの鬱陶しい確認ダイアログを出さずにスッと図面を閉じてくれるんだ。

—

初学者が絶対にハマる「罠」と回避策

さて、このコードを書いて実際に動かしてみると、いくつかの「落とし穴」に気づくはず。プロの現場でよくある失敗を防ぐための知見をシェアしておくね。

罠1:最後の1枚の図面を閉じようとしてエラーになる

AutoCADは、ウィンドウ自体を閉じない限り、最低1枚は「無題の図面(Drawing1.dwgなど)」が開いている状態を維持しようとする仕様があるんだ。
もしAutoCADに残っている最後の1枚の図面に対して `Close Save:=False` を実行すると、図面の中身は消えるけれどドキュメントウィンドウの挙動でおかしなことになったり、予期せぬエラーを吐くことがある。

【対策】
複数図面をループ処理して閉じるようなプログラムを書くときは、「最後の1枚かどうか」を判定するか、アプリケーションごと終了させる設計にしよう。

罠2:図面を開いていないのにコードを実行した

先ほどのサンプルコードにも入れたけど、`Documents.Count = 0` のチェックをサボると、図面が1枚もない状態で `ActiveDocument` を触ろうとして 「実行時エラー ’91’: オブジェクト変数または With ブロック変数が見つかりません」 という、初学者が泣きを見るエラーが発生する。
VBAを書くときは、「対象が存在するかどうか」を事前に疑うクセをつけるのが、一流のエンジニアへの第一歩だよ。

—

まとめ:自動化の第一歩を踏み出そう!

今回は、図面を閉じる際の確認ダイアログを制御し、保存せずに閉じる方法を解説したよ。

  • 図面を閉じるときは `Close` メソッドを使う。
  • ダイアログを出さずに破棄するには `Close False`(または `Close Save:=False`)を指定する。
  • 実行前の「図面の存在チェック」を忘れない。

このテクニックを応用すれば、例えば「指定したフォルダの中にある図面を片っ端から開き、特定のレイヤチェックだけして、変更を加えることなく次々と閉じていく(確認ダイアログで止まらない!)」といった、強力なバッチ処理ツールが作れるようになるんだ。

ここをクリアできれば、もうあなたは「マクロの記録」の卒業生。自分の頭でAutoCADを意のままに操るVBAエンジニアの仲間入りだよ。
ぜひ、ご自身の環境で試してみてね!

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