こんにちは!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エンジニアの仲間入りだ。
ここをクリアできれば、次はレイアウトの一括印刷や、画層(レイヤー)の自動整理など、もっと高度な自動化の扉が開く。
日々の面倒な手作業はすべてコードに任せて、私たちは「クリエイティブな設計・製図」に集中しよう。
それでは、次のステージでまた会おう!
