AutoCAD VBAを極める:複数バージョンを自在に操る「動的起動」の深淵
こんにちは。AutoCADの自動化の海へようこそ。
日々、何千枚もの図面を相手にしていると、「この図面は2020で開くべきか、それとも2024か?」といったバージョン管理のジレンマに直面することはありませんか?
「マクロの記録」で生成されたコードをただ動かすだけでは、プロのエンジニアとは言えません。真の自動化とは、AutoCADという巨大なアプリケーションのライフサイクルを、プログラム側から完全に掌握することにあります。
今回は、複数バージョンが共存する環境で、特定の図面に対して「最適なAutoCAD」を動的に呼び出す、少しハードルの高い、しかし非常に強力なテクニックを伝授します。
—
1. なぜ「CreateObject」なのか?
通常、AutoCAD VBAを実行すると、現在動いているAutoCADプロセスに接続しようとします。しかし、大規模な開発現場では、図面バージョンに合わせて適切なAutoCADを起動させる必要があります。
ここで登場するのが `CreateObject` です。これは、WindowsのCOM(Component Object Model)を通じて、特定のAutoCADアプリケーションを「指名召喚」する魔法のコマンドです。
陥りやすい罠:ProgIDの固定化
多くの初心者は `CreateObject(“AutoCAD.Application”)` と書きがちです。しかし、これではOSのレジストリが指定する「最後にインストールしたバージョン」が強制的に起動してしまいます。これではバージョン制御などできませんよね。
—
2. 実践:バージョンを指定して起動するコード
以下は、特定のバージョン(例:AutoCAD 2024)を明示的に呼び出し、図面を開くためのプロフェッショナルなテンプレートです。
Sub OpenDrawingWithSpecificVersion()
Dim acadApp As Object
Dim acadDoc As Object
Dim progID As String
‘ AutoCAD 2024を指定するためのProgID
‘ バージョンごとにこのIDは決まっています (例: AutoCAD.Application.24.3)
progID = “AutoCAD.Application.24.3”
On Error Resume Next
‘ 指定したバージョンを起動(既に起動していればそのインスタンスを取得)
Set acadApp = GetObject(, progID)
If acadApp Is Nothing Then
‘ インスタンスがなければ新規作成
Set acadApp = CreateObject(progID)
End If
On Error GoTo 0
‘ AutoCADを可視化
acadApp.Visible = True
‘ 図面を開く
Set acadDoc = acadApp.Documents.Open(“C:\Projects\Sample.dwg”)
‘ 処理終了後、アプリケーションを閉じたい場合は以下をアンコメント
‘ acadDoc.Close
‘ acadApp.Quit
End Sub
コードのここがポイント!
- GetObjectとCreateObjectの併用: 既に起動中のプロセスを再利用する(メモリ節約)か、新規起動するかを判断する「二段構え」が重要です。
- ProgIDの命名規則: `AutoCAD.Application.{マイナーバージョン}` の形式です。これを動的に切り替えることで、プログラムがどのバージョンを叩くかを自在に制御できます。
—
3. バージョン管理を成功させるコツ
① レジストリを確認する
自分のPCでどのバージョンがどのIDに対応しているかは、Windowsのレジストリエディタで `HKEY_CLASSES_ROOT` を確認するのが一番確実です。ここを覗けるようになれば、あなたはもうAutoCADの裏側を覗き込めるレベルです。
② パフォーマンスの重みを知る
`CreateObject` は新しいAutoCADプロセスを立ち上げるため、メモリを大量に消費します。ループ処理で図面を1枚ずつ開くたびに `CreateObject` を繰り返すと、PCは悲鳴を上げます。
「一度開いたインスタンスを使い回す」。これが大規模自動化における鉄則です。
—
4. プロへのステップアップ:例外処理を極める
現場で一番怖いのは「バージョン不整合によるクラッシュ」です。
例えば、2024でしか開けない図面を無理やり2020で開こうとすれば、エラーが発生します。
‘ エラー処理のテンプレート
If Err.Number <> 0 Then
MsgBox “指定したバージョンのAutoCADではこの図面を開けません。管理者に相談してください。”
Exit Sub
End If
このように、コードに「意思」を持たせてください。ただ動くコードではなく、トラブルを未然に防ぎ、異常が発生した際に的確に状況を報告するコードこそが、最高峰のエンジニアが書くコードです。
—
最後に:自動化の先にあるもの
AutoCAD VBAは、単なる「作業の効率化ツール」ではありません。あなたの思考をCADに憑依させ、24時間眠ることなく図面を処理し続ける「デジタル分身」を作るための技術です。
今回紹介した動的起動のテクニックをマスターすれば、バージョン混在の悪夢からは解放されます。次はぜひ、VB.NETへの移行も検討してみてください。VBAという世界から少し外の世界を見ることで、さらに深い設計図が見えてくるはずです。
迷ったら、またここへ戻ってきてください。いつでも最高の技術でお待ちしていますよ。
