【入門編】【初心者向け】図面オープン直後の「モデル空間/ペーパー空間」自動切り替え:編集開始時の視点を固定するVBA – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCAD VBAの世界へようこそ。
業務自動化エンジニアの先輩として、今日から君をワンランク上のCAD使いへと導いていこう。

日々の業務で、こんなストレスを感じたことはないだろうか?

  • 「複数の図面を開くたびに、前任者がペーパー空間(レイアウト)の変な拡大図で保存していて、一発目に全体が見えない!」
  • 「編集を始める前に、毎回わざわざモデル空間に切り替えて、全画面表示(Zoom Extents)にする手間が地味にめんどくさい……」

小さな手間だが、1日に何十枚も図面を開くプロの現場では、この「視点のばらつき」が積もり積もって大きなタイムロスになる。

今回は、「図面を開いた瞬間、強制的にモデル空間の全体表示でスタートさせる」という、実務で即座に使える自動化マジックを伝授しよう。
ここをクリアすれば、AutoCAD VBAの基本と「イベント駆動」の概念が一気にバッチリ理解できるぞ。ついてきなさい!

—

1. なぜ「自動化」が必要なのか?(本質を知る)

AutoCAD VBAの世界では、マクロの記録ボタンを押して操作を覚えるだけでは、図面を開いた瞬間の動作をコントロールすることはできない。

ここで登場するのが、AutoCADの「アプリケーションイベント」だ。
「図面が開いた(`DocumentActivated` または `Open`)」というシステム側の合図をVBAで聞き取り、開いた瞬間にプログラムを割り込ませる。これがプロの自動化のやり方だ。

これによって得られるメリットは絶大だ:
1. 視点の完全な統一:どの図面を開いても、常に「モデル空間の全体表示」からスタートできる。
2. ヒューマンエラーの防止:ペーパー空間でうっかり線を引いてしまう事故を防ぐ。
3. 作業リズムの高速化:図面を開いた直後から、迷わず即座に作図作業へ入れる。

—

2. 実装の全体像:どこに何を書くのか?

初心者が一番最初にハマる罠が、「どこにコードを書けばいいの?」という問題だ。
通常の標準モジュールに書くだけでは、図面が開いた時に勝手に動いてはくれない。

今回は、AutoCADが起動している間ずっと監視を続けてくれる「クラスモジュール」という少し高度な仕組みを使う。
……といっても、恐れる必要はない。以下の2つのステップをそのまま真似すれば完璧に動く。

  • ステップ1:クラスモジュール(監視役)の作成
  • ステップ2:標準モジュール(起動・停止役)の作成

—

3. 現場で使える!コピペ対応の極限コード

さあ、実際にコードを書いていこう。VBAエディタ(`Alt + F11`)を開いて準備してくれ。

ステップ1:クラスモジュールの設定

VBAのメニューから `挿入` > `クラス モジュール` を選択し、プロパティウィンドウで名前を `CAppEvent` に変更してくれ。
そして、以下のコードをそのまま貼り付ける。

‘ ==========================================
‘ クラス名: CAppEvent
‘ 役割: AutoCADのイベントを監視し、図面オープン時に
‘ 自動でモデル空間&全体表示にする
‘ ==========================================
Public WithEvents AcadApp As AcadApplication

‘ 図面がアクティブになった(開いた、または切り替えた)瞬間に走るイベント
Private Sub AcadApp_DocumentActivated(ByVal Doc As AutoCAD.AcadDocument)
On Error GoTo ErrorHandler

‘ 1. 現在の空間を「モデル空間(Model Space)」に強制切替
Doc.ActiveSpace = acModelSpace

‘ 2. 画面をモデル空間の全体表示(Zoom Extents)にする
‘ ※ActiveDocumentに対してZoomExtentsを実行
ThisDrawing.Application.ZoomExtents

Exit Sub

ErrorHandler:
‘ 何らかのエラーで止まらないためのフェイルセーフ
‘ (新規図面や特殊な状態の図面でのエラーをスルーする)
Resume Next
End Sub

💡 先輩エンジニアの解説:コードの急所

  • `Public WithEvents AcadApp As AcadApplication`

これが魔法の呪文だ。`WithEvents`をつけることで、AutoCAD本体(Application)の動きを監視する「耳」を立てることができる。

  • `Doc.ActiveSpace = acModelSpace`

ペーパー空間(レイアウトタブ)にいたとしても、強制的にモデル空間へ引き戻すプロパティだ。

  • `ZoomExtents`

画面内の全オブジェクトが画面いっぱいに収まるように、自動でズームを調整してくれる最高のメソッドだ。

—

ステップ2:標準モジュールでのイベント有効化

次に、通常の `標準モジュール` を挿入し、名前を `mStartUp` などにして、以下のコードを貼り付ける。
これによって、監視役を「スタート」させるスイッチを作るんだ。

‘ ==========================================
‘ 標準モジュール: mStartUp
‘ 役割: クラスを常駐させ、監視をスタートさせる
‘ ==========================================
Public 監視クラス As CAppEvent

Sub 視点固定オートメーション開始()
‘ クラスのインスタンスを生成し、AutoCADのイベントを紐付ける
Set 監視クラス = New CAppEvent
Set 監視クラス.AcadApp = ThisDrawing.Application

MsgBox “図面オープン時の視点自動固定(モデル・全体表示)を有効化しました!”, vbInformation, “AutoCAD VBA”
End Sub

Sub 視点固定オートメーション停止()
‘ 監視を解除
Set 監視クラス = Nothing

MsgBox “自動固定を停止しました。”, vbInformation, “AutoCAD VBA”
end Sub

—

4. 動作テストと使い方

1. `視点固定オートメーション開始` のマクロを実行する(これで裏側で監視がスタートする)。
2. 一度、適当な図面を新しく開くか、別の図面を開いてみる。
3. どうだ? 開いた瞬間に、パッとモデル空間に切り替わり、図面全体が画面中央にドンと表示されたはずだ!

—

5. 初心者が陥りやすい罠と対策(ここ重要!)

最後に、現場でよくあるトラブルと、その回避策を伝えておく。

  • 罠1:「コードを動かしたのに、何も起きない……」
  • 原因:VBAのエディタを閉じたり、変数がリセットされると、`WithEvents` の監視が切れてしまうことがある。
  • 対策:まずは確実に `視点固定オートメーション開始` のマクロを実行してクラスを有効化しているか確認しよう。実務では、AutoCAD起動時に自動でこのマクロが走るように「acad.lsp」やスタートアップに組み込むのがプロの常道だ。
  • 罠2:「新規図面(Drawing1.dwgなど)を開いたときにエラーが出る」
  • 原因:まっさらな何もない図面に対して `ZoomExtents` をかけると、オブジェクトが存在しないため稀にエラーを吐くことがある。
  • 対策:先ほど提供したコードのように `On Error GoTo ErrorHandler` でエラーを華麗にスルー(`Resume Next`)させるのが、頑健な(壊れにくい)プログラムを書くエンジニアの鉄則だ。

—

おわりに

お疲れ様!今回は、図面を開いた瞬間の視点をコントロールする極意を伝授した。
「イベントを捉えて自動で動かす」という感覚がつかめれば、君はもう単なるマクロの記録者ではなく、立派なAutoCAD VBAエンジニアの仲間入りだ。

ここをクリアできれば、次はレイアウトの一括印刷や、画層(レイヤー)の自動整理など、もっと高度な自動化の扉が開く。
日々の面倒な手作業はすべてコードに任せて、私たちは「クリエイティブな設計・製図」に集中しよう。

それでは、次のステージでまた会おう!

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