Альтернативой фигурам будет использование границы и события двойного щелчка.
Добавьте код в модуль рабочего листа и измените значение ячейки в столбце 10.
Затем дважды щелкните ячейку с границей.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Columns(11)) Is Nothing And Target.Count = 1 Then
If Target.Offset(, -1).Value > 1 And Target.Borders.Count > 0 Then
Target.Offset(1).EntireRow.Insert xlDown, False
Cancel = True
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns(10)) Is Nothing And Target.Count = 1 Then
If Target.Value > 1 And IsNumeric(Target) Then
Target.Offset(, 1).BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic
Else
Target.Offset(, 1).Borders.LineStyle = xlNone
End If
End If
End Sub
Если вы действительно хотите использовать форму , попробуйте что-то вроде ниже.
В модуле рабочего листа:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns(10)) Is Nothing And Target.Count = 1 Then
If Target.Value > 1 And IsNumeric(Target) Then
AddShape Target.Offset(0, 1)
Else
DeleteShape Target.Offset(0, 1)
End If
End If
End Sub
В обычном модуле:
Sub AddShape(rCell As Range)
'// Check if shape already exists
Dim shLoop As Shape
For Each shLoop In rCell.Parent.Shapes
If shLoop.Type = msoShapeRectangle And shLoop.TopLeftCell = rCell Then
Exit Sub
End If
Next shLoop
With rCell.Parent.Shapes.AddShape(msoShapeRectangle, rCell.Left, rCell.Top, rCell.Width, rCell.Height)
.OnAction = "ShapeClick"
End With
End Sub
Sub DeleteShape(rCell As Range)
Dim shLoop As Shape
For Each shLoop In rCell.Parent.Shapes
If shLoop.Type = msoShapeRectangle And shLoop.TopLeftCell = rCell Then
shLoop.Delete
Exit For
End If
Next
End Sub
Sub ShapeClick()
With ActiveSheet.Shapes(Application.Caller)
ActiveSheet.Rows(.TopLeftCell.Row + 1).Insert Shift:=xlDown
End With
End Sub