Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何在筛选运行时错误1004后删除可见行_Excel_Vba - Fatal编程技术网

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,但它说“不能在重叠的部分上使用该命令”。我认为我给出的答案应该解决这两种情况,但请告诉我它是否仅在一种情况下有效。