'Integer out of range'删除隐藏的幻灯片时出错

问题描述 投票:0回答:1

我正在使用以下代码删除.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的新值?

谢谢。

vba powerpoint powerpoint-vba
1个回答
3
投票

问题是,在删除某些幻灯片之后,某些索引末尾不再可用,但是循环无论如何都试图访问它们(因为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
© www.soinside.com 2019 - 2024. All rights reserved.