Range("CustomTable").SpecialCells(xlCellTypeVisible).Delete 现在失败了。 运行-时间错误'1004'
Range("CustomTable").SpecialCells(xlCellTypeVisible).Delete now fails. Run-time error '1004'
想知道是否有人注意到以下或类似代码的行为发生了变化:
.Range("CustomTable").SpecialCells(xlCellTypeVisible).EntireRow.Delete
我在 excel 2013 年的 ListObjects
table 上使用它删除过滤的 运行ge,直到大约上周它工作正常;现在,如果至少有两个非连续行需要删除,它会抛出一个错误:"Run-time error '1004': Delete method of Range class failed
。我确信这不仅仅是在过滤数据集中没有任何可见的情况,我在调试中 运行 它肯定有多行要删除,它确实给出了一个正常的整行地址多行删除,但失败了。
如果我想删除整行,我已经通过删除 EntireRow
并抑制确认菜单上的 excel 警报来解决它。我只是想知道为什么它突然停止工作了?
澄清一下:我已经找到了一个解决方法,因此不是在寻找一个,我只是想了解为什么这条线以前工作正常而现在不工作。
万一有人在搜索解决方案时无意中遇到这个 post 可以用以下 3 行替换该行,得到相同的结果:
Application.DisplayAlerts = False
.Range("CustomTable").SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
P.S。我个人不太喜欢抑制警报,但感觉这是最佳解决方案...
我也遇到过这个问题。我发现有效的方法是保存范围,删除过滤器,然后以相反的顺序遍历范围的区域(删除时范围会发生变化)。
我已在 "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
希望对你有用。禁用警报没有解决我的问题。我尝试过的所有其他方法都有无效的极端情况。我假设您已经考虑到从感兴趣的范围中删除 header(如果您有的话)。
注意:我还有另一个奇怪的情况导致范围 = 无。不记得发生这种情况的原因,但我还在处理之前对范围进行了检查。我没有在这个答案中包含它。
想知道是否有人注意到以下或类似代码的行为发生了变化:
.Range("CustomTable").SpecialCells(xlCellTypeVisible).EntireRow.Delete
我在 excel 2013 年的 ListObjects
table 上使用它删除过滤的 运行ge,直到大约上周它工作正常;现在,如果至少有两个非连续行需要删除,它会抛出一个错误:"Run-time error '1004': Delete method of Range class failed
。我确信这不仅仅是在过滤数据集中没有任何可见的情况,我在调试中 运行 它肯定有多行要删除,它确实给出了一个正常的整行地址多行删除,但失败了。
如果我想删除整行,我已经通过删除 EntireRow
并抑制确认菜单上的 excel 警报来解决它。我只是想知道为什么它突然停止工作了?
澄清一下:我已经找到了一个解决方法,因此不是在寻找一个,我只是想了解为什么这条线以前工作正常而现在不工作。
万一有人在搜索解决方案时无意中遇到这个 post 可以用以下 3 行替换该行,得到相同的结果:
Application.DisplayAlerts = False
.Range("CustomTable").SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
P.S。我个人不太喜欢抑制警报,但感觉这是最佳解决方案...
我也遇到过这个问题。我发现有效的方法是保存范围,删除过滤器,然后以相反的顺序遍历范围的区域(删除时范围会发生变化)。
我已在 "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
希望对你有用。禁用警报没有解决我的问题。我尝试过的所有其他方法都有无效的极端情况。我假设您已经考虑到从感兴趣的范围中删除 header(如果您有的话)。
注意:我还有另一个奇怪的情况导致范围 = 无。不记得发生这种情况的原因,但我还在处理之前对范围进行了检查。我没有在这个答案中包含它。