Search code examples
excelvba

I am getting "Shape type mismatch error" while creating a freeform shape from VBA


I am trying to run the following code

Sub builder()

Dim shpbld As FreeformBuilder
Dim shp As Shape

shpbld = ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, 240.5, 60)
        With shpbld
            .AddNodes msoSegmentLine, msoEditingAuto, 202.25, 60
            .AddNodes msoSegmentLine, msoEditingAuto, 185, 105
            .AddNodes msoSegmentLine, msoEditingAuto, 239.75, 105
            shp = .ConvertToShape.Select
        End With
End Sub

However, it is giving type mismatch error for shp. What am I doing wrong?


Solution

  • When assigning an object to a variable, you need to use the keyword Set...

    Sub builder()
    
    Dim shpbld As FreeformBuilder
    Dim shp As Shape
    
    Set shpbld = ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, 240.5, 60)
            With shpbld
                .AddNodes msoSegmentLine, msoEditingAuto, 202.25, 60
                .AddNodes msoSegmentLine, msoEditingAuto, 185, 105
                .AddNodes msoSegmentLine, msoEditingAuto, 239.75, 105
                Set shp = .ConvertToShape
            End With
    End Sub