PowerPoint VBA循环删除表格时形状动态计数报错如何解决
VBA批量删除PPT表格报错修复方案
问题原因
你推测的动态更新形状集合计数的问题是正确的:当你正向遍历Shapes集合并删除元素时,集合会实时收缩,被删除元素后面的所有形状索引会自动减1,你提前存储的初始总数n_shapes已经大于删除后的实际集合总数,遍历到后半段时就会触发索引超出范围的报错。
修复方法
将形状的遍历逻辑改为倒序遍历,从当前页的最后一个形状往第一个形状遍历,删除已遍历过的元素不会影响还未遍历的元素索引,不会出现索引越界问题。
修复后完整代码
Sub tab_del() Dim n_shapes As Integer Dim shape_count As Integer Dim n_slides As Integer For n_slides = 1 To ActivePresentation.Slides.Count With ActivePresentation.Slides(n_slides).Shapes n_shapes = .Count ' 改动点:改为倒序遍历,步长设为-1 For shape_count = n_shapes To 1 Step -1 If .Item(shape_count).Type = msoTable Then .Item(shape_count).Delete Next shape_count End With Next n_slides End Sub
注:原代码中声明的
slide_count变量无实际使用,已在修正版本中删除。
内容的提问来源于stack exchange,提问作者credenco
相关产品推荐
相关产品推荐

