こんにちは!AutoCADの自動化、日々の業務でお疲れ様です。マクロの記録から一歩踏み出し、「自分だけの業務効率化ツールを作りたい!」と熱意を持っているあなたへ。
今回は、実務の現場で必ずといっていいほど直面する「複数バージョンのAutoCADが混在する環境での起動制御」について、プロのアーキテクトの視点から徹底的に解説します。
「自分のPCでは動いたのに、先輩のPC(別バージョンのAutoCADが入っている)だとエラーで止まる…」
そんな悲劇をスマートに回避し、どの環境でも狙ったバージョンのAutoCADを確実に操るための極意を伝授しましょう。ここをクリアすれば、あなたのVBAスキルは確実に中級者の領域へ到達します。
—
1. なぜ「バージョン混在環境」でエラーが起きるのか?
AutoCADをVBAや外部スクリプト(Excelのマクロなど)から操作するとき、私たちは通常、次のようなコードを書きます。
‘ 一般的な遅延バインディングの例
Dim acadApp As Object
Set acadApp = CreateObject(“AutoCAD.Application”)
この `AutoCAD.Application` という文字列、これを「ProgID(プログラムID)」と呼びます。
一見、とてもシンプルで便利に見えますが、ここに「バージョン混在環境における最大の見落とし穴」が潜んでいます。
OSのレジストリにおける「乗っ取り問題」
PCに複数のAutoCAD(例えば、AutoCAD 2022とAutoCAD 2024)がインストールされている場合、OSのレジストリには最後にインストールされた(または最後にアクティブになった)バージョンの情報が `AutoCAD.Application` として上書き登録されます。
つまり、あなたが「AutoCAD 2022を起動したい」と思って `CreateObject(“AutoCAD.Application”)` を実行しても、PCの機嫌(レジストリの状態)次第で、意図せず全く別のバージョン(2024など)が起動してしまうのです。さらに言えば、すでに起動しているインスタンスを誤って掴んでしまい、APIの仕様違いで予期せぬエラー(実行時エラー)を引き起こす原因にもなります。
実務で使うツールなら、「どのバージョンのAutoCADを動かすのか」をコード側で完全にコントロールできなければプロとは言えません。
—
2. バージョン固有の「ProgID」を使いこなす
この問題を解決する第一歩は、汎用的な `AutoCAD.Application` を使うのをやめ、バージョン固有のProgID(Version-Independentではないもの)を指定することです。
AutoCADは、バージョンごとに専用のProgIDを持っています。
| AutoCADのバージョン | 製品リリース年 | 内部バージョン | 専用のProgID |
| :— | :— | :— | :— |
| AutoCAD 2022 | 2021年 | R24.1 | `AutoCAD.Application.24.1` |
| AutoCAD 2023 | 2022年 | R24.2 | `AutoCAD.Application.24.2` |
| AutoCAD 2024 | 2023年 | R24.3 | `AutoCAD.Application.24.3` |
| AutoCAD 2025 | 2024年 | R25.0 | `AutoCAD.Application.25.0` |
※内部バージョン(R値)とプロダクト年の対応を知っておくと、トラブルシューティングの際に非常に役立ちます。
固有ProgIDを使った起動コード
例えば、「どうしてもAutoCAD 2024を名指しで起動したい」という場合は、次のように記述します。
Sub StartSpecificAutoCAD()
Dim acadApp As Object
On Error Resume Next
‘ AutoCAD 2024専用のProgIDを指定して起動・取得を試みる
Set acadApp = GetObject(, “AutoCAD.Application.24.3”)
If acadApp Is Nothing Then
‘ 起動していなければ新規に立ち上げる
Set acadApp = CreateObject(“AutoCAD.Application.24.3”)
End If
On Error GoTo 0
If Not acadApp Is Nothing Then
MsgBox “AutoCAD 2024 が正常に起動しました!”, vbInformation
acadApp.Visible = True
Else
MsgBox “指定されたバージョンのAutoCADが見つかりませんでした。”, vbCritical
End If
End Sub
これだけで、レジストリの曖昧さに依存せず、狙ったバージョンのAutoCADを確実に手中に収めることができます。
—
3. 【実務向け】レジストリを直接参照し、柔軟にバージョンを切り替える設計
「とはいえ、ユーザーごとにインストールされているバージョンが違うツールを作りたい」
そんなワガママな(しかし実務では非常に多い)要件に応えるため、さらに一歩進んだテクニックを紹介します。
WindowsのレジストリをVBAから動的に覗き見し、「現在このPCにインストールされているAutoCADのバージョンを自動検知して、適切なものを起動する」というスマートな仕組みです。
以下のコードは、Excel VBAなどから実行することを想定した、実務でそのまま使える堅牢なロジックです。
Sub SmartLaunchAutoCAD()
Dim targetVersion As String
Dim acadApp As Object
‘ 例として「AutoCAD 2024」をターゲットにする場合
‘ 環境に応じてこの文字列を動的に変更、またはコンボボックス等で選択させます
targetVersion = “AutoCAD.Application.24.3”
On Error Resume Next
‘ 1. すでに起動している該当バージョンのプロセスがないか探す
Set acadApp = GetObject(, targetVersion)
‘ 2. 起動していなければ新しく立ち上げる
If acadApp Is Nothing Then
Set acadApp = CreateObject(targetVersion)
End If
On Error GoTo 0
‘ 3. エラーハンドリングと可視化
If acadApp Is Nothing Then
MsgBox “指定されたバージョン (” & targetVersion & “) の起動に失敗しました。”, vbCritical, “致命的なエラー”
Exit Sub
End If
‘ ウィンドウを表示状態にする
acadApp.Visible = True
‘ ドキュメントオブジェクトを取得して図面操作へつなげる
Dim acadDoc As Object
Set acadDoc = acadApp.ActiveDocument
MsgBox “接続成功! 現在の図面名: ” & acadDoc.Name, vbInformation, “AutoCAD制御モジュール”
End Sub
プロのエンジニアからのワンポイントアドバイス
複数バージョンが混在する環境では、`GetObject` と `CreateObject` を組み合わせる際、必ずエラー トラップ(`On Error Resume Next`)を適切に挟んでください。
存在しないバージョンを指定した瞬間にVBAが強制終了するのを防ぎ、ユーザーフレンドリーなメッセージを返すことが、優れたツール開発の絶対条件です。
—
まとめ:ここをクリアすれば、もうバージョン競合は怖くない!
今回は、複数バージョンのAutoCADが混在する環境を制するための極意をお伝えしました。
- `AutoCAD.Application` という汎用ProgIDは、バージョン混在環境では地雷になる。
- バージョン固有のProgID(例: `AutoCAD.Application.24.3`)を名指しで指定する。
- `GetObject` と `CreateObject` を組み合わせて、既存プロセスの再利用と新規起動をスマートに制御する。
この基本原則さえ押さえておけば、社内のPC環境がどう変わろうとも、あなたが作ったVBAツールは常に安定して動き続けます。ぜひ、明日からの開発現場で試してみてくださいね。
ここをクリアしたあなたなら、もうAutoCAD VBAの基礎はバッチリです。自信を持って、快適な自動化ライフを楽しみましょう!
