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



所以我在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

造成这种情况的根本原因是迭代的工作方式。 举例说明:

  1. 假设你处于第 42 位。 此位置的对象符合删除条件。
  2. 删除对象。
  3. 对象 43
  4. 现在是对象 42,对象 44 是对象 43,依此类推,一直向下,以缩小差距。
  5. 您现在移动到位置 43,并且跳过了检查旧对象 43。

解决此问题的最简单方法是使用从集合末尾开始的 For 循环。

For i = Slide36.Shapes.Count To 1 Step -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

最新更新