Friday, 5 April 2013

Draw A Polyline In AutoCAD Using Excel

A friend of mine, who is 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 points 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, which is a 2D line consisting of straight and arced segments.

I thought that the interaction between Excel and AutoCAD using VBA might be useful for all types of engineers who using AutoCAD (primarily civil and surveying engineers), so I decided to post the VBA code that I wrote here. Although the example is quite simple, I think that it illustrates the general idea of using VBA from Excel to draw objects in AutoCAD.

VBA code

Option Explicit
Option Private Module

Sub DrawPolyline()

    'Draws a polyline in AutoCAD using X and Y coordinates from sheet Coordinates.
    'By Christos Samaras
    'In order to use the macro you must enable the AutoCAD library from VBA editor:
    'Go to Tools -> References -> Autocad xxxx Type Library, where xxxx depends
    'on your AutoCAD version (i.e. 2010, 2011, 2012, etc.) you have installed to 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
    '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 Error"
        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)
        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
    'Zooming in to the drawing area.
    'Inform the user that the polyline was created.
    MsgBox "The polyline was successfully created!", vbInformation, "Finished"

End Sub

Code results

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 xxx Type Library, where xxx depends on your AutoCAD version (i.e., 2010, 2011, 2012, etc.) you have installed on your computer.

VBA Compile Error

If you have AutoCAD 2010 or newer, then you will need to download the VBA module from Autodesk since from 2010 version VBA is not installed with AutoCAD.

Download it from here

The above code was successfully tested in Excel and AutoCAD 2010. However, it should also work in other Excel/AutoCAD versions.

Read also

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 

Did you like this post? If yes, then share it with your friends. Thank you!


Mechanical Engineer (Ph.D. cand.), M.Sc. Cranfield University, Dipl.-Ing. Aristotle University, Thessaloniki - Greece.
Communication: e-mail, Facebook, Twitter, Google+ and Linkedin. More info