Excel 如何在筛选运行时错误1004后删除可见行
尝试创建一个宏,在该宏中,我根据一列复制一份工作表,并删除不等于当前循环值的内容 我的数据可能在原始工作表的表格中,也可能不在表格中。我需要复制原始工作表,然后删除,以维护我在原始工作表中创建的列组Excel 如何在筛选运行时错误1004后删除可见行,excel,vba,Excel,Vba,尝试创建一个宏,在该宏中,我根据一列复制一份工作表,并删除不等于当前循环值的内容 我的数据可能在原始工作表的表格中,也可能不在表格中。我需要复制原始工作表,然后删除,以维护我在原始工作表中创建的列组 Sub FilterCopy() Dim cl As Range Dim Ws As Worksheet Set Ws = ActiveSheet If Ws.FilterMode Then Ws.ShowAllData With CreateObject(
Sub FilterCopy()
Dim cl As Range
Dim Ws As Worksheet
Set Ws = ActiveSheet
If Ws.FilterMode Then Ws.ShowAllData
With CreateObject("scripting.dictionary")
For Each cl In Ws.Range("A2", Ws.Range("A" & Rows.Count).End(xlUp))
If Not .exists(cl.Value) Then
.Add cl.Value, Nothing
Ws.Copy
Range("A1").AutoFilter 1, "<>" & cl.Value
'The code below gives me the error
ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlVisible).EntireRow.Delete
Range("A1").AutoFilter
Range("A1").AutoFilter
ActiveWorkbook.SaveAs "U:\Test\" & cl.Value & ".xlsx", 51
ActiveWorkbook.Close False
End If
Next cl
End With
End Sub
子过滤器副本()
Dim cl As范围
将Ws设置为工作表
设置Ws=ActiveSheet
如果为Ws.FilterMode,则为Ws.ShowAllData
使用CreateObject(“scripting.dictionary”)
对于Ws.Range(“A2”、Ws.Range(“A”和Rows.Count).End(xlUp))中的每个cl
如果不存在(cl.Value),则
.添加cl.值,无任何内容
Ws.Copy
范围(“A1”)。自动筛选1“”&cl.值
'下面的代码告诉我错误
ActiveSheet.AutoFilter.Range.Offset(1).特殊单元格(xlVisible).EntireRow.Delete
范围(“A1”)。自动过滤器
范围(“A1”)。自动过滤器
ActiveWorkbook.SaveAs“U:\Test\”和cl.Value&“.xlsx”,51
ActiveWorkbook.Close为False
如果结束
下一个cl
以
端接头
运行时错误“1004”:
范围类的删除方法失败
您的问题似乎是由于尝试删除的行不连续造成的。事实上,Excel VBA在处理不接触并形成不同区域的范围时会遇到困难 要解决此问题,您可以按如下方式一次处理一个区域的范围:
Dim MyRange As Range
Set MyRange = <Your Range Specification>
For i = MyRange.Areas.Count To 1 Step -1
MyRange.Areas(i).EntireRow.Delete
Next i
请注意,在制作工作表副本后立即包含此内容非常重要,以确保
ActiveSheet
引用的是正确的工作表。您的问题似乎是由于尝试删除的行不连续造成的。事实上,Excel VBA在处理不接触并形成不同区域的范围时会遇到困难
要解决此问题,您可以按如下方式一次处理一个区域的范围:
Dim MyRange As Range
Set MyRange = <Your Range Specification>
For i = MyRange.Areas.Count To 1 Step -1
MyRange.Areas(i).EntireRow.Delete
Next i
请注意,在制作工作表副本后立即包含此信息非常重要,以确保
ActiveSheet
引用的是正确的工作表。当数据在表中时,是否会出现错误?当数据不在表中时,还是两者都在表中?如果是表,则为“删除范围类的方法失败”当它不是一个表时,它仍然是运行时错误1004,但它说“不能在重叠的部分上使用该命令”。我认为我给出的答案应该解决这两种情况,但让我知道它是否只在一种情况下有效。当数据在表中时,你会得到错误吗?当它是一个表时,它是“范围类的删除方法失败”当它不是一个表时,它仍然是运行时错误1004,但它说“不能在重叠的部分上使用该命令”。我认为我给出的答案应该解决这两种情况,但请告诉我它是否仅在一种情况下有效。