我正在使用以下代码删除.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
的新值?
谢谢。
答案 0 :(得分:4)
问题在于删除了某些幻灯片后,某些索引 不再可用,但您的循环仍在尝试访问它们(因为for循环的上限没有不变)。
要解决此问题,请反向运行循环:
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