1

I'm trying to create a macro that can send to back the "Rectangle" shapes in my current selection (which can have either Rectangle shapes or Pictures). I was trying to create one with an "IF" condition that checks if the shape is a picture or not, and if it's not then it will send the shape to the back. It works fine as long as there is only one object selected, but my goal is to select both Rectangles and Pictures at the same time, and then let the macro go through all of them and send only Rectangles to the back. I thought I had it, but the macro I tried does nothing.

The failed attempt below:

Dim oSh as Shape

For Each oSh In ActiveWindow.Selection.ShapeRange
If oSh.Type <> msoPicture Then
ActiveWindow.Selection.ShapeRange.ZOrder msoSendToBack
ElseIf oSh.Type = msoPicture Then
ActiveWindow.Selection.ShapeRange.ZOrder msoBringToFront
    
      End If
      
    Next oSh

2 Answers2

1

You are close - the only issue you have it that with ActiveWindow.Selection.ShapeRange.ZOrder msoSendToBack you send all shapes in the selection to back (same for front). Simply use oSh.ZOrder msoSendToBack to handle the shapes individually.

Note that your condition for the Else is not needed - the shape type is either a Picture or not (I have reverted the first if condition for better readability).

Dim oSh As Shape
For Each oSh In ActiveWindow.Selection.ShapeRange
    If oSh.Type = msoPicture Then
        oSh.ZOrder msoBringToFront
    Else
        oSh.ZOrder msoSendToBack
    End If
Next oSh

If you want to handle all shapes of the current slide (without the need to select them first), change the For-Loop to

For Each oSh In Application.ActiveWindow.View.Slide.Shapes
FunThomas
  • 23,043
  • 3
  • 18
  • 34
0

Mmh not sure how to reply to the answer above, but (as you already know) it worked. Many thanks. I would upvote, but I'm not worthy yet.