A friend of mine, a surveying engineer, asked me recently if it is possible to draw a polyline in AutoCAD using coordinates from an Excel file. He had a large Excel file with point coordinates (x, y), and he wanted to connect them through a polyline to create a 2D profile. I manage to fulfill his request by using a lightweight polyline, a 2D line consisting of straight and arched segments.
I thought that the interaction between Excel and AutoCAD using VBA might be useful for all types of engineers using AutoCAD (primarily civil and surveying engineers), so I decided to post the VBA code here. Although the example is quite simple, it illustrates the general idea of using VBA from Excel to draw objects in AutoCAD.
VBA code to draw a polyline in AutoCAD using early binding
Option Explicit Option Private Module Sub DrawPolyline() 'Draws a polyline in AutoCAD using X and Y coordinates from sheet Coordinates. 'By Christos Samaras 'http://www.myengineeringworld.net 'In order to use the macro you must enable the AutoCAD library from VBA editor: 'Go to Tools -> References -> Autocad 1234 Type Library, where 1234 depends 'on your AutoCAD version (i.e. 2010, 2011, 2012, etc.) you have installed on your PC. 'Declaring the necessary variables. Dim acadApp As AcadApplication Dim acadDoc As AcadDocument Dim LastRow As Long Dim acadPol As AcadLWPolyline Dim dblCoordinates() As Double Dim i As Long Dim j As Long Dim k As Long shCoordinates.Activate 'Find the last row. With shCoordinates LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row End With 'Check if there are at least two points. If LastRow < 3 Then MsgBox "There not enough points to draw the polyline!", vbCritical, "Points Erro" Exit Sub End If 'Check if AutoCAD is open. On Error Resume Next Set acadApp = GetObject(, "AutoCAD.Application") On Error GoTo 0 'If AutoCAD is not opened create a new instance and make it visible. If acadApp Is Nothing Then Set acadApp = New AcadApplication acadApp.Visible = True End If 'Check if there is an active drawing. On Error Resume Next Set acadDoc = acadApp.ActiveDocument On Error GoTo 0 'No active drawing found. Create a new one. If acadDoc Is Nothing Then Set acadDoc = acadApp.Documents.Add acadApp.Visible = True End If 'Get the array size. ReDim dblCoordinates(2 * (LastRow - 1) - 1) 'Pass the coordinates to array. k = 0 For i = 2 To LastRow For j = 1 To 2 dblCoordinates(k) = shCoordinates.Cells(i, j) k = k + 1 Next j Next i 'Draw the polyline either at model space or at paper space. If acadDoc.ActiveSpace = acModelSpace Then Set acadPol = acadDoc.ModelSpace.AddLightWeightPolyline(dblCoordinates) Else Set acadPol = acadDoc.PaperSpace.AddLightWeightPolyline(dblCoordinates) End If 'Leave the polyline open (the last point is not connected with the first point. 'Set the next line to true if you need to connect the last point with the first one. acadPol.Closed = False acadPol.Update 'Zooming in to the drawing area. acadApp.ZoomExtents 'Inform the user that the polyline was created. MsgBox "The polyline was successfully created!", vbInformation, "Finished" End Sub Sub ClearCoordinates() Dim LastRow As Long shCoordinates.Activate 'Find the last row. With shCoordinates LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row .Range("A2:B" & LastRow).ClearContents .Range("A2").Select End With End Sub
The short video below demonstrates the results of the above VBA code.
If you try to use the above VBA code and get the following error “Compile error: User-defined type not defined” (see figure below), the first thing you should do is to check if the AutoCAD reference in the VBA editor is enabled. So, go to Tools => References => and enable Autocad 1234 Type Library, where 1234 depends on your AutoCAD version (i.e., 2010, 2011, 2012, etc.) you have installed on your computer.
If you have AutoCAD 2010 or newer, you will need to download the VBA module from Autodesk since from 2010, VBA is not installed with AutoCAD.
The above code was successfully tested in Excel and AutoCAD 2010. However, it should also work in other Excel/AutoCAD versions.
Draw A 3D Polyline (Pipe-Like) In AutoCAD Using Excel & VBA
AutoCAD VBA Add-In: Calculate Polylines Length & Area
Drawing Circles In AutoCAD Using Excel & VBA
Add Text In AutoCAD Using Excel & VBA
Drawing Points In AutoCAD Using Excel & VBA