【入門編】【実務中級】AcadDocument.Utility.GetKwordで「Yes/No/Cancel」以外の独自キーワード(例:Left/Right/Center)をコマンドラインで受け取る方法 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCADの自動化、日々の業務でお疲れ様です。
マクロの記録から一歩踏み出し、「自分でコードを書いて効率化したい!」という熱意、素晴らしいですね。

今回は、AutoCAD VBAの実務で間違いなく重宝する「コマンドラインからの高度なユーザー入力(キーワード選択)」をマスターしましょう。

「Yes/No」だけでなく、例えば「Left / Right / Center」といった独自の選択肢をサクッとコマンドラインに出して、ユーザーに選ばせる方法です。ここをクリアすれば、あなたの作るマクロは一気に「プロのツール」の領域へと進化します。

優しく、かつ本質的な部分までしっかりと解説していきますので、ぜひついてきてくださいね!

なぜ「GetKword」と「InitializeUserInput」なのか?

AutoCADで図面を描いているとき、文字の位置を揃えたり、オブジェクトを配置したりする場面を想像してください。
「左寄せにするのか、右寄せにするのか、それとも中央なのか」を、わざわざダイアログボックスを出してクリックさせるのは、プロの手数としては少し野暮ったいですよね。

AutoCADの真骨頂はコマンドラインオペレーションです。
ユーザーの手をマウスからキーボードへ移動させず、最小限のキーストロークで意図を伝える。これをVBAで実現するのが、`AcadDocument.Utility` オブジェクトが持つ `InitializeUserInput` メソッドと `GetKword` メソッドのコンビネーションです。

2つのメソッドの役割分担

  • `InitializeUserInput`(お膳立て):

「これからこういうキーワードを受け付けるよ」「数字以外の入力を禁止するよ」といったルールをAutoCADに事前にお触れする、いわばルールの設定(番人)です。

  • `GetKword`(受け取り):

実際にコマンドラインにプロンプト(メッセージ)を表示し、ユーザーが入力したキーワードを受け取る実務部隊です。

この2つは必ずセットで使います。片方だけでは動きません。

【実践】Left / Right / Center を選ばせるマクロ

百聞は一見に如かず。まずは実務でそのまま使えるサンプルコードを見てみましょう。
VBAエディタ(Alt + F11)を開き、標準モジュールに以下のコードを貼り付けてみてください。

Sub Sample_CustomKeyword()
Dim acadUtility As AcadUtility
Set acadUtility = ThisDrawing.Utility

On Error GoTo ErrorHandler ‘ エラー(ESC中断など)対策のお約束

‘ 1. 【お膳立て】キーワードの登録とルールの設定
‘ 第1引数: ビットフラグ(1 = 空白(Enterのみ)の入力を許可しない)
‘ 第2引数: 有効にするキーワードを半角スペース区切りで並べる
acadUtility.InitializeUserInput 1, “Left Right Center”

‘ 2. 【受け取り】コマンドラインへプロンプトを表示し、入力を待つ
Dim userChoice As String
userChoice = acadUtility.GetKword(vbCr & “配置を選んでください [Left/Right/Center]

: “)

‘ 3. 【分岐処理】選ばれたキーワードに応じた処理を実行
Select Case UCase(userChoice)
Case “LEFT”
MsgBox “「左 (Left)」が選択されました。”, vbInformation
‘ ここにLeft用の処理を書く

Case “RIGHT”
MsgBox “「右 (Right)」が選択されました。”, vbInformation
‘ ここにRight用の処理を書く

Case “CENTER”
MsgBox “「中央 (Center)」が選択されました。”, vbInformation
‘ ここにCenter用の処理を書く
End Select

Exit Sub

ErrorHandler:
‘ ユーザーがESCキーなどで中断した場合はエラー番号: Err.Number が発生する
If Err.Number = -2147352567 Then ‘ キャンセル時のエラー
MsgBox “操作がキャンセルされました。”, vbExclamation
Else
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End If
End Sub

コードの核心を深掘り解説!

ここからは、コードの重要なポイントをエンジニアの視点で分かりやすく紐解いていきます。

