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

标签 vba excel excel-2013

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

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

我用它来删除 Excel 2013 中 ListObjects 表上的过滤范围,直到大约上周它都工作正常;现在,如果需要删除至少两行非连续行,则会抛出错误:“运行时错误'1004':Range类的删除方法失败。我确信不仅仅是过滤数据集中没有任何内容可见的情况,我在调试中运行它,它肯定有多行要删除,并且它确实给出了一个正常的整行地址,有多行要删除,但它失败了。

如果我想删除整行,我已经通过删除EntireRow并抑制确认菜单上的Excel警报来解决这个问题。我只是问为什么它突然停止工作?

最佳答案

我也遇到过这个问题。我发现有效的方法是保存范围,删除过滤器,然后以相反的顺序迭代范围的区域(因为删除时范围会发生变化,这是必需的)。

我添加了“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

希望这对您有用。禁用警报并没有解决我的问题。我尝试的其他所有方法都有不起作用的极端情况。我假设您已经考虑从感兴趣的范围中删除标题(如果有的话)。

注意:我还有另一个奇怪的情况,导致范围=无。不记得发生这种情况的原因,但我还在处理之前检查了范围内的任何内容。我没有将其包含在这个答案中。

关于vba - 范围 ("CustomTable").SpecialCells(xlCellTypeVisible).Delete 现在失败。运行时错误 '1004',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34003403/

相关文章:

vba - 从范围中删除重复项而不删除数据

excel - 条件格式增加颜色

excel - 有没有一种简单的方法可以更改 Excel VBA 中的单元格引用?

vba - 如何格式化从特定行到下的 Excel 列

c# - 在 C# 中读取 excel 2003(.xls)

python - 在 Excel 中访问数据 - 来自 python 的路透社

vba - 创建临时 Excel 图表

excel - 索引匹配匹配查询 Excel 2013

excel - 根据条件循环和复制范围

vba - 连续循环刷新公式