はじめに
AutoCADは強力なCADツールであり、Excel VBAを利用して自動化を行うことで、効率的に設計作業を進めることが可能です。本記事では、Excel VBAを使用してAutoCADの線分を描く方法を説明します。
EXCELでのVBAの準備
Excel VBAでAutoCADを操作するために、AutoCADのオブジェクトライブラリを参照設定する必要があります。
- VBAエディタのメニューから「ツール」→「参照設定」を選択します。
- リストから「AutoCAD Type Library」または「AutoCAD Object Libraly」を選択し、チェックを入れて「OK」をクリックします。
(※Verにより多少名称が変わるかもしれません。「AutoCAD 2021 Type Library」など。)
線分(ライン)を描くサンプルコード
それでは、エクセルに入力した値を使って線分を描くサンプルコードを紹介します。
まずは下のようなエクセルシートを準備します。
A2セル~F2セルの並びが入力セルです。
G2は描いた線分のハンドル値を取得する用のセルです。入力は不要です。
ハンドル値はAutoCADの自動化を進める上で後々重要になるので取得するようにしていますが、今の段階では特に気にする必要はありません。
VBAのコードは以下のようになります。
Sub DrawLineInAutoCAD()
'AutoCADアプリケーションオブジェクトを宣言
Dim acadApp As Object
'AutoCADドキュメントオブジェクトを宣言
Dim acadDoc As Object
'ラインオブジェクトを宣言
Dim lineObj As Object
'AutoCADが起動していなければ起動し、すでに開いていたら取得する。
On Error Resume Next
Set acadApp = GetObject(,"AutoCAD.Application")
If acadApp Is Nothing Then
Set acadApp = CreateObject("AutoCAD.Application")
End If
On Error GoTo 0
'AutoCADを表示
acadApp.Visible = True
'AutoCADドキュメントが開いてなければ新規作成し、開いていれば取得する。
On Error Resume Next
Set acadDoc = acadApp.ActiveDocument
If acadDoc Is Nothing Then
Set acadDoc = acadApp.Documents.Add
End If
On Error GoTo 0
'始点と終点を入れる変数の宣言
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
'始点を設定
startPoint(0) = Cells(2,1) 'X座標
startPoint(1) = Cells(2,2) 'Y座標
startPoint(2) = Cells(2,3) 'Z座標
'終点を設定
endPoint(0) = Cells(2,4) 'X座標
endPoint(1) = Cells(2,5) 'Y座標
endPoint(2) = Cells(2,6) 'Z座標
'線分を作成
Set lineObj = acadDoc.ModelSpace.AddLine(startPoint, endPoint)
'ハンドルの取得
Cells(2,7) = lineObj.Handle
'オブジェクト範囲の表示
acadDoc.Application.ZoomExtents
'再作図
acadDoc.Regen acActiveViewport
'メッセージを表示
MsgBox ”線分を描きました!”
End Sub
線分を描くVBA Functionプロシージャ
コードをFunctionプロシージャとして作成すれば、もっと容易に大量の線分を描くことが出来るようになります。ここでは、その方法を記述します。
まず、EXCEL VBAの標準モジュールの中に下記コードをこのまま記述しましょう。
Public acadApp As AcadApplication 'AutoCADのアプリケーションドキュメントを保持する変数
Public acadDoc As AutoCAD.AcadDocument 'AutoCADのドキュメントオブジェクトを保持する変数
Function DrawLineInAutoCAD(x1 As Double, y1 As Double, z1 As Double, x2 As Double, y2 As Double, z2 As Double) As String
'AutoCADに線を描画する関数
'引数は最初から順に
'始点のX座標、始点のY座標、始点のZ座標、終点のX座標、終点のY座標、終点のZ座標
'戻り値は描画した線分のハンドル
Dim lineObj As AcadLine '線分オブジェクトを保持する変数
Dim startPoint(2) As Double, endPoint(2) As Double '始点と終点の座標を保持する配列
'始点の座標を設定
startPoint(0) = x1
startPoint(1) = y1
startPoint(2) = z1
'終点の座標を設定
endPoint(0) = x2
endPoint(1) = y2
endPoint(2) = z2
'AutoCADのモデル空間に線を追加
Set lineObj = acadDoc.ModelSpace.AddLine(startPoint, endPoint)
'追加した線分のハンドルを返す
DrawLineInAutoCAD = lineObj.Handle
End Function
これで線分を描くときはDrawLineInAutoCAD(x1,y1,z1,x2,y2,z2)を呼び出すだけで簡単に使えます。
例えば、次のようなシートを準備します。
そしてメインのプロシージャのサンプルを記述します。このサンプルはAutoCADを開いた状態で実行してください。アクティブになっている図面に線分を描きます。
public Sub main()
On Error GoTo OUT1 'エラーハンドリング:AutoCADが起動していないとき
Set acadApp =GetObject(,"AutoCAD.Application") '既存のAutoCADアプリケーションの取得
On Error GoTo OUT2 'エラーハンドリング:AutoCADのファイルが開かれてない場合
Set acadDoc = acadApp.ActiveDocument 'アクティブなAutoCADドキュメントを取得
On Error GoTo 0 'エラーハンドリングをリセット
'AutoCADに線分を描画し、そのハンドルをExcelに書き込む
Cells(2,7) = DrawLineInAutoCAD(Cells(2,1),Cells(2,2),Cells(2,3),Cells(2,4),Cells(2,5),Cells(2,6))
Cells(3,7) = DrawLineInAutoCAD(Cells(3,1),Cells(3,2),Cells(3,3),Cells(3,4),Cells(3,5),Cells(3,6))
Cells(4,7) = DrawLineInAutoCAD(Cells(4,1),Cells(4,2),Cells(4,3),Cells(4,4),Cells(4,5),Cells(4,6))
Exit Sub
OUT1:
MsgBox "AutoCADを起動してください"
Exit Sub
OUT2:
MsgBox "AutoCADのファイルを開いてください"
End Sub
11~13行目がFunctionプロシージャを呼び出しているところです。サンプルのためひとつひとつ記述してますが、For文など使用すれば大量に線分を描くことが出来るでしょう。
もちろん、セルから値を読み込まなくても下記のように使用できます。
Cells(2,7) = DrawLineInAutoCAD(1,1,0,10,10,0) '始点(1,1,0)終点(10,10,0)の線を描く
線分を描きたいけれどハンドルは不要という場合は、下記のように適当にdummyなどの変数を用意して対応すればよいでしょう。
dummy = DrawLineInAutoCAD(1,1,0,10,10,0) '始点(1,1,0)終点(10,10,0)の線を描く
おわりに
今回の記事では、Excel VBAを使用してAutoCADに線分を描く方法を紹介しました。基本的なAutoCADの接続方法と線分を描くコードの流れが理解できたでしょうか。
VBAを活用することで、AutoCADでの作業を自動化し、設計の効率をさらに高めることが出来ます。
最近、線分をたくさん描いちゃって、ストレートに疲れちゃった!
ではまた。
コメント