2013-10-25 62 views
2

我使用下面的VBA宏删除在PowerPoint幻灯片中的所有图片:删除照片使用VBA宏

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 

此代码删除一些但不是所有的pictures.After运行此代码3次,所有图片被删除。我哪里错了?请让我知道

+0

他们有没有机会尝试答案呢? –

+0

嘿,你好!刚刚尝试了代码。完美工作!非常感谢! :) – user2862496

回答

2

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

试试这个:

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),并有效地“跳过”由循环。为了避免这种情况,您必须从最后形状开始,并以相反的顺序删除它们。