AutoCAD VBAの「無言の処理」に終止符を。コマンドラインを味方につけるUI改善術
AutoCADでマクロを動かしているとき、画面がフリーズしたように感じて「あれ、今動いてるのかな?」と不安になったことはありませんか? 処理が重いスクリプトほど、ユーザーは「強制終了すべきか」という葛藤に襲われます。
世界最高峰の自動化エンジニアとして断言しましょう。「ユーザーに語りかけないコードは、未完成品と同じ」です。
今日は、あなたのコードをプロフェッショナルなツールへと昇華させる第一歩、『AcadDocument.Utility.Prompt』を使った「操作ログの可視化」について伝授します。
—
なぜ「Prompt」なのか?
VBAで処理を自動化すると、PCは一瞬で計算を終えようとしますが、AutoCADという巨大なCADエンジンを操作する場合、図形の計算や画層の切り替えにはどうしても数秒のラグが生じます。
そんな時、コマンドラインに「今、何をしているか」を表示するだけで、ユーザーの安心感は劇的に変わります。`ThisDrawing.Utility.Prompt` は、まさにそのための「対話ツール」です。
—
実践:コマンドラインを動かすコード
まずは、最もシンプルで効果的なパターンを見てみましょう。
Sub ProcessWithGuidance()
‘ 1. 現在の図面オブジェクトを取得
Dim doc As AcadDocument
Set doc = ThisDrawing
‘ 2. 処理開始の合図
doc.Utility.Prompt vbCrLf & “— 処理を開始します —” & vbCrLf
‘ 3. ステップ1:画層の整理
doc.Utility.Prompt “ステップ1:不要な画層をチェック中…”
‘ ここに実際の処理コードが入ります
Sleep 1000 ‘ 処理の代わり(※本来はSleepを使わず実際の処理を書きます)
‘ 4. ステップ2:図形の作図
doc.Utility.Prompt vbCrLf & “ステップ2:図形を生成しています…”
Sleep 1000
‘ 5. 完了報告
doc.Utility.Prompt vbCrLf & “— 全工程が正常に完了しました —” & vbCrLf
End Sub
コードのポイント解説
- `vbCrLf`: これは「改行コード」です。これがないと、ログがコマンドラインで横に繋がってしまい、非常に読みづらくなります。「文の頭には改行を置く」のが、読みやすいログ作りの鉄則です。
- `ThisDrawing`: AutoCAD VBAにおいては、開いている図面を指すショートカットのようなもの。`AcadDocument`型として扱うことで、より厳密でミスのない開発が可能になります。
—
初学者が陥りやすい「3つの罠」
せっかくログを出しても、使い所を間違えると逆効果になります。以下の罠に注意してください。
1. 出しすぎ問題: ループ処理の中で毎回 `Prompt` を出すと、コマンドラインの処理負荷が跳ね上がり、逆にマクロが遅くなります。1000回ループするなら、「10%完了」「20%完了…」のように間隔を空けましょう。
2. プロンプトが消えてしまう: `Utility.Prompt` は、次にAutoCADが標準のコマンド入力を求めると上書きされて消えることがあります。消えてほしくない重要な情報は、`Debug.Print` を使って「イミディエイトウィンドウ」にも残すのが、プロのデバッグ術です。
3. エラーハンドリングの欠如: 処理の途中でエラーが発生し、プログラムが停止した際、最後が「処理中…」のままだとユーザーは混乱します。必ず `Error Handler` を使い、異常終了時にも「処理が中断されました」と表示させる習慣をつけましょう。
—
一歩先ゆくエンジニアになるために
この「コマンドラインへの出力」ができるようになると、次にやりたくなるのは「ステータスバーへの表示」や「進捗プログレスバーの実装」かもしれません。
しかし、まずはこの `Prompt` を使いこなして、「ユーザーとの対話」を意識したコードを書いてみてください。
「動けばいいコード」から「誰が使っても安心できるコード」へ。その小さなこだわりが、あなたの書くプログラムの価値を何倍にも引き上げます。
ここをクリアしたあなたは、もうただのスクリプトキディではありません。AutoCADを意のままに操る、エンジニアの入り口に立っていますよ。さあ、次のコードで試してみましょう!
