Determining whether a PPT shape has other shapes within it

D

Dale Fye

I'm trying to write some code that will enumerate all of the shapes on a
slide.

Got this part working for the top level shapes, but if a shape is Group or a
diagram, or something else, how do I determine whether it has shapes
imbedded within it, and if so, how do I iterate through the shapes within
that higher level shape?

Dale
 
V

vindys

Dim s As Shape
Set s = ActiveWindow.Selection.ShapeRange(1)
If s.Type = msoGroup Then
With s
For i = 1 To s.GroupItems.Count
's.GroupItems (i) will give you each item
Next i
End With
End If
 
D

Dale Fye

Will this work for all types of shapes that have other shapes imbedded
within them, or only "Groups"?
 
S

Steve Rindsberg

Will this work for all types of shapes that have other shapes imbedded
within them, or only "Groups"?

Only Groups have other PPT shapes embedded within them; embedded OLE objects,
linked OLE objects and some pictures are embedded as WMF/EMF representations
that turn INTO shapes when ungrouped. As a general solution, you'd have to
ungroup them to get at the component shapes.
 
D

Dale Fye

Steve,

Vindy's code below helped me crack the nut for Group types 8 and 13 and
appears to handle part of the issue with shape type (14, Diagram 4).

However, with the Diagram shape, although that code did allow me to delve
into the diagram, it did not identify the types of shapes that were embedded
in the diagram, and when I went into PPT and clicked on the diagram, there
did not appear to be a way to ungroup the shapes that make it up, to give me
access to the individual shapes.

I would be interested in knowing how to do this, as well as how to ungroup
embedded OLE Objects.

Once ungrouped, I can always close the presentation without saving the
changes, but I need to be able to diassemble the entire presentation so that
I can look at each of it's component parts.

Thanks for your help

Dale
 
S

Steve Rindsberg

However, with the Diagram shape, although that code did allow me to delve
into the diagram, it did not identify the types of shapes that were embedded
in the diagram, and when I went into PPT and clicked on the diagram, there
did not appear to be a way to ungroup the shapes that make it up, to give me
access to the individual shapes.

This should do it, I think:

Dim oSh As Shape
Dim x As Long

' for demo purposes, assume you've selected a diagram
Set oSh = ActiveWindow.Selection.ShapeRange(1)

With oSh
For x = 1 To .GroupItems.Count
Debug.Print .GroupItems(x).Name
' deal with other properties here
Next
End With
I would be interested in knowing how to do this, as well as how to ungroup
embedded OLE Objects.

And something like his for the latter. The odd loop is because some object
when ungrouped turn into a PPT group.

Sub UngroupOLEObject()

Dim oSh As Shape
Dim oShapeRange As ShapeRange
Dim x As Long

' assume you've selected an ole embedded or linked object
Set oSh = ActiveWindow.Selection.ShapeRange(1)

Set oShapeRange = oSh.Ungroup
Do Until oShapeRange.Count > 1
Set oShapeRange = oShapeRange.Ungroup
Loop

With oShapeRange
For x = 1 To .Count
Debug.Print .Item(x).Name
Next
End With

End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top