2013-10-25 100 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),並有效地「跳過」由循環。爲了避免這種情況,您必須從最後形狀開始,並以相反的順序刪除它們。