【入門編】【初心者向け】AutoCAD VBA事始め:AcadApplicationを取得し、外部アプリからAutoCADを制御する第一歩 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCADの自動化の世界へようこそ。
これまでマクロの記録や、ExcelのVBAを少し触ったことがあるという方にとって、「外部のアプリケーションからAutoCADを自在に操る」というのは、少しハードルが高く感じるかもしれません。

ですが、安心してください。ここをクリアすれば、AutoCAD VBAの基本はバッチリですよ。
今日は、AutoCAD自動化のすべての起点となる「AcadApplicationオブジェクトの取得と制御」について、現場の知見を交えながら優しく、そして本質的に解説していきます。

—

1. AutoCAD自動化の全体像を知る

Excel VBAであれば、VBAエディタ(VBE)を開けばそのままワークシートを操作できますよね。しかし、AutoCADを外部(Excelや独立したVBScript、他のVBA環境など)から操作する場合、最初にしなければならないことがあります。

それが、「AutoCADの頭脳(プロセス)と繋がる」ということです。

AutoCADを背後で動かしているのは、`AcadApplication` という巨大なオブジェクトです。外部アプリからAutoCADを制御する第一歩は、この `AcadApplication` の居場所を突き止め、手元に引っ張ってくることに他なりません。

この接続方法には、主に以下の2つのアプローチがあります。
1. `GetObject`:今まさに起動しているAutoCADを「キャッチ」する
2. `CreateObject`:裏で新しくAutoCADを「起動」させる

この2つの使い分けをマスターすることが、安定した自動化システムの第一歩です。

—

2. 実践! `GetObject` と `CreateObject` の使い分け

百聞は一見に如かず。まずは、外部のVBA環境(例えばExcelの標準モジュールなど)から、AutoCADを操作するコードを見てみましょう。

堅牢な接続処理のサンプルコード

Sub ConnectToAutoCAD()
Dim acadApp As Object
Dim isNewInstance As Boolean

isNewInstance = False

On Error Resume Next
‘ 1. すでに起動しているAutoCADのインスタンスを取得しに行く
Set acadApp = GetObject(, “AutoCAD.Application”)

‘ エラーが発生した(=AutoCADが起動していない)場合
If Err.Number <> 0 Then
Err.Clear
‘ 2. 新しくAutoCADのインスタンスを生成(起動)する
Set acadApp = CreateObject(“AutoCAD.Application”)
isNewInstance = True
End If
On Error GoTo 0 ‘ エラー監視を元に戻す

‘ 接続成功のチェック
If acadApp Is Nothing Then
MsgBox “AutoCADの起動に失敗しました。”, vbCritical
Exit Sub
End If

‘ — ここから操作本番 —
If isNewInstance Then
MsgBox “AutoCADを新規起動しました。”, vbInformation
Else
MsgBox “起動中のAutoCADに接続しました!”, vbInformation
End If

‘ 基本プロパティへのアクセス
Call InspectAutoCAD(acadApp)

‘ オブジェクトの解放(メモリリーク防止の鉄則)
Set acadApp = Nothing
End Sub

‘ AutoCADの基本情報を覗き見るプロシージャ
Sub InspectAutoCAD(ByVal app As Object)
Dim infoMsg As String

‘ 画面を表示状態にする(CreateObject直後はVisibleがFalseのことがあるため)
app.Visible = True

infoMsg = “— AutoCAD 基本情報 —” & vbCrLf & _
“バージョン: ” & app.Version & vbCrLf & _
“ウィンドウキャプション: ” & app.Caption & vbCrLf & _
“可視状態: ” & app.Visible

MsgBox infoMsg, vbInformation, “AutoCADステータス”
End Sub

コードの解説:ここがエンジニアのこだわりポイント

  • `On Error Resume Next` の正しい使い方

`GetObject` は、対象のアプリケーションが起動していないと容赦なく実行時エラーを発生させます。「エラーが出たら次へ進む」という構文を挟み、エラー番号(`Err.Number`)をチェックすることで、「起動していなければ新規起動する(`CreateObject`)」という安全なフォールバック(身代わり処理)を実装できます。

  • `app.Visible = True` の重要性

`CreateObject` でAutoCADをバックグラウンド起動した場合、画面が表示されない(`Visible = False`)状態で立ち上がることがあります。コードが動いているのに画面が真っ暗で混乱しないよう、インスタンス取得後は明示的に `Visible = True` を指定するのが実務の定石です。

  • `Set acadApp = Nothing` による後始末

VBAの実行が終了しても、COMオブジェクトの参照がメモリに残るとAutoCADの裏プロセスイノベーション(ゾンビプロセス)が残り続ける原因になります。処理の最後には必ずオブジェクトを解放しましょう。

—

3. 初学者が絶対にハマる「落とし穴」と回避策

AutoCAD VBAを外部から触り始めると、誰もが一度は次のような壁にぶつかります。

落とし穴①:「コンポーネントはオブジェクトを作成できません」エラー

  • 原因:PCに複数のAutoCAD版本がインストールされている場合や、レジストリの登録が正しくない場合に発生します。また、Excelが32bit版でAutoCADが64bit版であるなど、ビット数が異なるとCOMのプロセス間通信に失敗します。
  • 対策:プログラムを動かすExcelとAutoCADのビット数(32bit/64bit)は必ず統一してください。また、バージョンを特定してバインドしたい場合は `”AutoCAD.Application.24″`(AutoCAD 2023の場合など)のようにバージョンプロギIDを指定する手法も検討しましょう。

落とし穴②:セキュリティと管理者権限の罠

  • 原因:AutoCADが「管理者として実行」されている状態で、一般権限で動いているExcelから `GetObject` しようとすると、Windowsのセキュリティ(UAC)に阻まれて接続に失敗します。
  • 対策:検証を行う際は、ExcelとAutoCADの権限レベルを揃える(どちらも通常権限で起動する)ことを忘れないでください。

—

4. おわりに:ここから広がる自動化の世界

お疲れ様でした!今回は `AcadApplication` を取得し、その `Version` や `Visible` といった基本的なプロパティを操作する第一歩を解説しました。

ここをクリアできれば、次は取得した `AcadApplication` から現在開いている図面(`ActiveDocument`)を呼び出し、線を描いたり、画層(レイヤー)を操作したりする本格的なCADプログラミングへと進むことができます。

「たったこれだけのコードで、外部からCADをコントロールできた!」という感動を大切に、ぜひご自身の業務自動化に役立ててくださいね。
基礎を固めたあなたなら、どんな複雑な作図自動化も必ずモノにできますよ。それでは、次回の記事もお楽しみに!

タイトルとURLをコピーしました