【入門編】【初心者向け】図面が変更されたか?AcadDocument.Savedプロパティで無駄な保存ダイアログを抑制 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは。CAD自動化の世界へようこそ。
マクロの記録から一歩踏み出し、自らの手でAutoCADを操ろうとするあなたの挑戦を、私は心から歓迎します。

さて、今日扱うテーマは「プログラムで図面を開いたのに、閉じるたびに『保存しますか?』と聞かれてイライラする」という、誰もが一度は通る道です。

実務において、図面を「見るだけ」「情報を抽出するだけ」の処理で保存ダイアログが出るのは、自動化の価値を半減させるノイズでしかありません。これをスマートに制御する術を、エンジニアの視点から伝授しましょう。

1. なぜ「保存しますか?」と聞かれるのか?

AutoCADの内部では、図面を開いた瞬間に、たとえ何も描画していなくても「表示状態の更新」などで内部フラグが変化することがあります。

`AcadDocument` オブジェクトには、その図面が最後に保存されてから変更があったかどうかを判定する `Saved` プロパティ という門番がいます。

  • `Saved = True` :変更なし(保存不要)
  • `Saved = False` :変更あり(保存が必要)

プログラムで図面を操作した際、AutoCADはこの門番を自動的に「False」にします。だからこそ、閉じるときに「本当に保存しなくていいの?」と律儀に確認してくるのです。

2. 魔法のコード:Savedプロパティを「強制書き換え」する

解決策は非常にシンプルです。「私は何も変更していない」と、プログラム側からAutoCADに宣言してやればいいのです。

以下のコードを見てください。

Sub CloseDrawingWithoutSave()
‘ 現在のアクティブなドキュメントを取得
Dim doc As AcadDocument
Set doc = ThisDrawing

‘ — ここで何か図面を参照・抽出する処理を行う —
‘ (例:図面名を取得したり、特定のレイヤーを確認したり)
Debug.Print “処理対象図面: ” & doc.Name

‘ 【重要】「変更済み」というフラグを無理やり「変更なし」に書き換える
‘ これにより、AutoCADは「この図面は変更されていない」と認識し、
‘ Close時にダイアログを出さなくなります。
doc.Saved = True

‘ 図面を閉じる(保存確認ダイアログは出ない)
doc.Close False
End Sub

コードの解説

  • `doc.Saved = True`: これが今回の魔法です。本来はシステムが管理する値を、こちらから「保存済みである」という状態に書き換えています。
  • `doc.Close False`: `Close`メソッドの引数に `False` を指定することで、「保存せずに閉じる」という命令を確実に実行させます。

3. 陥りやすい罠:エラーを恐れるな

初学者がよくやる失敗として、「処理中にエラーが発生して、`Saved = True` が実行されないまま終了する」ケースがあります。これでは結局ダイアログが出てしまいます。

現場で使える「堅牢なコード」にするためには、エラーハンドリング(例外処理)を組み合わせるのが鉄則です。

Sub RobustClose()
On Error GoTo ErrorHandler

Dim doc As AcadDocument
Set doc = ThisDrawing

‘ — 複雑な処理 —

doc.Saved = True
doc.Close False
Exit Sub

ErrorHandler:
‘ 万が一エラーが出ても、最低限フラグを立てて閉じる選択肢を持つ
MsgBox “エラー発生。手動で確認してください。”
doc.Saved = True
End Sub

4. チーフアーキテクトからの助言

`Saved = True` を使う際、一つだけ注意点があります。
それは「本当に何も変更していないか」を自問自答することです。

もしプログラム中で `Circle` を描いたり `Layer` を変えたりしているのに、このコードで無理やり `True` にしてしまうと、せっかくの変更が「保存されずに破棄」されます。

  • 参照系(情報の抽出・確認のみ): このテクニックは最強です。
  • 編集系(図面を書き換える): 保存したい場合は `doc.Save` を呼ぶべきです。

「プログラムで何をしたのか」を常に意識する。これこそが、マクロの記録を超えたエンジニアへの第一歩です。

本日のまとめ

1. `AcadDocument.Saved` は図面の「変更フラグ」。
2. 「見るだけ」のときは `Saved = True` で強制的に保存不要状態にする。
3. `Close False` とセットで使うことで、自動化のストレスを排除できる。

この技術をマスターすれば、何百枚もの図面を連続で開き、情報を集計して閉じる……といった高度なタスクも、ダイアログに邪魔されることなく一瞬で完遂できるようになります。

さあ、次はどのオブジェクトを攻略しましょうか?あなたの挑戦を応援しています。

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