【入門編】【初心者向け】図面を閉じる前に「変更を破棄」を確実に実行:Savedプロパティの活用法 – AutoCAD VBA解析バイブル

スポンサーリンク

ようこそ、AutoCAD自動化の世界へ。
マクロの記録から一歩踏み出し、「自分の意図通りに図面を操る」という快感に目覚めたあなたへ、エンジニアの先輩として一つの重要な技術を伝授しましょう。

今回は、「変更を破棄して図面を閉じる」という、一見単純そうに見えて、実は奥が深いテーマを扱います。

—

なぜ「保存せずに閉じる」操作が重要なのか?

自動化処理を行っていると、「一時的に図面を開いて数値を読み取り、何も変更せずに閉じる」という作業が頻発します。この時、もし図面側に少しでも変更が加わっていると、AutoCADは律儀に「変更を保存しますか?」とダイアログを出してきます。

自動化において、このダイアログは「悪」です。 処理がそこで止まり、あなたのPCはユーザーの操作を待ち続けて永久に帰ってこないからです。

これをスマートに解決するのが、`Document`オブジェクトの `Saved` プロパティです。

—

Savedプロパティの正体:図面の「心」を知る

`Saved` プロパティは、Boolean型(True/False)の値を持ちます。

  • True: 図面は保存されている(変更なし)
  • False: 図面は変更されている(未保存の状態)

このプロパティを「書き換える」という裏技を使うことで、AutoCADを「この図面はもう保存済みだと認識している」という状態に騙すことができるのです。

実践:変更を破棄して閉じるコード

以下のコードをコピーして、標準モジュールに貼り付けてみてください。

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

‘ 【重要】SavedをTrueに強制設定する
‘ これにより、AutoCADは「保存すべき変更はない」と判断します
doc.Saved = True

‘ 図面を閉じる(Falseは「変更を保存するか?」という問いへの答えではなく、
‘ 単に「閉じる」という命令です。Saved=Trueのおかげで確認は出ません)
doc.Close False

MsgBox “図面を保存せずに閉じました。”
End Sub

—

初学者が陥りやすい「エラーの罠」

このコードを使う際、いくつか覚えておいてほしい「現場の鉄則」があります。

1. `ThisDrawing` を過信しない

`ThisDrawing` は現在作業中の図面を指しますが、もし複数の図面を開いている場合や、バックグラウンドで別の図面を開いて処理したい場合は、`Application.Documents` コレクションからターゲットを明確に指定する必要があります。

2. ループ処理での落とし穴

複数の図面を一括処理する際、`doc.Close` を実行した瞬間にその `doc` オブジェクトはメモリから破棄されます。ループの最後にこの処理を置かないと、存在しないオブジェクトを操作しようとして「実行時エラー」が発生します。

—

ワンランク上のエンジニアになるために

実務では、単に閉じるだけでなく「エラーが起きた時だけ破棄して閉じる」といったエラーハンドリングと組み合わせることが多いです。

Public Sub SafeCloseExample()
On Error GoTo ErrorHandler

‘ ここで何らかの図面操作を行う
‘ …

Exit Sub

ErrorHandler:
‘ 万が一エラーが起きたら、保存せずに閉じて図面をクリーンにする
ThisDrawing.Saved = True
ThisDrawing.Close False
End Sub

先輩からのアドバイス

`Saved = True` は、いわば「免罪符」です。これを使えば、どんなに図面を弄くり回しても、AutoCADを強制的に「お利口な状態」に戻して終了させることができます。

ただし、本当に大切な変更まで捨ててしまわないよう、ここぞという時にだけ使うようにしてくださいね。

—

まとめ:今日のポイント

  • `Saved = True`: AutoCADの「保存しますか?」という警告を回避する魔法。
  • 制御の主導権: ダイアログを出さないことが、自動化の安定性を生む。
  • 慎重な運用: 便利な機能ほど、使うタイミングをコードで明確に管理する。

ここをクリアすれば、あなたはもう「マクロを動かしている人」から「AutoCADを制御しているエンジニア」へと一歩進んだことになります。
さあ、このコードをあなたのツールボックスに加えて、さらに快適な自動化ライフを送りましょう!

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