1. `InitializeUserInput` の第1引数(ビットフラグ)の秘密

ここが初学者が一番ハマりやすいポイントです。
`InitializeUserInput 1, “Left Right Center”` の最初の `1` は、「ユーザーが何も入力せずに単にEnterキーを押しただけの場合をどう扱うか」を決めるフラグ(ビットマスク)です。

  • `1` を指定した場合: 空白(Enterのみ)の入力を禁止します。「何かキーワードを選びなさい!」とAutoCADが再入力を促します。
  • `0` を指定した場合: 空白(Enterのみ)の入力を許可します。この場合、何も入力されずにEnterが押されると、`GetKword` は空文字(`””`)を返します。

実務では「絶対にどれかを選ばせたい」ケースがほとんどなので、基本的には `1` を指定しておくと堅牢なコードになります。

2. キーワードは大文字・小文字を意識するな

`InitializeUserInput` の第2引数で `”Left Right Center”` と定義していますが、ユーザーがコマンドラインに `left` と小文字で打ち込んでも、AutoCADは優秀なのでちゃんと `Left` として認識して返してくれます。

ただし、VBA側で判定する際は、念のため `UCase(userChoice)` を使ってすべて大文字に統一(正規化)してから `Select Case` で分岐させています。これで大文字・小文字の入力ゆれによるバグを完璧に防げます。

3. 鉄則:`On Error GoTo` は絶対にサボるな

`GetKword` などの対話型メソッドを使用中、ユーザーがキーボードの [ESC] キーを押して操作をキャンセルすることが必ずあります。
この時、VBA側でエラー処理(トラップ)をしていないと、容赦なく「実行時エラー ‘-2147352567’: メソッド ‘GetKword’ が失敗しました」という赤いダイアログが出てマクロが強制終了してしまいます。

実務で動かすツールにおいて、「ユーザーのESC中断でエラー落ちするコード」は絶対にNGです。必ず `On Error GoTo` を仕込み、優しく離脱できるように設計しましょう。

さらに実用性を高めるテクニック:頭文字(エイリアス)の活用

AutoCADの標準コマンド(LINEの「L」など)のように、「L」と打つだけで「Left」として認識させたい場合がありますよね。
実は、`InitializeUserInput` のキーワード設定では、大文字と小文字の組み合わせによってショートカット(エイリアス)を定義できます。

例えば、以下のように記述してみます。

acadUtility.InitializeUserInput 1, “LEfT RighT CEfTeR”

(※少し極端な例ですが)

AutoCADのキーワード指定では、大文字で書かれた部分がそのキーワードの「最短一致文字」になります。
実務でよく使われるスマートな書き方はこちらです:

acadUtility.InitializeUserInput 1, “Left Right Center”

実はこれだと「Left」とフルで打つ必要がありますが、次のように書くと…?

‘ ※AutoCADの標準的な仕様として、キーワードの頭文字を大文字にする等の工夫や、
‘ 複数の別名をスラッシュで区切る記法が使えます。
‘ 例: “L/Left R/Right C/Center” と設定することも可能です!

このようにスラッシュ(`/`)で区切って記述することで、「L」と打つだけで「Left」を選択させるといった、本家AutoCADのコマンドに負けない快適なUIを構築できます。

まとめ

今回は、`AcadDocument.Utility.GetKword` と `InitializeUserInput` を使って、独自のキーワード選択をコマンドラインに実装する方法を解説しました。

  • `InitializeUserInput` で入力ルールとお手本(キーワード)をセットする。
  • `GetKword` でコマンドラインからユーザーの選択を受け取る。
  • ESC中断(エラー)への対策を必ずセットで行う。

ここをクリアすれば、ダイアログボックスの裏に隠れない、軽快でプロフェッショナルなAutoCADアドイン・マクロが作れるようになります。

「ここをもっとこうしたい」「こんな図面処理を自動化したい」といった疑問があれば、いつでも先輩エンジニアに聞いてくださいね。あなたのAutoCADライフがより快適になるよう、これからも応援しています! バッチリ使いこなして周りを驚かせてやりましょう!

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