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

'Integer out of range' error while deleting hidden slides

我正在使用以下代码删除我的 .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 超出了它的范围。

有人可以解释一下吗?

Next i为运行时是否取ActivePresentation.Slides.Count的新值?

谢谢。

问题是一些幻灯片被删除后,末尾的一些索引不再可用,但您的循环仍然试图访问它们(因为上限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