【実務・中級編】【実務中級】AcadDocument.Utility.InitializeUserInputによる入力制限:キーワードと数値入力をスマートに制御する – AutoCAD VBA解析バイブル

スポンサーリンク

現場の「入力ストレス」を排除せよ:`InitializeUserInput`による入力制御の極意

AutoCADの自動化ツールを開発していて、ユーザーの「予期せぬ入力」に頭を抱えたことはないだろうか?
「負の数値を入れられた」「想定外の文字を入力されてエラー落ちした」「毎回入力のたびにダイアログを出すのは面倒だ」――。

こうした現場の悩みに対する唯一の解こそが、`AcadDocument.Utility.InitializeUserInput`だ。これは単なる入力制限メソッドではない。CADエンジンの深層に介入し、ユーザー入力をコマンドラインレベルで制御する「守護神」である。

今回は、堅牢かつスマートなツールを構築するための、実戦的な実装パターンを伝授する。

1. なぜ`InitializeUserInput`が必要なのか?

多くの初心者は、入力を受け取った後に`If`文でエラーチェックを行う。しかし、これは「ゴミを拾ってから捨てる」ようなものだ。
`InitializeUserInput`を使えば、そもそもゴミが混入する余地を断つことができる。

ビットコードの真価

このメソッドの第一引数である「ビットコード」は、複数の制限を組み合わせて指定できる。

  • 1: ゼロ入力を禁止
  • 2: 負の値を禁止
  • 4: ゼロと負の値を禁止
  • 8: 図面範囲外の入力を禁止
  • 16: 指定したキーワードを強制する(これが本丸だ)

これらを組み合わせることで、ユーザーに「正しい入力を強いる」のではなく、「正しい入力しかできない環境」を提供できる。

2. 実践:キーワードと数値を両立させるプロダクションコード

単に数値を制限するだけでは面白くない。業務ツールでは、「数値」を入力させるだけでなく、特定のオプションを「キーワード(文字)」で選択させる必要がある。

以下のコードは、実務で頻出する「ユーザーに数値を入力させるが、特定の状況下では『自動』というキーワードを許可する」パターンだ。

‘ ———————————————————
‘ 堅牢な入力取得用関数: GetSmartValue
‘ @param PromptMessage 表示するプロンプト
‘ @return 取得した値(数値またはキーワード)
‘ ———————————————————
Public Function GetSmartValue(ByVal PromptMessage As String) As Variant
Dim util As AcadUtility
Set util = ThisDrawing.Utility

‘ 1. ビットコード設定
‘ 1(ゼロ禁止) + 2(負数禁止) + 16(キーワード許可) = 19
util.InitializeUserInput 19, “Auto Default”

On Error Resume Next ‘ キャンセルや不正入力をトラップ

Dim retVal As Variant
retVal = util.GetReal(vbCrLf & PromptMessage & ” [Auto/Default] : “)

‘ 2. エラー判定(ユーザーがキーワードを入力した場合、GetRealはエラーを返す)
If Err.Number <> 0 Then
‘ キーワード入力を取得し直す
Err.Clear
retVal = util.GetKeyword(vbCrLf & “キーワードが入力されました: “)
End If

On Error GoTo 0

‘ 3. 結果を返す(値、またはキーワード文字列)
GetSmartValue = retVal
End Function

3. 実務で「死なない」ための設計思想

① エラーハンドリングの境界線

`GetReal`や`GetKeyword`は、ユーザーが`Esc`キーを押した瞬間に実行時エラーを吐く。これを無視するとツールは即座にクラッシュする。必ず`On Error Resume Next`を使い、`Err.Number`を確認するガード節を設けること。これが「堅牢なツール」の最低条件だ。

② ファイル・データベース連携への配慮

もしこの入力を元に外部のDBやCSVを参照する場合、`InitializeUserInput`を通したあとの変数は、必ず型変換(`CDbl`など)を明示的に行うこと。`Variant`型のままDBに投げ込むのは、将来のバグを育てる行為である。

③ UXを意識したプロンプト

プロンプト内に `[Auto/Default]` と表示させるのは、AutoCADの標準コマンドの作法だ。これに倣うことで、エンドユーザーは「自分は今、どのモードで入力しているのか」を直感的に理解できる。技術的な正しさだけでなく、操作の心地よさを追求せよ。

結論:コードは「対話」である

`InitializeUserInput`を使いこなすことは、AutoCADという巨大なプラットフォームと「対話」することと同義だ。
ユーザーにエラーメッセージを突きつけて突き放すのではなく、コマンドラインという限られた空間の中で、どう振る舞えばツールが円滑に動くのかを優しくガイドする。

その姿勢こそが、単なる「コードを書く人」から「システムを設計するエンジニア」への分水嶺となる。

さあ、あなたの次のツールにこのロジックを実装し、現場のエンジニアたちを驚かせてやってほしい。それが、世界最高峰の自動化への第一歩だ。

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