0
votes

I have a macro to build a consolidated PowerPoint presentation from about 25 separate, individual slides. The slides have a status circle that are either red, yellow or green to display the current status. I want to pull the color of these shapes and put into an excel file. I have tried using the shape index number to reference the shape in my code, but the index for the particular shape changes on every slide; it is not consistent. The Shape ID seems to be consistent, but I cannot figure out how to use the Shape ID in VBA. This is what I'm currently using:

With ActivePresentation.Slides(IForLoop).Shapes(8).Fill.ForeColor
data = ActivePresentation.Slides(IForLoop).Shapes(8).Fill.Forecolor

If Instr(1 , data, "255"), Then
     LArray (I, sStatus) = "Red"
ElseIf InStr(1, data, "65535") Then
     LArray (I, sStatus) = "Yellow"
ElseIf InStr(1, data, "5287936") Then
     LArray (I, sStatus) = "Green"
End If

The problem is that the Shape reference, Shape(8), is not consistent for each slide so I'm not getting the correct color name to populate in my Excel file.

Thank you.

1
Get shape by id or name : stackoverflow.com/q/5527073/212869NickSlash
I did review that article previously. I do know the shape ID but don't know the syntax to reference the ID in the VB code to then find the fill color and pass to my if/then statement.Jfordyce

1 Answers

0
votes

Untested:

'...
Dim shp As Shape

Set shp = getShapeByID(yourIdHere, ActivePresentation.Slides(IForLoop))

If Not shp Is Nothing then
   Select Case shp.Fill.ForeColor
       Case 255: LArray (I, sStatus) = "Red"
       Case 65535: LArray (I, sStatus) = "Yellow"
       Case 5287936: LArray (I, sStatus) = "Green"
   End Select
End If
'...


'Get a shape from its Id
Function getShapeByID(shapeID As Long, sl As Slide) As Shape
    Dim s As Shape
    For Each s In sl.Shapes
        If s.id = shapeID Then
            Set getShapeByID = s
            Exit Function
        End If
    Next
End Function