Проблема в том, что после удаления некоторых слайдов некоторые индексы в конце становятся недоступными, но ваш цикл все равно пытается получить к ним доступ (поскольку верхняя граница цикла 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