【入門編】【実務中級者向け】保存時の「INCREMENTALSAVEPERCENT」最適化:フルセーブを強制してファイル破損リスクを低減する – AutoCAD VBA解析バイブル

スポンサーリンク
スポンサーリンク

「マクロの記録」を卒業するあなたへ。AutoCAD VBAで図面の「寿命」をコントロールする極意

こんにちは。現場のエンジニアリングを支える技術の世界へようこそ。
「マクロの記録」機能を使って、なんとか業務を自動化できた。そんな成功体験を掴んだあなたは、今、素晴らしい一歩を踏み出したところです。

しかし、ここからが本当の「エンジニア」としての旅の始まりです。

これまでは「どうすれば操作を自動化できるか」を考えてきたでしょう。これからは、「どうすれば、より堅牢で、ミスが起きにくく、プロフェッショナルなツールを作れるか」を考えるフェーズに入ります。

今日は、その第一歩として、多くのユーザーが見落としがちな「図面の保存(Save)」に潜む罠と、それをVBAでスマートに制御する方法についてお話ししましょう。

1. 忍び寄る「増分保存」の罠

AutoCADには、保存を高速化するための仕組みがあります。それが「増分保存(Incremental Save)」です。

図面を保存する際、毎回ファイル全体を書き直すのではなく、「変更された部分だけ」をファイルの後ろに付け足していく方式です。これによって、巨大な図面でも一瞬で保存が終わります。

一見、素晴らしい機能に見えますよね? しかし、ここには「データの断片化」という副作用があります。

なぜ「増分保存」がリスクなのか?

例えるなら、ノートに書き込みをする場面を想像してください。

  • フルセーブ: 毎回、新しい真っ白なページに、これまでの内容をすべて書き直す。
  • 増分保存: 古いページの余白に、修正した内容を「付箋」のようにペタペタ貼り付けていく。

付箋が増えすぎるとどうなるでしょうか? ページはどんどん分厚くなり、どこに何が書いてあるか管理が難しくなります。そして、ある時、その付箋が剥がれたり、重なり合ったりした瞬間に、「ファイルが壊れる(破損する)」のです。

長期間、同じファイルを増分保存だけで使い続けている図面は、内部構造が複雑化し、動作が重くなったり、最悪の場合開けなくなったりすることがあります。

2. 解決策:`INCREMENTALSAVEPERCENT` を支配する

ここで登場するのが、AutoCADのシステム変数 `INCREMENTALSAVEPERCENT` です。

この変数は、「どれくらいの変更があったら、フルセーブ(書き直し)に切り替えるか」を決める数値です。デフォルトでは何らかの数値が入っていますが、これを「0」に設定することで、常に「フルセーブ」を強制することができます。

「毎回フルセーブなんて時間がかかるじゃないか!」と思うかもしれません。しかし、現代のハードウェア性能において、数秒の差と「ファイル破損のリスク」を天秤にかけたとき、エンジニアが選ぶべきは間違いなく後者です。

3. 実践:クリーンセーブを実現するVBAコード

それでは、実際にVBAを使って、このシステム変数を制御するコードを書いてみましょう。
単に値を書き換えるだけではありません。「元の設定を壊さず、作業が終わったら元に戻す」。これがプロの作法です。

'==============================================================================
' Module: Module1
' Description: 図面の破損リスクを低減するため、フルセーブを強制して保存する
' Author: Senior Architect
'==============================================================================

Option Explicit

''' <summary>
''' 図面をフルセーブ(増分保存を無効化)して保存するプロシージャ
''' </summary>
Public Sub SafeFullSave()
    Dim currentIncrementalValue As Double
    Dim acadDoc As AcadDocument
    
    ' 現在の図面オブジェクトを取得
    Set acadDoc = ThisDrawing
    
    On Error GoTo ErrorHandler

    ' --- STEP 1: 現在の設定をバックアップ ---
    ' プログラムが勝手に設定を変えっぱなしにするのは、マナー違反です。
    ' ユーザーが元々使っていた設定を覚えておきましょう。
    currentIncrementalValue = acadDoc.GetVariable("INCREMENTALSAVEPERCENT")
    
    Debug.Print "現在のINCREMENTALSAVEPERCENT: " & currentIncrementalValue

    ' --- STEP 2: フルセーブモードへの切り替え ---
    ' 0を設定することで、増分保存を無効化し、常にクリーンな状態で書き込みます。
    acadDoc.SetVariable "INCREMENTALSAVEPERCENT", 0
    
    ' --- STEP 3: 保存の実行 ---
    ' ここで実際にファイルへの書き込みが行われます。
    Debug.Print "フルセーブを実行中..."
    acadDoc.Save
    
    ' --- STEP 4: 設定を元の状態に戻す ---
    ' 作業が終わったら、ユーザーの環境を元に戻してあげましょう。
    acadDoc.SetVariable "INCREMENTALSAVEPERCENT", currentIncrementalValue
    
    MsgBox "クリーンな状態で保存が完了しました。", vbInformation, "Success"

ExitSub:
    Exit Sub

ErrorHandler:
    ' エラーが発生した場合でも、設定を元に戻す努力を怠らないこと
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "Error"
    If Not acadDoc Is Nothing Then
        acadDoc.SetVariable "INCREMENTALSAVEPERCENT", currentIncrementalValue
    End If
    Resume ExitSub
End Sub

4. コードの深掘り:なぜこの書き方をするのか?

このコードには、初級者と中級者を分ける「3つの鉄則」が組み込まれています。

① ライフサイクル管理(バックアップと復元)

`currentIncrementalValue = acadDoc.GetVariable(…)`
プロフェッショナルなコードは、「環境を汚さない」ことを極めて重視します。システム変数を書き換える際は、必ず「変更前の値」をメモリに保持し、処理が終わったら(あるいはエラーが起きても)必ず「元の値」に戻します。これを怠ると、ユーザーから「マクロを使った後にAutoCADの挙動がおかしくなった」というクレームを受けることになります。

② エラーハンドリングの重要性

`On Error GoTo ErrorHandler`
VBAにおいて、エラー処理は「おまけ」ではありません。「必須」です。
もし保存中にディスク容量不足などでエラーが起きた場合、エラーハンドラがなければ、`INCREMENTALSAVEPERCENT` は `0` のまま放置されてしまいます。エラーが起きても、「設定を元に戻して、安全に終了する」。これが、システムを安定させる鍵です。

③ デバッグ意識

`Debug.Print`
コードの中に、実行状況をログとして出力する記述を忍ばせています。これは、万が一動作が怪しい時に、イミディエイトウィンドウを見て「今、どのステップにいるのか」を確認するためです。

5. まとめ:エンジニアとしての視点

「マクロの記録」は、あなたの「手」を動かすための道具です。
しかし、今回学んだようなVBAの制御は、あなたの「思考」を設計に組み込むための道具です。

  • 増分保存は速いが、図面の健康(整合性)にはリスクがある。
  • `INCREMENTALSAVEPERCENT` を `0` に制御することで、クリーンな図面を維持できる。
  • 設定を変更する際は、必ず「元に戻す」という責任を持つ。

この視点を持つだけで、あなたが作るツールは「ただ動くもの」から「信頼されるシステム」へと進化します。

ここをクリアすれば、AutoCAD VBAの基本はバッチリですよ。
さあ、次はどんな自動化に挑戦しますか? 応援しています!

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