AutoCAD VBAを掌握する:Visibleプロパティによる「サイレント起動」でバッチ処理を極限まで加速させる
AutoCADの自動化において、最も初歩的でありながら、最も軽視されがちなのが「GUI描画のコスト」だ。
画面上に図面がパラパラと展開される様子を眺めるのは、確かに達成感があるかもしれない。だが、業務自動化の現場において、それは「無駄なCPUとGPUのリソースを浪費している」という事実に他ならない。
今回は、AutoCADのバックグラウンド実行における要諦、`Visible`プロパティを用いた「サイレント起動」の設計思想を伝授する。
—
1. なぜ「Visible = False」なのか?
AutoCADのUIを描画するという行為は、単なる見た目の問題ではない。WindowsのGDI/DirectXを介したグラフィックスパイプラインを常に稼働させることを意味する。
数千枚の図面をバッチ処理する際、この「描画負荷」は実行時間に直結する。特に、レイアウトの切り替えやズーム操作が絡む処理において、画面を非表示(`Visible = False`)にすることは、描画計算をバイパスし、計算処理のみにリソースを集中させるための最も安価で強力な最適化手法だ。
—
2. 実装の鉄則:堅牢なライフサイクル管理
初心者ほど「VisibleをFalseにすれば速くなる」という表面的な事実だけでコードを書く。だが、プロのエンジニアは「異常終了時の後始末」を真っ先に考える。
もし、サイレント起動中にエラーが発生し、AutoCADがバックグラウンドに「ゾンビプロセス」として残ったらどうなるか? ユーザーはタスクマネージャを叩く羽目になり、あなたのツールへの信頼は地に落ちる。
プロダクションコード例
このコードは、自作の管理クラスや標準モジュールに組み込むためのプロトタイプである。
Option Explicit
‘ バッチ処理用:AutoCADをサイレント起動するプロシージャ
Public Sub ExecuteSilentBatch(ByVal dwgPath As String)
Dim acadApp As AcadApplication
Dim acadDoc As AcadDocument
On Error GoTo ErrorHandler
‘ 1. AutoCADアプリケーションインスタンスの取得
Set acadApp = New AcadApplication
‘ 2. ここが肝:画面を非表示にする
‘ 既に開いているAutoCADがある場合、動作に影響するため注意が必要
acadApp.Visible = False
‘ 3. 図面を開く(読み取り専用で開くのがバッチ処理の鉄則)
Set acadDoc = acadApp.Documents.Open(dwgPath, True)
‘ — ここに本来の自動化ロジックを記述 —
Debug.Print “Processing: ” & acadDoc.Name
‘ 例: acadDoc.SaveAs(…)
‘ ————————————-
‘ 4. 後始末(クローズ処理)
acadDoc.Close False ‘ 変更を保存せずに閉じる
acadApp.Quit
Set acadDoc = Nothing
Set acadApp = Nothing
Exit Sub
ErrorHandler:
‘ 異常終了時も必ずプロセスを解放する
If Not acadDoc Is Nothing Then acadDoc.Close False
If Not acadApp Is Nothing Then acadApp.Quit
MsgBox “エラー発生: ” & Err.Description, vbCritical
End Sub
—
3. 実務で「詰まない」ための3つの注意点
コードをコピペして終わりではない。現場で確実に運用するための知見を共有する。
① 既存のAutoCADセッションとの競合
`New AcadApplication` は、常に新しいプロセスを生成する。もしユーザーが別の図面を作業中にこのマクロを走らせると、バックグラウンドのAutoCADと干渉し、思わぬクラッシュを招く可能性がある。「現在実行中のAutoCAD」を使うのか、「専用のバッチ用インスタンス」を立てるのか、設計段階で明確に切り分けること。
② モデル空間とペーパー空間の制約
VisibleがFalseの時、一部の機能(特に `Zoom` や `ActiveLayout` の切り替えなど、画面表示に依存するメソッド)は挙動が不安定になることがある。可能な限り、オブジェクトモデルの深い階層(`Database` オブジェクトへの直接アクセスなど)を操作するよう設計せよ。
③ データベース連携のボトルネック
図面情報をExcelやSQL Serverに書き出す際、図面1枚ごとに接続を切断・再接続していては、処理時間がデータベースのオーバーヘッドで食い潰される。「ファイルオープン → データ抽出 → 一括コミット → クローズ」という、トランザクションを意識したパイプラインを構築せよ。
—
最後に:なぜ「サイレント」にこだわるのか
あなたが書くプログラムは、単に「動けばいい」ものではない。それは、現場の設計者が毎日繰り返す「退屈な作業」を根絶するための、戦術兵器であるはずだ。
Visibleプロパティを制御するということは、単に画面を消すことではない。「AutoCADという巨大なソフトウェアの挙動を、自分の手中に収める」という意思表示だ。
さあ、GUIの呪縛から解放された、真に高速な自動化の世界へ踏み出してほしい。質問があればいつでも歓迎する。コードの先にある「効率」を追求し続けよう。
