【入門編】【初心者向け】AcadApplication.ZoomPreviousの活用:マクロ処理終了後にユーザーの視点を元の位置へ自動で戻す親切設計 – AutoCAD VBA解析バイブル

スポンサーリンク

【AutoCAD VBA】マクロが終わるたびに画面が飛ぶのは卒業!「視点維持」でユーザー体験を極める

こんにちは。AutoCADの自動化の深淵へようこそ。

マクロを組んでいて、こんな経験はありませんか?
「図面全体をループで回して色を変える処理を走らせたら、終わったあとに画面が『全体表示』のままになってしまい、元の作業場所に戻るのが面倒くさい……」

これは、マクロを書く人が最初にぶつかる「UX(ユーザー体験)」の壁です。作業者の視点を強制的に奪うマクロは、どんなに処理が速くても「使えないツール」と見なされてしまいます。

今回は、プロのエンジニアが必ず実装する「処理前の視点を記憶し、処理後に戻す」という、極めて基本的かつ重要なテクニックを伝授します。

—

なぜ「ZoomPrevious」なのか?

AutoCAD VBAには視点を操作するメソッドがいくつかありますが、最も手軽で、かつ「最後にいた場所へ戻る」という直感的な挙動を実現するのが `ZoomPrevious` です。

実は、AutoCADは内部で「画面表示の履歴」をスタック(積み上げ)形式で持っています。`ZoomAll` や `ZoomExtents` で画面を広げたとしても、その履歴を遡れば、マクロ実行前の状態を一瞬で復元できるのです。

—

実践コード:ユーザーに優しい「視点記憶型」マクロの雛形

まずは、このテンプレートをコピー&ペーストして、あなたのマクロの骨格にしてみてください。

Sub MyProcessWithViewRestore()
‘ — 1. 定義 —
Dim acadApp As AcadApplication
Dim doc As AcadDocument

Set acadApp = ThisDrawing.Application
Set doc = ThisDrawing

‘ — 2. 処理前の視点(現在地)を履歴として記録 —
‘ 実は、ZoomExtentsなどを実行すると自動で履歴が積まれるため、
‘ 処理後にZoomPreviousを呼ぶという「予約」を意識します

‘ 例:図面全体を表示して処理を行うケース
doc.SendCommand “_ZOOM _E ” ‘ 処理のために全表示へ

On Error Resume Next ‘ 万が一のエラーを回避

‘ — 3. メインの自動化処理 —
‘ ここにあなたの「図面を走査する処理」を書きます
‘ 例:全エンティティのループ処理など
Debug.Print “処理実行中…”

‘ — 4. 視点を元の位置へ戻す —
‘ 最後にZoomPreviousを呼ぶことで、処理前の状態へ復帰させる
doc.SendCommand “_ZOOM _P ”

On Error GoTo 0

MsgBox “処理が完了しました。元の視点に戻っています。”
End Sub

コードの重要ポイント解説

1. `SendCommand` の活用: `ZoomPrevious` メソッドを直接呼び出すよりも、`SendCommand “_ZOOM _P “` と記述する方が、AutoCADのコマンドライン操作と同期するため、動作が安定します。
2. `On Error Resume Next` の罠: 処理中にエラーが発生すると、`ZoomPrevious` に到達せずにプログラムが止まってしまうことがあります。本来は「エラーハンドラ」をしっかり書くのがプロですが、まずは「処理を止めない」という意識を持つことが第一歩です。
3. ユーザーへの配慮: マクロが完了した際、視点が戻ることで「あ、マクロが終わったんだな」と直感的に分かります。この「戻る」という挙動こそが、最高峰のUIです。

—

初学者が陥りやすい「3つの落とし穴」

1. 処理が重すぎて画面が固まる

ループ処理の中で `Zoom` コマンドを多用すると、AutoCADは毎回画面を再描画しようとします。「処理中は画面更新を止める」のが基本です。
`doc.Application.WindowState = acMin`(最小化)にするか、あるいは `doc.Regen acActiveViewport` を極力減らす工夫をしましょう。

2. 視点履歴が積み重なりすぎる

`ZoomPrevious` は、あくまで「直前の視点」に戻るものです。マクロの中で何度も何度もズームを繰り返すと、履歴が汚染されます。
「処理前と処理後」のペアで考えるのが鉄則です。

3. モデル空間とレイアウト空間の混同

`ActiveDocument` が現在どの空間(モデルかレイアウトか)にいるかを確認してください。異なる空間で `ZoomPrevious` を呼び出すと、予期せぬズームが発生することがあります。

—

最後に:エンジニアとしてのマインドセット

AutoCAD VBAにおいて、最も優れたコードとは「書いた本人にしか分からない複雑なロジック」ではありません。「使う人が、マクロの存在を意識せずに作業を継続できるコード」です。

今回紹介した `ZoomPrevious` による視点復帰は、そのための小さな、しかし非常に強力な第一歩です。ここをクリアしたあなたは、もう「マクロを動かす人」から「業務を設計するエンジニア」の入り口に立っています。

まずは手元のマクロに、この「帰宅の儀式(元の視点に戻す処理)」を組み込んでみてください。きっと、あなたのマクロを使う同僚の皆さんが、その小さな違いに感動してくれるはずです。

次回の記事では、さらに踏み込んだ「処理時間を劇的に短縮するオブジェクトアクセスの極意」について解説します。お楽しみに!

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