【実務・中級編】【実務中級】AcadDocument.Utility.GetKwordによるユーザー入力制限:誤入力を防ぐ対話型スクリプト – AutoCAD VBA解析バイブル

スポンサーリンク

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` による入力制限は、そのための最も基本的かつ強力な武器だ。エラーの発生源となる「ユーザーの入力」を、プログラムが開始される前に遮断せよ。それが、システムをクラッシュから守り、保守コストを劇的に下げるための唯一の道である。

次は、この入力制御をデータベース連携へ繋げるステップについて論じよう。準備はいいか?

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