【実務・中級編】【実務中級】AcadDocument.Utility.GetKwordによる「モード切り替え」の実装:一つのマクロで「作図モード」と「集計モード」を選択可能にするUI設計 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAの流儀:UIの肥大化を防ぎ「モード切り替え」で設計をスマートにする

ツールバーにボタンを並べる時代は終わった。ボタンが増えれば増えるほど、ユーザーは迷い、保守性は低下し、開発者の管理コストは指数関数的に膨れ上がる。

真に優秀なエンジニアは、「ひとつのコマンドで複数の役割を果たす」UIを設計する。今回は、`AcadDocument.Utility.GetKeyword`を用いた、堅牢かつ洗練された「モード切り替え」の実装術を伝授する。

なぜ「GetKeyword」なのか:ユーザー体験とエラーハンドリングの極意

多くの初心者は、入力ボックス(InputBox)でモードを選択させようとする。だが、AutoCADの作図環境において、コマンドラインでのキー入力こそが最も直感的で、かつ「Escキーによる中断」というAutoCAD標準のフローに適合する。

`GetKeyword`を使う最大のメリットは、「ユーザーに許容された文字列以外の入力を物理的に遮断できる」点にある。曖昧な入力を許容して後続の処理でエラーを吐くのは、三流のコードだ。

実装コード:堅牢なモード切替モジュール

以下は、実務でそのまま運用可能な「作図モード(Draw)」と「集計モード(Calc)」を切り替えるためのテンプレートコードだ。

Option Explicit

”’

”’ モード選択を伴うメインエントリポイント
”’

Public Sub StartAutomatedTask()
Dim util As AcadUtility
Set util = ThisDrawing.Utility

‘ ユーザーに選択させるキーワードの定義
‘ 戻り値は選択された単語(例: “Draw”)
Dim selectedMode As String

On Error Resume Next ‘ ユーザーがEscを押した時のエラーをトラップ

util.InitializeUserInput 1, “Draw Calc”
selectedMode = util.GetKeyword(vbCrLf & “実行モードを選択 [作図(Draw)/集計(Calc)]: “)

‘ エラーが発生した(Escキー押下等)場合は終了
If Err.Number <> 0 Then
Err.Clear
Exit Sub
End If
On Error GoTo 0

‘ 選択結果に応じた処理の分岐
Select Case selectedMode
Case “Draw”
Call RunDrawingLogic
Case “Calc”
Call RunCalculationLogic
End Select
End Sub

Private Sub RunDrawingLogic()
‘ ここに作図エンジンのロジックを記述
ThisDrawing.Utility.Prompt “作図モードを開始します…” & vbCrLf
End Sub

Private Sub RunCalculationLogic()
‘ ここに集計エンジンのロジックを記述
ThisDrawing.Utility.Prompt “集計モードを開始します…” & vbCrLf
End Sub

プロフェッショナルが守るべき3つの設計原則

このコードをただコピペするだけではなく、現場で生き残るための設計思想を理解してほしい。

1. `InitializeUserInput` による入力制御

`InitializeUserInput 1` の「1」というフラグは重要だ。これは「空の入力(Enterのみ)を禁止する」設定である。ユーザーの誤操作をコンパイル前に防ぐ、これこそが堅牢な設計の第一歩だ。

2. エラーハンドリングの「境界線」

`On Error Resume Next` は多用厳禁だが、`GetKeyword` においては例外だ。ユーザーがEscキーを押した瞬間に実行されるマクロが、汚いエラーメッセージと共に終了するのはプロの仕事ではない。Escキーは「キャンセル=正常終了」と見なし、静かに処理を終えるべきだ。

3. ロジックの「疎結合化」

メインの`StartAutomatedTask`に全ての処理を書くのは、悪手中の悪手だ。上記コードのように、処理を別プロシージャに切り分けることで、以下のメリットが生まれる。

  • 単体テストの容易化: 「集計ロジックだけ」をテスト呼び出しできる。
  • 保守性の向上: どちらかのモードに仕様変更があっても、もう一方に影響を与えない。

ファイル・データベース連携への発展

実務では、このモード選択の結果を保持しつつ、外部データベースやCSVと連携することになるだろう。その際、AutoCADのオブジェクトモデルに依存しすぎないことが重要だ。

  • 状態管理: `ThisDrawing.SetVariable` を使って「USERI1」などのシステム変数にモード状態を保存すると、マクロを跨いでも状態を保持できる。
  • パフォーマンス: `GetKeyword` のループ内で重い処理(ファイルを開く、DB接続)を行ってはいけない。モードを決定した後に、必要なリソースを一度だけ読み込む「イニシャライズ設計」を徹底すること。

最後に

ツールを作る目的は、単にコードを書くことではない。「ユーザーが迷う時間をゼロにし、CAD操作のストレスを最小化すること」だ。

この「モード切替UI」を導入するだけで、あなたのツールは一気にプロ仕様の顔つきになる。次は、この分岐構造をさらに発展させ、設定ファイルを読み込む「環境切り替え」の実装に挑戦してみるといい。

AutoCAD VBAは、使いこなせば最強の武器になる。その武器を、もっと鋭く研ぎ澄ませ。

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