You're changing the collection you're iterating, as you're iterating it; that's always a bad idea!
So you have an infinite loop, because every time you duplicate a shape, you effectively add a solid-fill shape to the oSl.Shapes collection, which is then a solid-fill shape that should be duplicated - right?
You need a way to separate the process of knowing which shapes to copy and that of copying solid-fill shapes.
Make a new collection:
Dim solidShapes As Collection
Set solidShapes = New Collection
Now iterate the slides and their shapes, but instead of copying right away, add them to that collection:
For Each currentShape In currentSlide.Shapes
If currentShape.Fill.Type = msoFillSolid Then
solidShapes.Add currentShape
End If
Next
Notice I'm using readable identifiers without Systems Hungarian (aka useless) prefixes (read that link! Especially if you're a firm believer of Hungarian Notation).
Now you can iterate the solidShapes collection, and .Duplicate every item in it.
Elseclause?Shapescollection is being added to, every time a solid-fill shape is encountered. The loop is infinite as written.