AutoCAD VBAの極意:ユーザー入力を自在に操る「Utilityオブジェクト」の深淵
こんにちは。AutoCADの自動化という荒野を切り拓く、一人のエンジニアとしてお話しします。
マクロの記録ボタンを押して生成された、冗長で非効率なコードをただ眺める日々はもう終わりにしましょう。AutoCAD VBAの本質は、「いかにユーザーと対話し、いかに効率よく情報を引き出すか」にあります。
今回は、AutoCAD開発における「登竜門」であり、かつ「極意」でもある`Utility.InitializeUserInput`と`GetKeyword`、そして`GetReal`(数値入力)を組み合わせた、プロフェッショナルな入力インターフェース構築術を伝授します。
—
なぜ「Utility」を使うのか?
初心者の方は、フォーム(UserForm)を作って入力を受け取ろうとしがちです。しかし、実務の現場では「コマンドラインから目を離さない」ことが爆速操作の鍵です。
AutoCADネイティブのコマンドと同じように、数値を受け取りつつ、キーワード([Yes/No/Settings])を待ち受ける。この「プロの挙動」を実現するのが`AcadUtility`オブジェクトです。
—
実践:条件分岐付きユーザー入力フォームの構築
以下のコードは、ユーザーから数値を入力してもらいつつ、キーワードとして「設定(S)」を選択できるようにしたものです。
Public Sub SmartInputSample()
Dim acadUtil As AcadUtility
Set acadUtil = ThisDrawing.Utility
Dim inputVal As Double
Dim keyword As String
‘ 1. キーワードの登録と初期化
‘ 第1引数: 1=ゼロ禁止, 2=負の値禁止などのビットマスク。ここでは0(制限なし)
‘ 第2引数: キーワードのリストをスペース区切りで指定
acadUtil.InitializeUserInput 0, “Settings”
‘ 2. 入力を試みる
On Error Resume Next ‘ キーワード入力時のエラーを回避
inputVal = acadUtil.GetReal(vbCrLf & “数値を入力、または [Settings] を選択: “)
‘ 3. キーワードが選ばれたか判定
If Err.Number <> 0 Then
‘ GetRealが失敗した場合、入力内容がキーワードであるか確認
keyword = acadUtil.GetInput
If keyword = “Settings” Then
MsgBox “設定画面を呼び出します(ここに処理を記述)”, vbInformation
Else
MsgBox “キャンセルされました。”, vbCritical
End If
Err.Clear
Else
‘ 通常の数値入力時
MsgBox “入力された数値は ” & inputVal & ” です。”, vbInformation
End If
On Error GoTo 0
End Sub
—
現場で必ずハマる「3つの落とし穴」
このコードを書いていく中で、多くの人が以下のポイントで挫折します。ここをクリアすれば、あなたはもう中級者の仲間入りです。
1. `On Error Resume Next` の扱い
`GetReal`は、数値以外の入力を受け取ると「エラー」を吐き出します。これは仕様です。このエラーを「異常終了」と捉えるのではなく、「キーワードが入力されたサイン」として扱うのが、賢いエンジニアの定石です。必ず`Err.Clear`で後始末を忘れずに。
2. キーワードの省略形
`InitializeUserInput`の引数で `”Settings”` と指定しましたが、実際には `”Settings”` の最初の文字である `S` を入力するだけで認識されます。もし `S` 以外も受け付けたい場合は `”Settings/Option”` のように `/` で区切ってください。
3. オブジェクトモデルのライフサイクル
`ThisDrawing.Utility` を呼び出す際、`Dim` で変数を確保し `Set` を行う癖をつけてください。オブジェクトを直接何度も参照すると、AutoCADのメモリ管理に無駄な負荷をかけ、大規模な開発時に不安定になる原因となります。
—
さらなる高みへ:エンジニアからのアドバイス
今回学んだ`GetInput`と`GetReal`の組み合わせは、まさにAutoCADのコマンドラインそのものです。この仕組みをマスターすれば、以下のような応用が可能です。
- 入力の自動補完: ユーザーが過去に入力した値をデフォルト値として表示する。
- 動的なプロンプト表示: ユーザーの入力内容に応じて、次のプロンプトの文字色や内容を変える(高度なAPI制御)。
「コードを動かす」段階から、「ユーザーの操作性を設計する」段階へ。
AutoCAD VBAは、単なるスクリプト言語ではありません。あなたのCAD操作を拡張する、最強のインターフェースです。
このコードをあなたのツールに組み込んで、ぜひ「プロの挙動」を体感してみてください。不明点があれば、いつでもコマンドラインを見つめるエンジニアの視点で相談に乗りますよ。
それでは、良い開発ライフを!
