Powerpoint - VBA - Состояние слайдов - PullRequest
0 голосов
/ 10 октября 2019

Надеюсь, у тебя все хорошо. Я немного застрял в скриптах макросов, я хотел бы выполнить следующее

  1. После запуска макроса;создайте прямоугольник формы с атрибутами (см. ниже)
  2. Если прямоугольник уже существует в активном слайде, удалите его.

Вот небольшой код макроса, написанный для вставки фигуры

Sub TBU()
Dim oSh As Shape
Set oSh = ActiveWindow.Selection.SlideRange.Shapes.AddShape(msoShapeRectangle, 902, 5, 47, 27)
With oSh
   With .TextFrame.TextRange
      .Text = "[TBU]"
       With .Font
        .name = "Arial"
        .Size = 12
        .Bold = msoFalse
        .Italic = msoFalse
        .Underline = msoFalse
        .Shadow = msoFalse
        .Emboss = msoFalse
        .BaselineOffset = 0
        .AutoRotateNumbers = msoFalse
        .Color = RGB(255, 0, 0)
    End With
    End With

    With oSh
        .Fill.Visible = msoTrue
        .Fill.ForeColor.RGB = RGB(255, 255, 0)
        .Fill.Solid
   End With
End With
End Sub

Я пытался удалить фигуру в активном слайде, только если прямоугольник с такими же атрибутами уже существовал, но застрял на нем.

У кого-нибудь есть идея?

С уважением, Наксос

1 Ответ

0 голосов
/ 10 октября 2019

Я думаю, что лучший способ найти любые фигуры, которые вы хотите удалить, - это перебрать все фигуры на текущем слайде и вызвать функцию, которая проверяет, соответствует ли данная фигура вашим критериям.

Этобудет выглядеть примерно так, как показано ниже. По сути, любое несоответствующее условие достаточно, чтобы сказать, что фигуру не следует удалять. Поэтому функция запускается, предполагая, что фигура должна быть удалена до тех пор, пока не найдет какое-либо условие, указывающее на иное, в этот момент она меняет возвращаемое значение на false и прекращает проверку для данной фигуры.

Dim i as Long
Dim sh as Shape
For i = ActiveWindow.View.Slide.Shapes.Count to 1 Step -1
    Set sh = ActiveWindow.View.Slide.Shapes(I)
    If ShouldBeDeleted(sh) Then
        sh.Delete
    End If
Next

'...

Function ShouldBeDeleted(sh as Shape) as Boolean
    ShouldBeDeleted = True

    'Repeat this IF structure for each criteria.
    If sh.Fill.Visible <> msoTrue Then
         ShouldBeDeleted = False
         Exit Function
    End If

    If Not sh.HasTextFrame Then
         ShouldBeDeleted = False
         Exit Function
    End If


    '... keep repeating these if structures.

End Function
...