【実務・中級編】【上級】AcadApplication.Preferences.Userの右クリックカスタマイズ設定をVBAで制御し、設計作業のストップウォッチ機能を実装する – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCADの「時間」を支配せよ:Preferences APIによる作図工程のボトルネック可視化術

AutoCADのオートメーションにおいて、多くのエンジニアは「図形を描くこと」に執着する。しかし、真の自動化アーキテクトは「プロセスそのもの」を計測し、制御する

今回は、AutoCADの隠れた設定をVBAで動的に操作し、設計作業のストップウォッチ(計測器)を実装する極限のテクニックを伝授する。なぜ、右クリックカスタマイズなのか。なぜ、これが実務のボトルネック解消に直結するのか。その深淵に迫る。

1. なぜ「右クリック設定」を制御するのか

AutoCADの操作感において、右クリックの挙動は「作図スピード」に直結する。

  • Enterとして使用する(高速化)
  • ショートカットメニューを表示する(直感的だがクリック数が増える)

この切り替えをVBAで動的に行うことは、単なる設定変更ではない。「特定のコマンド実行時にのみ右クリックをEnterに固定し、余計なメニューの呼び出しによるコンテキストスイッチを排除する」という、作業効率の強制的な最適化を意味する。

これとタイマーを組み合わせることで、「ユーザーがどのコマンドで時間を浪費しているか」という作図の真のボトルネックが数値として浮き彫りになる。

2. 堅牢な設計:Preferences APIの作法

AutoCADの`Preferences`オブジェクトを触る際、初心者が陥る最大の罠が「設定の戻し忘れ」だ。アプリケーションがクラッシュした際に設定が書き換わったままになるのは、プロフェッショナルの仕事ではない。

堅牢な設計の鉄則:
1. 状態のバックアップ(Snapshot)をとる:変更前の値を必ず変数に退避する。
2. Error Handlingの徹底:`On Error GoTo`を必ず配置し、例外発生時も設定を復元する(これを怠るとユーザーから「設定がおかしくなった」とクレームが来る)。
3. オブジェクトの参照管理:`ThisDrawing.Application.Preferences`へアクセスする際は、短命な参照を避け、メインのライフサイクルで管理する。

3. 実装:作図工程計測・最適化モジュール

以下のコードは、コマンド実行時間を計測し、CSVログへ出力するプロトタイプだ。実務のプロダクション環境でもそのまま使えるよう、冗長なエラーチェックを排除しつつ堅牢性を担保している。

‘ —————————————————————————
‘ AutoCAD 作図ボトルネック計測&環境最適化モジュール
‘ —————————————————————————
Option Explicit

Private m_OriginalRightClick As Boolean
Private m_StartTime As Double

‘ 計測開始:環境を強制的に最適化しタイマーをセット
Public Sub StartMeasurement()
On Error GoTo ErrorHandler

‘ 1. 設定のバックアップ
m_OriginalRightClick = ThisDrawing.Application.Preferences.User.ShortcutMenuDisplay

‘ 2. 右クリックを「Enter」に固定(ショートカットメニューを表示しない)
ThisDrawing.Application.Preferences.User.ShortcutMenuDisplay = False

‘ 3. 開始時刻記録
m_StartTime = Timer

MsgBox “計測開始:右クリックはEnterとして動作します。”, vbInformation
Exit Sub

ErrorHandler:
RestorePreferences
MsgBox “エラー発生:” & Err.Description
End Sub

‘ 計測終了:ログ出力と設定復元
Public Sub EndMeasurement(commandName As String)
Dim elapsed As Double
elapsed = Timer – m_StartTime

‘ CSVへの記録処理(ファイル入出力はFileSystemObjectを推奨)
WriteLogToFile commandName, elapsed

‘ 設定の復元
RestorePreferences

MsgBox “計測完了:” & commandName & ” は ” & Format(elapsed, “0.00”) & ” 秒でした。”
End Sub

Private Sub RestorePreferences()
‘ 確実に設定を戻す
ThisDrawing.Application.Preferences.User.ShortcutMenuDisplay = m_OriginalRightClick
End Sub

Private Sub WriteLogToFile(cmd As String, duration As Double)
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
Dim filePath As String
filePath = ThisDrawing.Path & “\PerformanceLog.csv”

Dim ts As Object
Set ts = fso.OpenTextFile(filePath, 8, True) ‘ 8 = ForAppending
ts.WriteLine Now & “,” & cmd & “,” & duration
ts.Close
End Sub

4. プロダクション環境への統合の注意点

このツールを現場に導入する際、以下のポイントを遵守すること。

  • データベース連携: `FileSystemObject`によるCSV書き出しはシンプルだが、複数人が同時に同じパスにログを吐く場合、ファイルロックの問題が発生する。本格的な運用では、SQLiteやSQL ServerへADO経由で接続するか、各ユーザー端末に一時ログを吐かせてから夜間に集計する「分散処理」を検討せよ。
  • パフォーマンスへの影響: VBA自体がAutoCADのメインスレッドをブロックする可能性がある。複雑な処理を行う場合は、計測ロジックをクラスモジュールとして切り出し、イベント駆動で動作するように設計すること。
  • 非侵入型計測の推奨: ユーザーの操作を阻害しないよう、`Document.SendCommand`や`SelectionSets`の監視など、バックグラウンドでのフックを組み合わせると、より透明性の高い計測が可能になる。

最後に

AutoCADのVBAは、単なる「作図代行ツール」ではない。CAD環境そのものをハックし、設計者のパフォーマンスを極限まで引き出すためのプラットフォームである。

今回紹介した設定変更と計測のロジックは、多くの現場で「なんとなく遅い」とされていた作業の正体を暴く武器になるはずだ。数値は嘘をつかない。あなたのコードで、設計現場のムダを削ぎ落としてほしい。

さらなる高みを目指すなら、次は`Class_Initialize`と`Class_Terminate`を活用した、より高度なオブジェクトライフサイクル管理を実装してみると良いだろう。現場からは以上だ。

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