Excel VBAでAutoCADを操作する方法|AutoCAD VBAマクロの作成方法
本ページではExcel VBAでAutoCADを操作する方法を解説していきます。
AutoCADとExcelと連携することで作業内容によっては非常に効率を上げることができます。Excel操作のコードを作成するにはExcel VBAの知識が必要になってくるので、Excel VBAに知見の無い方はある程度Excel VBAの知識を付けてから始めることをおすすめします。
本ページで学ぶことのできる内容は以下のとおりです。
Excel VBAでAutoCADを操作する方法
また下記ページではAutoCAD VBAでExcelを操作する方法も紹介しているので合わせて参照ください。
AutoCAD VBAの事前準備
Excel VBAでAutoCADを操作するには以下の2つの準備をする必要があります。
Excel VBAにAutoCADを呼び出すための構文を書く
このうちライブラリ読み込みは必須ではありませんが、読み込むとコードを作成する際にAutoCAD VBA関連の型宣言(AcadModelSpaceやAcadEntityなど)や入力候補の表示を行うことができるようになるので、深く理解できるまでは基本的に読み込ませておくことをおすすめします。
Excel VBAにAutoCADのライブラリを読み込む
Excel VBAでAutoCADを操作するには大前提として「参照設定」というものでExcelにAutoCAD VBAのオブジェクト認識することができるように「ライブラリ」を読み込ませる必要があります。
デフォルトの場合、Excel VBAではExcel専用のオブジェクト(WorkSheet,Cellsなど)のみを、AutoCAD VBAではAutoCAD専用のオブジェクト(AcadEntityなど)のみしか読み込むことができません。これをExcel VBAからExcel専用のオブジェクトだけでなくAutoCAD専用のオブジェクトも読み込むことができるようにすればExcel VBAでAutoCADを操作することができるようになります。
「ライブラリ」とは簡単にいうとVBAのオブジェクトがまとめられた本のようなものです。
ExcelはExcel VBAに関する本、AutoCADはAutoCAD VBAに関する本しか読んでいないため、ExcelはAutoCAD VBAに関する知識が一切ありません。そのためExcelに対してAcadEntityの名前を変更したいと指示しても「AcadEntityって何?」となりエラーが発生してしまいます。
しかし、ExcelにExcel VBAに関する本だけでなくAutoCAD VBAに関する本も読ませてあげることで、ExcelはAcadEntityが何ものなのかを理解することができるようになります。
この、アプリケーションに何の本(ライブラリ)を読ませるのかを指定するのが参照設定です。
AutoCAD以外にも本が用意されているアプリケーションであれば、その本をExcelに読ませてあげることでそれらのアプリケーションを操作することも可能になります。
※厳密にいえば参照設定はあくまでもExcelのVBE上で外部アプリケーションのオブジェクトの型を認識できるようにするためのものであり、参照設定がされていなくても正しいコードが書けていて、必要なライブラリが同端末内に存在していれば外部アプリケーションの操作自体は可能です。
ライブラリの設定
VBEのメニューバー>[ツール]>[参照設定]を押下して参照設定ウィンドウを表示させます。
参照可能なライブラリファイルのリストからExcel VBAライブラリにチェックを付けます。
AutoCAD VBAライブラリは「AutoCAD ○○ Type Library」です。(※○○はバージョンで変動)
チェックの付与ができたらウィンドウ右上の[OK]ボタンを押下することで参照設定完了です。
Excel VBAにAutoCADを呼び出すための構文を書く
ライブラリの設定ができたら以下のコードを記載します。
コードを書かないとライブラリを読み込んでいいても、AutoCADは使えないので注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub main() Dim oAutoCAD As AcadApplication Dim oDoc As AcadDocument '現在開かれているAutoCADアプリケーション取得 Set oAutoCAD = GetObject(Class:="AutoCAD.Application") 'Set oAutoCAD = GetObject(, "AutoCAD.Application") こちらでも可 'アクティブドキュメント取得 Set oDoc = oAutoCAD.ActiveDocument '【AutoCADを使った処理】 'AutoCAD解放 Set oAutoCAD = Nothing End Sub |
現在開かれているAutoCADを取得するにはGetObject関数を使い、上記コードの通り記載します。CreateObject関数を使うことで新規で起動したAutoCADを取得することもできますが、Excelとは違い起動に時間がかかるため、基本的には現在開かれているAutoCADを取得する処理が利用されます。
上記コードにより、Excel VBA内で変数「oAutoCAD」をAcadApplicationオブジェクトとして利用することができるようになりました。AcadApplicationはExcel VBAでいうApplicationにあたる最上位のオブジェクトのため、AcadApplicationからAuoCAD VBAのどのオブジェクトにでもアクセスすることができるようになります。たとえば下記のコードはAutoCADのアクティブドキュメントの名称(Drawing1.dwgなど)をExeclのシート1のA1セルに書き出すことができます。
Sheet1.Cells(1, 1).Value = oAutoCAD.ActiveDocument.Name
サンプルコード
ここではサンプルとして「ExcelのA1セルの文字列をAutoCAD上にマルチテキストとして出力するマクロ」を紹介します。コードは以下のとおりです。マルチテキストの作成方法の詳細についてはダイナミックテキストとマルチテキストの作成と編集ページを参照ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Option Explicit Sub main() Dim oAutoCAD As AcadApplication Dim oDoc As AcadDocument Dim oMText As AcadMText Dim sText As String Dim arr_dPos(2) As Double Dim dWidth As Double 'AutoCADアプリケーション作成 Set oAutoCAD = GetObject(Class:="AutoCAD.Application") 'アクティブドキュメント取得 Set oDoc = oAutoCAD.ActiveDocument 'テキスト始点座標の定義 arr_dPos(0) = 10 'X座標 arr_dPos(1) = 10 'Y座標 arr_dPos(2) = 0 'Z座標 'テキスト文字列の定義 sText = ThisWorkbook.ActiveSheet.Cells(1, 1).Value 'テキスト幅の定義 dWidth = 100 'テキスト作成 Set oMText = oDoc.ModelSpace.AddMText(arr_dPos, dWidth, sText) '描画更新 Call oDoc.Regen(acActiveViewport) 'AutoCAD解放 Set oAutoCAD = Nothing End Sub |
AutoCAD VBAではアクティブなドキュメントはThisDrawingで取得することができますが、Excel VBAから取得するにはAcadApplicationオブジェクトから順に取得する必要があります。その代わり、Excel VBAなので現在アクティブのブックはThisWorkbookで取得することができます。
まとめ
今回の内容をまとめると以下のとおりです。
Excel VBAでAutoCADを操作するには以下の2つを行う必要がある
・Excel VBAにAutoCAD VBAのライブラリを読み込む (任意)
・Excel VBAにAutoCADを呼び出すための構文を書く
Excel VBAでもAutoCADを操作する書き方はAutoCAD VBAと同じ
Excel VBAもAutoCAD VBAも同じVBAであるため、それぞれを連携させた処理を行わせることは可能です。これはPowerPointやAccess、CATIAなどのVBAを扱うことのできるアプリケーションすべてにいえることです。どのアプリケーションのVBAから始めても基本的には同じ処理を実装することができるため、“ユーザーにどのアプリケーションのVBAから実行をさせるか”が重要になってきます。
AutoCAD VBAでExcelを操作する方法も紹介しているので合わせて参照ください。