Есть ли способ использовать идентификатор фигуры в PowerPoint VBA, чтобы затем определить ее цвет? - PullRequest
0 голосов
/ 10 июля 2020

У меня есть макрос для создания консолидированной презентации PowerPoint примерно из 25 отдельных слайдов. На слайдах есть красный, желтый или зеленый кружок состояния для отображения текущего состояния. Я хочу вытащить цвет этих фигур и поместить в файл Excel. Я пробовал использовать номер индекса формы для ссылки на фигуру в моем коде, но индекс для конкретной фигуры меняется на каждом слайде; это непоследовательно. Идентификатор формы кажется согласованным, но я не могу понять, как использовать идентификатор формы в VBA. Вот что я сейчас использую:

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

Проблема в том, что ссылка на фигуру, Shape (8), не согласована для каждого слайда, поэтому я не получаю правильное имя цвета для заполнения мой файл Excel.

Спасибо.

1 Ответ

0 голосов
/ 10 июля 2020

Не проверено:

'...
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...