范围(" CustomTable")。SpecialCells(xlCellTypeVisible).Delete现在失败。运行时错误' 1004'

时间:2015-11-30 16:34:02

标签: excel vba excel-vba excel-2013

想知道是否有人注意到以下或类似代码的行为发生了变化:

.Range("CustomTable").SpecialCells(xlCellTypeVisible).EntireRow.Delete

我用它来删除excel 2013中ListObjects表上的过滤范围,直到上周它工作正常;现在,如果至少需要删除两条非连续行,则会抛出错误:"Run-time error '1004': Delete method of Range class failed。我确信不仅仅是过滤数据集中没有任何东西可见,我在调试中运行它并且肯定有多行要删除,并且它确实给出了一个正常的整行行地址,有多行要删除,但它没有。

如果我要删除整行,我已通过剥离EntireRow并在确认菜单上禁止excel警报解决了这个问题。我只是被问到为什么它突然停止工作?

2 个答案:

答案 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。我个人不是抑制警报的忠实粉丝,但觉得这是最理想的解决方案......