【テクニカル・上級編】【上級】AcadApplication.Preferences.OpenSaveを操作し、自動保存の間隔やバックアップ作成の有無を組織全体で強制統一 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAの深淵:Preferencesオブジェクトによる「設定強制統一」の極意

設計現場において、個々のユーザーの「AutoCADの設定」がバラバラであることは、もはやリスク以外の何物でもない。バックアップファイルが生成されないままクラッシュすれば、数時間の作業が水泡に帰す。我々アーキテクトが担うべきは、属人性を排除し、システムの堅牢性を「環境設定のレベル」から担保することだ。

本稿では、`AcadApplication.Preferences.OpenSave`を軸に、AutoCADの設定をコードで制御し、組織全体で設計品質を均一化する手法を解説する。

1. オブジェクトモデルの罠:Preferencesの正体

AutoCADの`Preferences`オブジェクトは、単なるプロパティの集合体ではない。これはWindowsレジストリや`.arg`ファイルと同期する、極めて「重い」インターフェースだ。

安易にループ内でプロパティを参照・更新すると、COMのマーシャリング・オーバーヘッドにより動作が鈍化する。特に大規模図面を開いている最中にこれを叩くのは厳禁だ。

避けるべきアンチパターン

‘ 悪い例:ループ内で頻繁にアクセス
For i = 1 To 100
ThisDrawing.Application.Preferences.OpenSave.SaveInterval = 10
Next

これを行うと、その都度レジストリへの書き込みが発生し、パフォーマンスが著しく低下する。設定の適用は、初期化フェーズまたはイベントドリブンで「一度だけ」行うのが鉄則である。

2. 【実装コード】保存設定の強制統一

以下に、`OpenSave`設定を確実に上書きし、メモリリークを回避するための堅牢なコードを示す。

Option Explicit

‘ @brief 組織標準の保存設定を一括適用する
‘ @details バックアップ作成、自動保存時間、図面保存形式を強制的に定義する
Public Sub EnforceStandardSaveSettings()
Dim acadApp As AcadApplication
Dim prefs As AcadPreferences
Dim openSavePrefs As AcadPreferencesOpenSave

‘ オブジェクトの取得:エラーハンドリングを怠らないこと
On Error GoTo ErrorHandler
Set acadApp = Application
Set prefs = acadApp.Preferences
Set openSavePrefs = prefs.OpenSave

‘ 1. バックアップ作成を有効化 (ISAVEBAK相当)
If Not openSavePrefs.CreateBackup Then
openSavePrefs.CreateBackup = True
End If

‘ 2. 自動保存間隔を15分に統一 (SAVETIME相当)
If openSavePrefs.SaveInterval <> 15 Then
openSavePrefs.SaveInterval = 15
End If

‘ 3. 図面保存形式を2018形式(ACAD_2018_DWG)に固定
‘ 互換性問題を排除するため、組織でバージョンを統一する
openSavePrefs.SaveAsType = ac2018_dwg

MsgBox “標準設定の適用が完了しました。”, vbInformation

ExitPoint:
‘ 【重要】オブジェクトの明示的解放
‘ VBAのGCは信用するな。COM参照カウンタを確実にデクリメントする
Set openSavePrefs = Nothing
Set prefs = Nothing
Set acadApp = Nothing
Exit Sub

ErrorHandler:
MsgBox “設定適用中にエラーが発生しました: ” & Err.Description, vbCritical
Resume ExitPoint
End Sub

3. シニアエンジニアが押さえるべき「隠れた知見」

A. レジストリ直接書き込みの是非

`Preferences`オブジェクトで制御できない「深い設定」が存在する場合、`WScript.Shell`を用いたレジストリ操作に頼らざるを得ないこともある。しかし、これは「AutoCADの内部キャッシュと同期しない」リスクがある。設定を反映させるには、`Preferences.Save`メソッドを呼び出して設定を明示的に永続化させるべきだ。

B. 権限とポリシー

社内システム管理者がこのスクリプトを配布する場合、権限設定には注意が必要だ。`C:\Program Files\Autodesk\…` 配下の設定ファイルに書き込む際は、ユーザーがその場所への書き込み権限を持っているか、あるいは「ログインスクリプト」で実行させる等の権限昇格を考慮しなければならない。

C. パフォーマンスの極限:APIの活用

VBAの`Preferences`オブジェクトだけで解決しない場合、Windows APIの`SendMessage`を使用して、AutoCADの内部コマンド(`SAVETIME`など)を直接トリガーする手法も有効である。だが、これはコードの保守性を著しく下げるため、どうしてもという時の「最終手段」と心得よ。

結論:技術は「仕組み」に落とし込んでこそ価値がある

個々のユーザーに「設定を確認してください」と依頼するのは、マネジメントの敗北だ。システム側で強制的に書き換え、実行させる。これが、大規模開発・運用における唯一の正解である。

もし君がこのコードを組織に導入するなら、まず一人のマシンで検証し、次に小規模なグループで展開し、最後に全社へ配布せよ。VBAは古臭い言語と揶揄されることもあるが、AutoCADの心臓部にダイレクトに触れられる強力なツールだ。その力を正しく行使し、設計資産を守り抜くこと。それが、我々アーキテクトの矜持である。

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