对于每个形状宏不在PowerPoint VBA中一次删除所有形状

时间:2018-06-18 20:37:38

标签: vba powerpoint

所以我在PowerPoint上有一个幻灯片,我有一个宏应该删除名称以“element”开头的所有形状。它确实删除了我想要的形状,但不是全部。我必须再次运行宏,然后删除另一堆宏。所以似乎不是一次性删除所有内容。

有人能帮助我吗?这是宏:

Sub course_reset()
Dim shp As Shape
For Each shp In Slide36.Shapes
If Left(shp.Name, 7) = "element" Then shp.Delete
Next
End Sub

2 个答案:

答案 0 :(得分:2)

这是因为迭代的工作原理。举例说明:

  1. 假设您在第42位。此位置的对象符合删除标准。
  2. 删除该对象。
  3. 对象43现在是对象42,44是43等,一直向下,以缩小差距。
  4. 您现在转到第43位,并跳过检查旧对象43。
  5. 解决此问题的最简单方法是从集合的 end 开始使用For循环。

    For i = Slide36.Shapes.Count To 1 Step -1
    

    然后当你删除时,你完全绕过间隙闭包。

答案 1 :(得分:1)

<强>解

我只是想通过试验得出如果我创建一个变量作为ShapeRange,将其设置为Slide36.Slides.Range,然后为ShapeRange执行每个变量,它的工作原理!谢谢你的快速回复。

所以代码就像这样:

Sub course_reset()
Dim shp As Shape
Dim shprng As ShapeRange
Set shprng = Slide36.Shapes.Range
For Each shp In shprng
If Left(shp.Name, 7) = "element" Then shp.Delete
Next
End Sub