Probably, but can you clarify what you mean by "all visible parts and components"? If I open an assembly, there is only one visible part (the assembly); everything else is a component.
.GetAllObjectsOnLayer() will return all the objects on a specified layer.
.AskVisibleObjects() will return the visible objects in a given view.
Alternately, you could cycle through the objects of interest checking the layer and visibility of each. So, if you are interested in only the visible bodies on layer 5, you might do something like:
for each tempBody as Body in workpart.Bodies if (tempBody.Layer = 5) AndAlso (Not tempBody.IsBlanked) then 'add this body to your list else 'don't need this one end if next