AutoCAD VBAを掌握する:全社配布ツールを「自己更新」させる極限の自動化術
こんにちは。現場の泥臭い自動化から、アーキテクチャの設計までを担うエンジニアの視点で、今日は少しだけ「禁断の領域」に踏み込みます。
多くのエンジニアが悩むのが「配布したVBAツールのバージョン管理」です。設計者が数百人いる環境で、一人ひとりのPCのファイルを差し替えて回る……そんな時代遅れなことは終わりにしましょう。
今回は、AutoCAD自身が起動時にサーバー上の最新コードを読み込み、自らを書き換える「VBAマクロの自己更新システム」の構築方法を伝授します。
—
1. なぜ「自己更新」が必要なのか?
通常、VBAプロジェクト(.dvb)は一度配布すると、中身を更新するには「上書き配布」が必要です。しかし、設計者がファイルを開いている最中には上書きできず、運用は破綻します。
私たちが目指すのは、「VBAプロジェクト自体をコードとして扱い、サーバー上の最新ソースを同期する」というアプローチです。これには、AutoCADの`AcadApplication.VBE`オブジェクトという、非常に強力かつ繊細な窓口を使います。
—
2. 実装の心臓部:VBEオブジェクトの権限解放
まず大前提として、VBAからVBAプロジェクトを操作するには、AutoCADのセキュリティ設定を変更する必要があります。
- [ツール] > [オプション] > [システム] > [実行可能ファイルの設定]
- 「VBA プロジェクトへのプログラミングによるアクセスを許可」にチェックを入れる。
これができていないと、VBAは「自分自身」に触れることができません。ここが最初の壁であり、突破すべき門です。
—
3. 実践:サーバーからコードを同期するコード
以下は、`acad.dvb`(スタートアップ用マクロ)に記述する、自己更新ロジックの骨子です。
‘ 必要な参照設定: Microsoft Visual Basic for Applications Extensibility 5.3
Sub UpdateMyProject()
Dim vbeObj As Object
Dim proj As Object
Dim comp As Object
Dim serverPath As String: serverPath = “\\Server\Scripts\LatestCode.bas”
‘ 1. 現在のプロジェクトを取得
Set vbeObj = ThisDrawing.Application.VBE
Set proj = vbeObj.ActiveVBProject
‘ 2. 古いモジュールを削除(安全のため、特定のモジュールのみ入れ替える)
On Error Resume Next
proj.VBComponents.Remove proj.VBComponents(“CoreLogic”)
On Error GoTo 0
‘ 3. サーバー上の最新ファイルをインポート
proj.VBComponents.Import serverPath
MsgBox “ツールが最新版に更新されました。再起動してください。”, vbInformation
End Sub
【プロの視点:陥りやすい罠】
- 参照設定の壁: `Microsoft Visual Basic for Applications Extensibility 5.3` を参照設定に追加し忘れるとエラーになります。VBAの世界では、ライブラリの依存関係が何よりも重要です。
- 実行中のコードは消せない: プロジェクトを実行している最中にそのモジュール自体を削除しようとすると、AutoCADがクラッシュします。必ず「メインの処理」と「更新処理」を別のファイル(あるいはモジュール)に分けるのが鉄則です。
—
4. 運用のための「賢いアーキテクチャ」
現場でこれを実装する際、私は以下の構成を強く推奨します。
1. ランチャー(LDR)方式: 本体のツールとは別に、ごく小さな「ローダー用DVB」を配布します。
2. 起動時チェック: ローダーはAutoCAD起動時に読み込まれ、サーバーのタイムスタンプを確認します。
3. 差分更新: 差分があれば、上記のコードでモジュールを差し替え、AutoCADを再起動させます。
この構成なら、本体のロジックがどんなに巨大になっても、サーバー側で`.bas`ファイルを保存するだけで、全ユーザーの環境が数分でアップデートされます。
—
5. まとめ:ここをクリアすれば、君はもう初心者じゃない
この「VBAによるVBAの操作」を理解したということは、あなたはもう「マクロを記録するユーザー」ではなく、「開発環境を支配するエンジニア」になったということです。
- AcadApplication はAutoCADの心臓。
- VBEオブジェクト はその心臓を外科手術するメス。
この2つを使いこなせば、配布の手間という「負債」をゼロにできます。ぜひ、現場のサーバーにコードを置いて、自動化の第一歩を踏み出してみてください。
分からないことがあれば、またいつでも聞きに来てください。設計を支えるあなたの自動化コードが、明日も多くの設計者の時間を生み出すことを願っています。
