4

我正在使用以下 VBA 宏来删除 PowerPoint 幻灯片中的所有图片:

Public Function delete_slide_object(slide_no)
     ' Reference existing instance of PowerPoint
    Set PPApp = GetObject(, "Powerpoint.Application")
     ' Reference active presentation
    Set PPPres = PPApp.ActivePresentation
     ' Delete object in slide
    Set PPSlide = PPPres.Slides(slide_no)
    For Each PPShape In PPSlide.Shapes
        If PPShape.Type = msoPicture Then
            PPShape.Delete
        End If
    Next PPShape

    Set PPShape = Nothing
    Set PPSlide = Nothing
    Set PPPres = Nothing
End Function

此代码正在删除部分但不是全部图片。运行此代码 3 次后,所有图片都将被删除。我哪里错了?请告诉我

4

1 回答 1

4

从集合中删除项目时,您必须使用不同的迭代。

尝试这个:

Dim p as Long
For p = PPSlide.Shapes.Count to 1 Step -1
    Set PPShape = PPSlide.Shapes(p)
    If PPShape.Type = msoPicture Then PPShape.Delete
Next

这是因为在删除项目时会重新索引集合,因此如果您删除,则删除Shapes(2)后之前的内容Shapes(3)会变为Shapes(2)有效,并且会被循环有效地“跳过”。为避免这种情况,您必须从最后一个形状开始,并以相反的顺序删除它们。

于 2013-10-25T13:47:09.907 回答