2013-10-25 10 views
2

Я использую следующие VBA макросов, чтобы удалить все изображения в PowerPoint слайд:Удаление изображений в 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) после удаления, и фактически «пропускается» по петле. Чтобы этого избежать, вы должны начать с последней формы и удалить их в обратном порядке.

Смежные вопросы