Range(“CustomTable”)。SpecialCells(xlCellTypeVisible).Delete现在失败。 运行时错误“1004”

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

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

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

我已经解决了剥离EntireRow和压制Excel的警报确认菜单上,如果我想删除整个行。 我只是问为什么突然停止工作?

我也遇到过这个问题。 我发现的工作是保存范围,删除filter,然后以相反的顺序遍历范围的区域(需要随着范围的变化而删除)。

我已经添加了“Application.Union”来照顾隐藏的列。 我刚刚发现一个隐藏的列为同一行创build多个区域的情况。 所以解决这个问题的方法是使用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 

希望这对你有用。 禁用警报并没有解决我的问题。 我所尝试的其他东西都有失败的情况。 我想你已经照顾了从感兴趣的范围中删除标题(如果有的话)。

注:我也有另一个奇怪的情况,导致范围=什么都没有。 不记得发生这种情况的原因,但我还包括在处理之前没有任何范围的检查。 我没有在这个答案中包括。

只是为了澄清:我find了一个工作,因此不寻找一个,我只是想明白为什么这条线以前工作正常,现在不工作。

如果有人在search解决scheme时绊倒了这个post,可以用下面的3行replace这个行,得到相同的结果:

  Application.DisplayAlerts = False .Range("CustomTable").SpecialCells(xlCellTypeVisible).Delete Application.DisplayAlerts = True 

PS我个人不是压制警报的大风扇,但觉得这是最理想的修复…