首页 > 解决方案 > 对于每个形状宏不会在 PowerPoint VBA 中一次删除所有形状

问题描述

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

有人能帮我吗?这是宏:

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

标签: vbapowerpoint

解决方案


其根本原因在于迭代的工作方式。为了显示:

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

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

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

然后,当您删除时,您完全绕过了间隙闭合。


推荐阅读