通常、VBA IDE でまたは Visual Studio を使用して作成した AutoCAD オートメーション プロジェクトを AutoCAD 2024 で使用できるようにするためには、若干の更新が必要な場合があります。ActiveX を使用した AutoLISP プログラムも更新が必要になる場合がありますが、これはあまり一般的ではありません。
ActiveX API に対して行われた変更の一般的な履歴は、「ActiveX API の履歴」を参照してください。
新しいオブジェクトは追加されませんでした。
既存のオブジェクトに対して行われた変更は、次の表のとおりです。
AutoCAD 2023 | AutoCAD 2024 | 変更の概要 |
---|---|---|
AutoCAD のみ: AutoCAD.Application.24 または AutoCAD.Application.24.2 |
AutoCAD のみ: AutoCAD.Application.24 または AutoCAD.Application.24.3 |
インストールした最新のライブラリに基づいて AutoCAD アプリケーションインスタンスを作成するには、AutoCAD.Application を使用します。 確実に AutoCAD 2024 のインスタンスが作成されるようにするには、AutoCAD.Application.24.3 を使用してください。 |
AutoCAD 図面環境や、Microsoft Word または Excel など VBA をサポートしているアプリケーションで作成された VBA プロジェクトでは、AutoCAD ActiveX API への参照を更新しなければならない可能性があります。AutoCAD ActiveX API を使用している Managed .NET および ObjectARX アプリケーションも、更新しなければならない可能性があります。
次の表に、AutoCAD ベースの製品のリリースごとにサポートされている AutoCAD オブジェクト ライブラリのファイル名を示します。
リリース | リリース番号 | AutoCAD タイプ ライブラリ | AutoCAD/ObjectDBX タイプ ライブラリ |
---|---|---|---|
AutoCAD 2024 | 24.3 | acax24<言語>.tlb | axdb24<言語>.tlb |
AutoCAD 2023 | 24.2 | acax24<言語>.tlb | axdb24<言語>.tlb |
AutoCAD 2022 | 24.1 | acax24<言語>.tlb | axdb24<言語>.tlb |
AutoCAD 2021 | 24.0 | acax24<言語>.tlb | axdb24<言語>.tlb |
AutoCAD 2020 | 23.1 | acax23<言語>.tlb | axdb23<言語>.tlb |
AutoCAD 2019 | 23.0 | acax23<言語>.tlb | axdb23<言語>.tlb |
AutoCAD 2018 | 22.0 | acax22<言語>.tlb | axdb22<言語>.tlb |
AutoCAD 2017 | 21.0 | acax21<言語>.tlb | axdb21<言語>.tlb |
AutoCAD 2016 | 20.1 | acax20<言語>.tlb | axdb20<言語>.tlb |
AutoCAD 2015 | 20.0 | acax20<言語>.tlb | axdb20<言語>.tlb |
AutoCAD 2014 | 19.1 | acax19<言語>.tlb | axdb19<言語>.tlb |
AutoCAD 2013 | 19.0 | acax19<言語>.tlb | axdb19<言語>.tlb |
AutoCAD 2012 | 18.2 | acax18<言語>.tlb | axdb18<言語>.tlb |
AutoCAD 2011 | 18.1 | acax18<言語>.tlb | axdb18<言語>.tlb |
AutoCAD 2010 | 18.0 | acax18<言語>.tlb | axdb18<言語>.tlb |
AutoCAD 2009 | 17.2 | acax17<言語>.tlb | axdb17<言語>.tlb |
AutoCAD 2008 | 17.1 | acax17<言語>.tlb | axdb17<言語>.tlb |
AutoCAD 2007 | 17.0 | acax17<言語>.tlb | axdb17<言語>.tlb |
AutoCAD 2006 | 16.2 | acax16<言語>.tlb | axdb16<言語>.tlb |
AutoCAD 2005 | 16.1 | acax16<言語>.tlb | axdb16<言語>.tlb |
AutoCAD 2004 | 16.0 | acax16<言語>.tlb | axdb16<言語>.tlb |
AutoCAD 2002 | 15.2 | acax15.tlb | axdb15.tlb |
AutoCAD 2000i | 15.1 | acax15.tlb | axdb15.tlb |
AutoCAD 2000 | 15.0 | acax15.tlb | axdb15.tlb |
次に、旧リリースで使用されているその他のAutoCAD ActiveX API のファイル名と、最新リリースで置き換えられたオブジェクト ライブラリ ファイルを示します。
COM ライブラリ参照の更新に加えて、次の変更により旧リリースのプログラムをマイグレートしなければならない可能性があります。
たとえば、AutoCAD 2014 ベース以前の製品では次のように動作します。
ThisDrawing.SendCommand "._LINE " ThisDrawing.SendCommand "0,0 5,5 "
AutoCAD 2015 ベース以降の製品では、上記のコードは LINE[線分]コマンドを実行した後、ユーザが点を指定するまで待ちます。LINE[線分]コマンドが完了または終了した後、2 番目の SendCommand メソッドが実行されます。正しく実行するには、以前のコードを次のように変更します。
ThisDrawing.SendCommand "._LINE 0,0 5,5 "
コード文を複数の行に分割する必要がある場合は、AcadDocument オブジェクトにコマンド文字列をポストし、その文字列を同期的に実行する PostCommand メソッドを使用できます。コマンド文字列の同期的実行とは、最も外側のプロシージャが実行され、AcadDocument オブジェクトがアイドル状態になったときに実行されることです。
AutoCAD 2014 から、AutoCAD はネイティブ 64 ビット サポートを提供する VBA 7.1 に対応しています。この変更により、VBA プロジェクトの 2 つのバージョン(32 ビット版と 64 ビット版)を修正する必要があります。AutoCAD 2014 より前のリリースでは、VBA は、既存の 32 ビット VBA プロジェクトを AutoCAD 64 ビットで予期したように動作させるための 32 ビットから 64 ビットへの「変換」レイヤを使用してアクセスされる外部プロセス コンポーネントとして実行されていました。
VBA 64 ビットは、フォームに異なるライブラリおよびコントロールを使用する必要があります。すべての VBA ライブラリとフォーム コントロールが 64 ビットで使用できるとは限らず、Windows 32 ビットと Windows 64 ビットで正常に機能するように、コードの一部を調整する必要がある可能性があります。
VBA プロジェクトが AutoCAD 2009 から AutoCAD 2013 用に開発されている場合は、VBA プロジェクトの最新リリースにマイ グレートするときに、次の点を考慮する必要があります。
AutoCAD 2009 の 64 ビット版から AutoCAD 2013 の 64 ビット版まで、オブジェクト ID は 64 ビット整数型(__int64)で表現されました。32 ビット VBA でこれらの値にアクセスすると、コンパイル エラーが発生しました。この解決策として、旧メソッド名の末尾に "32" を付け加えた新しいメソッド名が作成されました(たとえば、ObjectID32()、OwnerID32())。これらのメソッドでは、内部的に 64 ビット整数型に変換された LONG 型が使用されました。
正確に言うと、VBA が必要とする各オブジェクト ID に対して、32 ビット オブジェクト ID が内部的に作成されました。この ID は、実際の 64 ビット ID に対応付けられており、VBA コードから AutoCAD に 32 ビット ID が返された場合、内部的には 64 ビット オブジェクト ID が返され、使用されました。
次に、32 ビット オブジェクト ID の移植コードの例を示します。
元のコード 64 ビット(AutoCAD 2009 から AutoCAD 2013 まで)
Dim splineObj As AcadSpline Dim objectID As Long objectID = splineObj.objectID32 Dim tempObj As AcadObject Set tempObj = ThisDrawing.ObjectIdToObject32(objectID)
AutoCAD 2014 の 64 ビット版以降の互換に移植したコード
Dim splineObj As AcadSpline Dim objectID As Long objectID = splineObj.objectID Dim tempObj As AcadObject Set tempObj = ThisDrawing.ObjectIdToObject(objectID)
VBA アプリケーションは、オブジェクト ID ではなく、オブジェクトのハンドルを使用することもできます。次の例に、オブジェクト ID の代わりにハンドルを使用する方法を示します。
オブジェクトのオブジェクト ID を使用した元のコード
Dim splineObj As AcadSpline Dim objectID As Long objectID = splineObj.objectID Dim tempObj As AcadObject Set tempObj = ThisDrawing.ObjectIdToObject(objectID)
オブジェクトのハンドルを使用した変更後のコード
Dim splineObj As AcadSpline Dim objectHandle As String objectHandle = splineObj.Handle Dim tempObj As AcadObject Set tempObj = ThisDrawing.HandleToObject(objectHandle)
AutoCAD 2009 の 64 ビット版から AutoCAD 2013 の 64 ビット版で 32 ビットの代わりに使用されたメソッドの一覧を次の表に示します。
64 ビット システムの VBA メソッド | ||
---|---|---|
メソッド - AutoCAD 2009 から 2013 | メソッド - AutoCAD 2014 以降 | 使用法 |
GetBlockAttributeValue32 | GetBlockAttributeValue | 32 ビット オブジェクト ID を使用して、ブロックに含まれる属性定義オブジェクトの指定したブロック セルの属性値を返します。 |
GetBlockTableRecordId32 | GetBlockTableRecordId | ブロックタイプ セルと nContent に関連付けられたブロック テーブル レコードの 32 ビット オブジェクト ID を取得します。 |
GetFieldId32 | GetFieldId | 指定したセルに関連付けられたフィールド オブジェクトの 32 ビット オブジェクト ID を返します。 |
GetGridLinetype32 | GetGridLinetype | グリッド線種オブジェクトの 32 ビット オブジェクト ID を返します。 |
Key32 | Key | 64 ビット システムに対する CopyObjects 操作で、ソース オブジェクトのオブジェクト ID を指定します。 |
ObjectID32 | ObjectID | 64 ビット システムのオブジェクト ID を取得します。 |
ObjectIDtoObject32 | ObjectIDtoObject | 64 ビット システムの指定したオブジェクト ID に対応するオブジェクトを取得します。 |
OwnerID32 | OwnerID | 64 ビット システムのオーナー(親)オブジェクトのオブジェクト ID を取得します。 |
SetBlockAttributeValue32 | SetBlockAttributeValue | 32 ビット オブジェクト ID を使用して、ブロックと nContent を含む属性定義オブジェクトの指定したブロック セルの属性値を設定します。 |
SetBlockTableRecordId32 | SetBlockTableRecordId | ブロックタイプ セルと nContent に関連付けられた 32 ビット オブジェクト ID ブロック テーブル レコードを設定します。 |
SetFieldId32 | SetFieldId | 指定したセルと nContent に関連付けられたフィールド オブジェクトの 32 ビット オブジェクト ID を設定します。 |
SetGridLinetype32 | SetGridLinetype | グリッド線種オブジェクトの 32 ビット オブジェクト ID を設定します。 |
Value32 | Value | 64 ビット システムに対する、プロパティの現在値、または新しく作成されたクローン オブジェクトのオブジェクト ID を指定します。 |