我正在使用以下代码删除.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
的新值?
谢谢。
问题是,在删除某些幻灯片之后,某些索引末尾不再可用,但是循环无论如何都试图访问它们(因为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