【実務・中級編】【初心者向け】AcadDocument.Utility.Promptによるコマンドラインへの親切なガイダンス表示術 – AutoCAD VBA解析バイブル

スポンサーリンク

「MsgBoxで思考を止めるな」:AutoCAD VBAのプロフェッショナルが教える、真に「親切」なコマンドラインUI設計

AutoCADの業務自動化ツールを開発する際、多くの初心者が陥る「最大の罠」がある。それが`MsgBox`の乱用だ。

「処理が完了しました」「次の図形を選択してください」――画面中央にポップアップを出し、ユーザーにわざわざ「OK」ボタンを押させる。これこそが、設計者がユーザーのワークフローを寸断し、生産性を殺している瞬間である。

CADオペレーターは、マウスとキーボードの連携の中でリズムを作っている。そのリズムを強制停止させるツールは、どんなに高度な処理をしていても「邪魔なプログラム」でしかない。

今日は、AutoCAD本来の挙動である「コマンドラインとの対話」をVBAで完璧に制御し、洗練されたインターフェースを実現するための極意を伝授する。

1. なぜ「コマンドライン」へ出力すべきなのか?

AutoCADのUI哲学において、ステータスバーとコマンドウィンドウは「ユーザーとの会話の場所」だ。

  • 非同期的な通知: 処理を中断させず、ユーザーは必要に応じて過去のログを確認できる。
  • AutoCAD標準との親和性: ユーザーはコマンドラインを見ること自体に慣れている。
  • パフォーマンスの担保: ダイアログを表示するオーバーヘッドは、繰り返しの処理において意外にも大きなロスとなる。

`AcadDocument.Utility.Prompt` を使いこなすことは、単なる装飾ではなく、「プロフェッショナルなツール」への第一歩なのだ。

2. 実装の極意:使い捨てではない「Prompt」の設計

単に文字列を出すだけでは足りない。実務では「現在の処理がどこまで進んだか(進捗)」「どのオブジェクトを操作しているか」というコンテキストが不可欠だ。

以下のコードは、保守性が高く、かつ実務でそのまま利用できる「ロギング兼ユーザーガイダンス」のテンプレートである。

プロダクションコード例:スマート・プロンプト・コントローラー

Option Explicit

‘ ———————————————————
‘ 処理状況をコマンドラインへスマートに通知するためのクラス的関数
‘ ———————————————————
Public Sub WriteCommandLog(ByVal message As String, Optional ByVal isHeader As Boolean = False)
Dim doc As AcadDocument
Set doc = ThisDrawing

‘ プロンプト表示の基本形
‘ vbCrLf で改行を制御し、ログを読みやすくする
If isHeader Then
doc.Utility.Prompt vbCrLf & “— ” & message & ” —” & vbCrLf
Else
doc.Utility.Prompt “>> ” & message & vbCrLf
End If
End Sub

‘ ———————————————————
‘ 実務での利用例:大量のブロックを一括処理する際のフィードバック
‘ ———————————————————
Public Sub ProcessBlocksEfficiently()
Dim block As AcadBlockReference
Dim i As Long

WriteCommandLog “処理を開始します。全ブロックを解析中…”, True

‘ エラーハンドリングを忘れずに(堅牢な設計の基本)
On Error GoTo ErrorHandler

For i = 0 To ThisDrawing.ModelSpace.Count – 1
‘ ここで実際の処理を行う
‘ ユーザーを止めずに進捗をチラ見せする
If i Mod 10 = 0 Then
WriteCommandLog “現在 ” & i & ” 個目のオブジェクトを処理中…”
End If
Next i

WriteCommandLog “処理が正常に完了しました。”, True
Exit Sub

ErrorHandler:
WriteCommandLog “エラー発生: ” & Err.Description, True
End Sub

3. 実務担当者が知るべき「3つの鉄則」

現場で動くツールを作るためには、コードの書き方以上に「設計の意識」が重要になる。

① 「ユーザーの思考を遮断しない」

複雑な計算が終わるまで画面を固めるのではなく、計算のステップごとに `Prompt` で状況を出すこと。これにより、フリーズしたのか計算中なのかをユーザーが即座に判断できる。

② 「エラーはコマンドラインに集約せよ」

`MsgBox` でエラーを出すと、マクロが途中で停止し、背後で開いているデータベース接続やファイルハンドルが解放されないまま残るリスクがある。エラーこそコマンドラインに書き出し、プログラムは静かに終了(またはロールバック)させるべきだ。

③ 「ログの階層化」

単なる文字列の羅列はノイズになる。`vbCrLf` を巧みに使い、処理の区切りを明確にすること。上記サンプルのように `isHeader` フラグを持たせるだけで、コマンドウィンドウの視認性は劇的に向上する。

結論:プロのツールは「空気」である

最高に優れた自動化ツールとは、使っているユーザーが「自分の手で操作している感覚」を失わないものだ。

コマンドラインを使いこなすことは、AutoCADの内部処理とユーザーの意思決定を同期させる技術である。`MsgBox` を卒業し、コマンドラインを支配せよ。そこから先が、あなたの書くコードが「ただのスクリプト」から「業務基盤」へと進化する境界線だ。

さあ、エディタを開き、あなたのツールをより「静かで力強い」ものへと書き換えてみてほしい。

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