【上級】AcadApplicationのPreferencesオブジェクト攻略:AutoCADのオプション設定を社内標準に強制統一
設計グループのリーダーであるあなたなら、こんな悪夢に直面したことが一度はあるはずだ。
「新人エンジニアが図面を持ち込んできたが、背景色がデフォルトのままで眩しい」
「サポートファイルの検索パスが通っていなくて、社内共通のブロックや文字スタイルが盛大にリンク切れを起こしている」
「自動保存が無効になっており、PCクラッシュ時に半日分のデータが吹き飛んだ」
個人の趣味嗜好に委ねられたAutoCADの環境設定は、チーム開発において百害あって一利なしだ。設計品質の担保とトラブルシューティングコストの削減において、「環境の強制統一」はインフラ整備と同等の必須要件である。
今回は、AutoCAD VBAの頂点に君臨する `AcadApplication.Preferences` オブジェクトを完全攻略し、社内標準の環境を一撃で構築・強制適用するプロダクションコードを伝授する。
—
1. なぜ手動設定や場当たり的なマクロでは失敗するのか?
多くの初学者が陥る罠が、`SendCommand` を使って `OPTIONS` コマンドを文字列で無理やり叩くアプローチだ。
‘ 【アンチパターン】絶対にやってはいけないコード
ThisDrawing.SendCommand “OPTIONS ”
これではダイアログが立ち上がって処理が止まるし、AutoCADの言語バージョン(日本語版・英語版)やUIの変更によってコマンドラインの挙動が変わり、マクロが盛大に暴発する。
我々が目指すべきは、UIを介さず、メモリ上で安全かつアトミックにレジストリや設定ファイルを書き換える「APIレベルの直接制御」である。これを実現するのが `Preferences` オブジェクトだ。
—
2. Preferencesオブジェクトの階層構造を把握する
`AcadPreferences` は、単一のプロパティの集まりではない。機能ごとのサブオブジェクト(コレクション)に綺麗にカプセル化されている。
- `Preferences.Files` : サポートファイルパス、テンプレート、印刷設定など
- `Preferences.Display` : 背景色、クロスヘアサイズ、カーソルバッジなど
- `Preferences.OpenSave` : 自動保存、保存形式(DWGのバージョン)など
- `Preferences.Selection` : 選択プレビュー、ピックボックスサイズなど
- `Preferences.Drafting` : スナップマーカー、Oスナップ設定など
これらをVBAからスマートに叩くことで、AutoCADのあらゆる挙動をコードの支配下に置くことができる。
—
3. 【実践】社内標準を強制適用する堅牢なVBAコード
以下のコードは、実際の現場でそのまま使えるプロダクション品質のモジュールだ。エラーハンドリングを網羅し、存在しないパスを指定された場合の例外処理や、書き込み権限のチェックまで考慮している。
Option Explicit
”=============================================================================
” モジュール名: modEnvironmentStandardizer
” 概要: AutoCADの環境設定(Preferences)を社内標準に強制統一する
”=============================================================================
Public Sub ApplyCompanyStandardPreferences()
Dim oAppPrefs As AcadPreferences
Set oAppPrefs = ThisDrawing.Application.Preferences
On Error GoTo ErrorHandler
‘ トランザクション的な処理の開始を明示
MsgBox “社内標準環境の適用を開始します。”, vbInformation, “環境統一ツール”
‘ —————————————————————–
‘ 1. [Files] ファイル関連の設定(パス、自動保存場所など)
‘ —————————————————————–
With oAppPrefs.Files
‘ 社内共通サポートパスの強制追加(既存パスの末尾に追加、または上書き)
Dim companySupportPath As String
companySupportPath = “C:\CAD_Standard\Support;C:\CAD_Standard\Blocks”
‘ 既存のパスに社内パスが含まれていない場合のみ追加(重複防止)
If InStr(1, .SupportPath, “C:\CAD_Standard”, vbTextCompare) = 0 Then
.SupportPath = .SupportPath & “;” & companySupportPath
End If
‘ 自動保存先の強制指定(ローカルの確実なディレクトリへ)
Dim autoSaveDir As String
autoSaveDir = “C:\AutoCAD_AutoSave\”
Call EnsureDirectoryExists(autoSaveDir)
.AutoSavePath = autoSaveDir
End With
‘ —————————————————————–
‘ 2. [OpenSave] オープン・セーブ関連の設定(自動保存間隔、保存形式)
‘ —————————————————————–
With oAppPrefs.OpenSave
.AutoSaveInterval = 10 ‘ 自動保存の間隔(分): 10分に強制
.SaveAsType = ac2018_DWG ‘ 保存形式をACAD 2018 DWGに統一
.CreateBackup = True ‘ バックアップファイル(.bak)を作成する
End With
‘ —————————————————————–
‘ 3. [Display] 表示関連の設定(クロスヘア、背景色)
‘ —————————————————————–
With oAppPrefs.Display
.CursorSize = 100 ‘ クロスヘアカーソルサイズを全画面(100%)に
.TextFrameDisplay = False ‘ 属性テキストの枠を表示しない
‘ レイアウトおよびモデル空間の背景色を「黒(0)」または「白(16777215)」に強制
‘ ※社内標準が黒背景の場合は 0、白背景の場合は 16777215 を指定
.GraphicsWindowModelBackground = RGB(20, 20, 20) ‘ 目の疲れにくいダークグレー
End With
‘ —————————————————————–
‘ 4. [Selection] 選択関連の設定(プレビュー、ピックボックス)
‘ —————————————————————–
With oAppPrefs.Selection
.PickBoxSize = 5 ‘ ピックボックスのサイズ
.DisplaySelectionPreview = True ‘ 選択プレビューを有効化(効率化のため)
.DisplayVisualCues = True
End With
MsgBox “社内標準環境の適用が完了しました。AutoCADが最適化されました。”, vbInformation, “完了”
Exit Sub
ErrorHandler:
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“詳細: ” & Err.Description, vbCritical, “致命的なエラー”
End Sub
”—————————————————————————–
” 補助関数: 指定したディレクトリが存在しない場合に自動生成する
”—————————————————————————–
Private Sub EnsureDirectoryExists(ByVal folderPath As String)
If Len(Dir(folderPath, vbDirectory)) = 0 Then
MkDir folderPath
End If
End Sub
—
4. プロフェッショナルとしての実装上の注意点
このスクリプトを組織に展開する際、以下のアーキテクチャ上のポイントを押さえておかないと、思わぬ現場の反発やバグを生む。
① 読み取り専用プロパティと書き込み不可のレジストリ
すべてのプロパティがVBAから変更できるわけではない。例えば、ハードウェアアクセラレーションや一部のネットワークライセンス関連のパスは、セキュリティやOSの権限(UAC)によりエラーを返すか、無視されることがある。必ず `On Error GoTo` でガードすること。
② プロファイル(AcadProfiles)との併用
もし「普段は個人の設定で作業させたいが、特定業務の図面を描くときだけ社内標準にしたい」という場合は、`Preferences.Profiles` を用いてカスタムプロファイル(例: `CompanyStandard`)をプログラム側で動的にロード・作成するアプローチが最もエレガントである。
‘ プロファイル切り替えの概念コード
Dim profilesObj As AcadPreferencesProfiles
Set profilesObj = ThisDrawing.Application.Preferences.Profiles
‘ 既存プロファイルに切り替え
profilesObj.ActiveProfile = “CompanyStandard”
③ ネットワークドライブのパス指定における罠
`Files.SupportPath` や各種パスにUNCパス(`\\server\share\…`)を指定する場合、社内LANに接続していないオフライン環境(出張中のノートPCなど)でAutoCADを起動すると、パスの解決に時間がかかり、起動時にフリーズしたような挙動を示す。
社内標準パスを設定するロジックには、必ず `Dir` 関数などでネットワーク上のパスが疎通可能かチェックするフォールバック処理を入れるのが、シニアエンジニアの優しさであり、堅牢性だ。
—
5. 組織への展開戦略:自動化のラストピース
このVBAマクロを単にメールで配るだけでは、誰も実行しないか、勝手に改変されて終わる。
真に自動化を成功させたいなら、社内共通の「スタートアップ用ドキュメント(acaddoc.lsp)」または、社内サーバーに配置したマスタテンプレート(.dwt)を開いた瞬間にこのVBA(あるいはVB.NETアドイン)がサイレントで走る仕組みを構築することだ。
設計者の意識に頼るな。「仕組みで強制せよ」。
この `Preferences` 制御スクリプトをあなたの組織のファーストステップとして組み込み、CAD管理コストをゼロへと近づけてほしい。
