That is an odd deal on Drop Down as it should error every time. You can skip that error like this:
Sub ShapeNames()
Dim s As Shape
For Each s In Worksheets("Task_List").Shapes
If VBA.Left(s.Name, 4) <> "Drop" Then Debug.Print s.Name, s.TopLeftCell.Address
Next s
End Sub
You can also use .Type or .AutoShapeType. e.g.
Debug.Print s.Type, s.AutoShapeType '8, -2 for Drop Downs - Ones you want: 13 ,1
I would recommend modifying your code to Lock and Unlock cells in mass rather than one at a time.
I like to Protect my sheets in ThisWorkbook Open event so I don't have to UnProtect/Protect in code. e.g.
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In Worksheets
' UserInterfaceOnly:=True allows code to change data.
ws.Protect "ken", UserInterfaceOnly:=True, DrawingObjects:=True, _
Contents:=True, Scenarios:=True
Next ws
End Sub
When working with shapes I like to poke then into an array. I can then use Match to find the one I want or use the row and column of the array using the TopLeftCell. I think you have duplicate Shape names so that might not be best for you.