Powerpoint - VBA - 幻灯片状态

Powerpoint - VBA - Slide status

希望你一切顺利。 我有点卡在宏脚本上,我想执行以下操作

  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

只有当具有相同属性的矩形已经存在但卡在上面时,我才尝试删除活动幻灯片中的形状。

有人有想法吗?

亲切的问候, 纳克索斯

我认为找到要删除的任何形状的最佳方法是遍历当前幻灯片中的所有形状,并调用一个函数来检查给定的形状是否符合您的条件。

它看起来类似于下面的代码。基本上,任何一个不匹配的条件都足以说明不应删除该形状。因此,该函数首先假设应该删除该形状,直到它找到任何指示否则的条件,此时它将 return 值更改为 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