想知道是否有人注意到以下或类似代码的行为发生了变化:
.Range("CustomTable").SpecialCells(xlCellTypeVisible).EntireRow.Delete
我用它来删除excel 2013中ListObjects
表上的过滤范围,直到上周它工作正常;现在,如果至少需要删除两条非连续行,则会抛出错误:"Run-time error '1004': Delete method of Range class failed
。我确信不仅仅是过滤数据集中没有任何东西可见,我在调试中运行它并且肯定有多行要删除,并且它确实给出了一个正常的整行行地址,有多行要删除,但它没有。
如果我要删除整行,我已通过剥离EntireRow
并在确认菜单上禁止excel警报解决了这个问题。我只是被问到为什么它突然停止工作?
答案 0 :(得分:1)
我也遇到过这个问题。我发现工作的是保存范围,删除过滤器,然后以相反的顺序迭代范围的区域(在删除时需要更改范围)。
我已经在“Application.Union”中添加了处理隐藏列的内容。我刚刚发现了一个隐藏列的情况,为同一行创建了多个区域。因此,解决方案是使用EntireRow获取SpecialCells范围,它仍然为您提供完整行的重复区域。然后使用Application.Union,您可以将它们压缩到一个范围内的一组唯一区域。
Set delete_range = Application.Union(.Range("CustomTable").SpecialCells(xlCellTypeVisible).EntireRow, .Range("CustomTable").SpecialCells(xlCellTypeVisible).EntireRow)
.AutoFilter
Set delete_range =
For i = delete_range.Areas.Count To 1 Step -1
delete_range.Areas(i).EntireRow.Delete
Next
希望对你有用。禁用警报并没有解决我的问题。我试过的其他一切都有不起作用的角落案例。我假设你已经从感兴趣的范围中删除了标题(如果你有的话)。
注意:我还有另一个奇怪的案例,导致范围=没有。不记得发生这种情况的原因,但我还在处理之前检查了范围。我没有把这个包含在这个答案中。
答案 1 :(得分:0)
只是为了澄清:我找到了一个工作,因此没有找到一个,我只是想了解为什么这条线以前工作正常并且现在不起作用。
如果有人在搜索解决方案时遇到这个帖子,可以用以下3行替换该行,给出相同的结果:
Application.DisplayAlerts = False
.Range("CustomTable").SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
P.S。我个人不是抑制警报的忠实粉丝,但觉得这是最理想的解决方案......