AutoCAD VBAの「多機能化」戦略:GetKwordでツールボタンをスマートに整理する
こんにちは。AutoCADの自動化の海へようこそ。
現場でVBAを書いていると、つい「あれもこれも」と機能を追加したくなり、ツールバーがボタンだらけになってしまうことはありませんか?ボタンが増えればUIは散らかり、操作のたびにマウスを迷わせる。これでは本末転倒です。
今回は、「一つのボタンで、複数の機能を切り替える」ための実戦的なテクニックをお伝えします。AutoCADの`Utility.GetKword`メソッドを使いこなし、スマートで洗練されたツールを実現しましょう。
—
なぜ「GetKword」なのか?
AutoCADのコマンドラインに注目してください。例えば「線分(LINE)」コマンドを実行すると、括弧書きで「[元に戻す(U)]」といった選択肢が出ますよね。
`GetKword`は、まさにこれと同じ挙動をあなたのマクロに与えるメソッドです。
「作図モードにするか? それとも集計モードにするか?」をユーザーに問いかけ、その入力をトリガーに処理を分岐させる。この設計により、ツールバーを圧迫せず、直感的なインターフェースを構築できます。
—
実装の極意:キーワード入力の基本構造
まずは、コードを見てみましょう。このパターンをテンプレートとして覚えておけば、応用範囲は無限大です。
Sub SmartToolLauncher()
Dim util As AcadUtility
Set util = ThisDrawing.Utility
‘ 1. キーワードの設定(大文字がショートカットになります)
‘ ユーザーには「[作図(D)/集計(C)]」と表示されます
util.InitializeUserInput 1, “Draw Calc”
On Error Resume Next ‘ ユーザーがESCを押した際のクラッシュ回避
‘ 2. キーワードの取得
Dim selectedMode As String
selectedMode = util.GetKeyword(vbCrLf & “モードを選択 [作図(D)/集計(C)]: “)
‘ 3. エラーチェック(ESCキャンセル時など)
If Err.Number <> 0 Then
MsgBox “処理を中止しました。”
Exit Sub
End If
On Error GoTo 0
‘ 4. 分岐処理
Select Case selectedMode
Case “Draw”
Call RunDrawingMode ‘ 作図用サブプロシージャへ
Case “Calc”
Call RunCalculationMode ‘ 集計用サブプロシージャへ
End Select
End Sub
コードの重要ポイント解説
1. `InitializeUserInput`の役割:
第一引数の「1」は「空入力を禁止する(ユーザーが何も入力せずEnterを押しても次に進ませない)」という設定です。ここを適切に制御しないと、予期せぬバグの温床になります。
2. 大文字と小文字:
キーワードの文字列で「Draw」と指定し、Dだけ大文字にしています。これにより、ユーザーは「D」と打つだけで「Draw」を選択したとみなされます。この「ユーザーの手数を減らす」工夫こそが、プロのUI設計です。
3. `On Error Resume Next`の正しい使い方:
`GetKeyword`中にユーザーが`Esc`キーを押すと、AutoCADはエラーを発生させて強制終了しようとします。これを適切にキャッチして終了させることで、ツールとしての「安定感」が生まれます。
—
現場で陥りやすい「落とし穴」
初学者がよくやるミスは、「キーワードのスペルミス」と「大文字小文字の不一致」です。
- キーワードの不一致: `InitializeUserInput`で定義した文字列と、`Select Case`で判定している文字列が完全に一致しているか確認してください。
- 初期化忘れ: `InitializeUserInput`は、`GetKeyword`の直前に必ず記述してください。他の処理を挟むと、設定がリセットされたり、意図しない挙動になることがあります。
—
さあ、あなたのツールを「次世代」へ
この「モード切り替え」を導入するだけで、マクロの汎用性は劇的に向上します。
- 作図モード: 決まった画層や線種で図形を自動生成する。
- 集計モード: 現在の図面から特定の属性データを抽出し、Excelへ書き出す。
これらを1つのボタンに統合することで、あなたのツールバーは非常にすっきりとし、チームメンバーからも「使いやすい」と評判になるはずです。
AutoCAD VBAは、単にコードを書くのではなく、「ユーザーがいかに心地よく操作できるか」という体験を設計するエンジニアリングです。ぜひ、この`GetKword`をあなたの武器に加えてください。
次はどの機能を作りましょうか? また行き詰まったら、いつでもここへ戻ってきてくださいね。応援しています!
