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