Ошибка «Целое число вне диапазона» при удалении скрытых слайдов - PullRequest
1 голос
/ 26 октября 2019

Я использую следующий код для удаления всех скрытых слайдов в моей презентации .pptm. В нем 254 слайда.

For i = 1 To ActivePresentation.Slides.Count
    If ActivePresentation.Slides(i).SlideShowTransition.Hidden = True Then
        ActivePresentation.Slides(i).Delete
    End If
Next i

Однако я получаю сообщение об ошибке, что одно целое число находится в диапазоне от 1 до 154, а значение 155 выходит за пределы диапазона.

Может кто-нибудь объяснить, пожалуйста?

Принимается ли новое значение ActivePresentation.Slides.Count при запуске Next i?

Спасибо.

1 Ответ

4 голосов
/ 26 октября 2019

Проблема в том, что после удаления некоторых слайдов некоторые индексы в конце становятся недоступными, но ваш цикл все равно пытается получить к ним доступ (поскольку верхняя граница цикла for не 't change).

Чтобы обойти эту проблему, запустите цикл в обратном порядке:

For i = ActivePresentation.Slides.Count To 1 Step -1
    If ActivePresentation.Slides(i).SlideShowTransition.Hidden = True Then
        ActivePresentation.Slides(i).Delete
    End If
Next i

В качестве альтернативы вы можете использовать цикл Do...While, например:

Dim i As Long: i = 1
Do While i <= ActivePresentation.Slides.Count
    If ActivePresentation.Slides(i).SlideShowTransition.Hidden = True Then
        ActivePresentation.Slides(i).Delete
    Else
        i = i + 1
    End If
Loop
...