Excelファイルからテキストを配置するマクロ|AutoCAD VBAマクロの作成方法
AutoCAD VBAはExcelと連携させることでより効果的な自動化ツールを作成することができるようになります。本ページではExcelファイルに記載されている情報からAutoCAD上にテキストを一括作成する方法について解説していきます。サンプルコードはかなり単純なコードとなっていますが骨組み部分はできているので、処理を多少追加するだけでより汎用的なマクロとすることが可能です。
Excelとの連携方法は下記ページで解説しているので先に一読しておくことをオススメします。
マクロ機能
・テキストの作成先はアクティブドキュメントのモデル空間
・読み込むExcelファイルはA列がX座標、B列がY座標、C列がテキストの文字列であること
1行目はヘッダーとして2行目以降にテキスト作成用データを記載のこと
・Excelファイルに記載可能なテキスト情報の上限はExcelの最大行数
サンプルマクロでは作成するテキストの情報として設定可能な項目は「配置する座標」と「テキストの文字列」のみとなっています。コードと入力するExcelのフォーマットを少し追加することで、テキスト高さや角度、色や画層なども設定したテキストを作成することが可能になります。
サンプルコード
下記は指定したExcelファイルに記載されているテキスト情報のデータを取得して、その情報をもとに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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
Option Explicit '***************************************************************************** '* メイン関数 '***************************************************************************** Sub main() Dim oTable As AcadTable Dim sPathExcel As String 'Excelファイルパス指定 sPathExcel = "C:\...\TextInfo.xlsx" 'Excelから表作成 Call ImportTextData(sPathExcel) End Sub '----------------------------------------------------------------------------- '- Excel記載の座標と文字列情報から指定の位置にテキストを一括作成する '- sPathExcel :Excelファイルパス (1つ目のシートが対象) '----------------------------------------------------------------------------- Private Sub ImportTextData(ByVal sPathExcel As String) Dim oExcel As Object Dim wbImport As Object 'Workbook Dim wsImport As Object 'Worksheet Dim vDatas As Variant Dim oText As AcadText Dim sText As String Dim arr_dPos(0 To 2) As Double Dim r As Long '入力パスからExcelファイルを裏側で開く Set oExcel = CreateObject("Excel.Application") Set wbImport = oExcel.Workbooks.Open(sPathExcel) Set wsImport = wbImport.Worksheets.Item(1) 'データ取得 (※表はA1セルから始まっている必要あり) vDatas = wsImport.Cells(1, 1).CurrentRegion 'Excel終了 Call oExcel.Quit 'テキスト一括作成 For r = 2 To UBound(vDatas, 1) 'Excelから情報取得 arr_dPos(0) = vDatas(r, 1) 'X座標取得 arr_dPos(1) = vDatas(r, 2) 'Y座標取得 sText = vDatas(r, 3) 'テキスト取得 'ダイナミックテキスト作成 Set oText = ThisDrawing.ModelSpace.AddText(sText, arr_dPos, 5) Next '画面再描画 Call ThisDrawing.Regen(acAllViewports) End Sub |
コード解説
Excel情報取得
AutoCAD VBAでExcel VBAを利用できるようにするためには、ExcelオブジェクトをCreateObjectで作成する必要があります。(※詳しくはAutoCAD VBAでExcelを操作する方法を参照ください)
出力するデータの対象のシートは「Item(1)」、表も「Cells(1, 1).CurrentRegion」というように決め打ちのコードとなっています。この取得方法は適宜入力データに合わせて変更する必要があります。
データ取得後は2次元配列にデータが格納され、Excel自体は不要になるのでデータ取得直後に終了させています。この終了処理が行われないとバックグラウンドでExcelが開き続けてしまうので注意が必要です。デバッグエラーで途中で止まってしまい終了処理が行われなかった場合も裏に残ってしまうため、基本的には不要になったタイミングで即時終わらせるほうが安心です。
バックグラウンドに残ってしまったExcelはタスクマネージャから手動で終了させることができます。
ダイナミックテキスト作成
ダイナミックテキストはModelSpaceオブジェクトのAddTextメソッドを使い作成することができます。引数としては「値, 作成位置(配列), テキスト高さ」の3つの情報が必要になります。サンプルコードではこれら情報をExcel記載のデータから取得してそのまま引数として入力しています。このときテキストの高さを設定するための第3引数には適当な定数値として”5″を入力しています。
1 2 3 4 5 6 7 |
'Excelから情報取得 arr_dPos(0) = vDatas(r, 1) 'X座標取得 arr_dPos(1) = vDatas(r, 2) 'Y座標取得 sText = vDatas(r, 3) 'テキスト取得 'ダイナミックテキスト作成 Set oText = ThisDrawing.ModelSpace.AddText(sText, arr_dPos, 5) |
作成したダイナミックテキストはTextオブジェクトとして取得できますが、このTextオブジェクトのプロパティ/メソッドを使うことで作成したテキストに対して色の変更や角度変更、文字スタイルの変更などの様々な設定を行うことができます。
まとめ
今回はExcelで作成した表の情報をもとにテキストを一括で作成する方法についての内容でした。
サンプルコードでは作成する座標とテキストの文字列のみしか設定できませんでしたが、コードに少し処理を書き加えるだけで色の設定や文字スタイルの設定、テキスト高さの設定など様々な条件を追加することができます。コードとしてはかなり単純な内容ですが、指定の位置にテキストを作成する作業を一瞬で終わらすことができるため、自動化によるコスト削減の効果はかなり大きいです。