AutoCAD VBAを掌握する:`GetKword`による「鉄壁のユーザー入力制御」を実装せよ
AutoCADの自動化において、最もコストがかかるのは「予期せぬ入力への対処」である。
多くの駆け出しエンジニアは、`InputBox`で値を文字列として受け取り、`If`文で必死にバリデーション(妥当性検証)を書く。しかし、それはプロの仕事ではない。AutoCADには、コマンドラインの挙動を直接制御し、ユーザーの誤入力を物理的にシャットアウトする「対話型UI」の作法が存在する。
今回は、`InitializeUserInput`と`GetKword`を駆使し、コマンドラインで「選ばれた選択肢しか受け付けない」堅牢なUIを構築する設計論を伝授する。
—
なぜ `InputBox` を捨て、`GetKword` を使うべきなのか
`InputBox` はWindowsの汎用ダイアログであり、AutoCADのコンテキスト(図面上の状態やスナップ機能など)から完全に切り離されている。一方、`GetKword` はAutoCADのコマンドエンジンの一部として動作する。
このアプローチの最大の利点は以下の3点だ。
1. 入力の事前拘束: ユーザーが定義外の文字列を入力した時点で、AutoCADが自動的に警告を出し、再入力を促す。開発者がエラー処理を書く必要がない。
2. OS依存からの脱却: ダイアログが図面の上に被さり、作業の邪魔をすることがない。
3. UIの標準化: AutoCADネイティブコマンドと同様の操作感を提供できるため、エンドユーザーの学習コストを最小化できる。
—
鉄壁のUIを構築する:プロダクションコード
以下は、実務でそのまま使える、堅牢なテンプレートだ。このパターンを一つ覚えておくだけで、ツール全体の品質が一段階上がる。
Option Explicit
‘ ———————————————————
‘ ユーザー選択を制御し、安全に処理を実行するサンプル
‘ ———————————————————
Public Sub ExecuteOperationWithKword()
Dim util As AcadUtility
Set util = ThisDrawing.Utility
Dim keywordList As String
Dim userChoice As String
‘ 1. キーワードリストの定義
‘ 大文字の部分がショートカットキーとして認識される
keywordList = “Yes No Cancel”
‘ 2. 入力制限の初期化
‘ 1: 空入力(Enter)を禁止する
‘ 128: キーワード入力のみを許可する
util.InitializeUserInput 1 + 128, keywordList
‘ 3. エラーハンドリングを組み込んだ入力取得
On Error Resume Next
userChoice = util.GetKword(vbCrLf & “処理を実行しますか? [Yes/No/Cancel]
‘ ユーザーがESCを押した場合の処理
If Err.Number <> 0 Then
MsgBox “操作がキャンセルされました。”, vbInformation
Err.Clear
Exit Sub
End If
On Error GoTo 0
‘ デフォルト値の処理(Enterが押された場合は空文字が返るため補完)
If userChoice = “” Then userChoice = “Yes”
‘ 4. 分岐処理
Select Case userChoice
Case “Yes”
MsgBox “処理を開始します…”, vbOKOnly
‘ ここに実際の業務ロジックを記述
Case “No”
MsgBox “処理を中断しました。”, vbExclamation
Case “Cancel”
‘ 何もしない
End Select
End Sub
—
実務で意識すべき「アーキテクトの視点」
コードを動かすことだけがゴールではない。保守性を高めるために、以下の3点を意識せよ。
1. `InitializeUserInput` のビットマスクを使いこなす
`InitializeUserInput` は、ビット値の合計で挙動を制御する。
- 1: 空入力禁止
- 2: 負の値を禁止
- 4: ゼロ入力を禁止
- 128: キーワードのみ許可(これを使わないと、ユーザーが勝手な文字を入力できてしまう)
これらの定数を理解し、状況に応じて組み合わせるのがプロの設計だ。
2. エラー処理(On Error)の強制
`GetKword` は、ユーザーが `Esc` キーを押すと実行時エラー(番号:-2145320928)を吐く。これを放置するとツールが唐突に終了する。必ず `On Error Resume Next` で捕捉し、明示的に終了させること。これを怠るツールは「未完成品」とみなされる。
3. 日本語環境への配慮
AutoCADのキーワードリストは、スペース区切りで指定する。また、キーワードには「大文字」を含めることで、ユーザーが入力する際のショートカット(例: `Y` と打てば `Yes` と判定される)を自動的に設定できる。このUXの細部が、ユーザーからの信頼を勝ち取る。
—
結論:自動化は「ユーザーの自由」を奪うことから始まる
優れた自動化ツールとは、ユーザーに「何でもできる自由」を与えるのではなく、「正しい操作しかできない安心感」を与えるものである。
`GetKword` による入力制限は、そのための最も基本的かつ強力な武器だ。エラーの発生源となる「ユーザーの入力」を、プログラムが開始される前に遮断せよ。それが、システムをクラッシュから守り、保守コストを劇的に下げるための唯一の道である。
次は、この入力制御をデータベース連携へ繋げるステップについて論じよう。準備はいいか?
