VBA复制粘贴循环未正确执行

VBA复制粘贴循环未正确执行,vba,excel,Vba,Excel,我有一段VBA复制粘贴循环的代码,我已经使用了一年半,没有出现任何突然无法正确执行的问题。其目的是获取具有几个唯一值的特定列,并将这些过滤器复制粘贴到具有唯一值名称的新工作表中。现在,这里的过滤部分突然出现了一个问题——当我运行宏时,它执行时没有任何错误,但完全无法实际复制和粘贴任何内容或创建任何新工作表。发生的一件事是将唯一值复制到CO列中,但由于某些原因,后续循环无法正常工作 With Worksheets("Shee1") ' <-- you need this line, mod

我有一段VBA复制粘贴循环的代码,我已经使用了一年半,没有出现任何突然无法正确执行的问题。其目的是获取具有几个唯一值的特定列,并将这些过滤器复制粘贴到具有唯一值名称的新工作表中。现在,这里的过滤部分突然出现了一个问题——当我运行宏时,它执行时没有任何错误,但完全无法实际复制和粘贴任何内容或创建任何新工作表。发生的一件事是将唯一值复制到CO列中,但由于某些原因,后续循环无法正常工作

With Worksheets("Shee1") ' <-- you need this line,  modify to your sheet's name

    LR = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set rng = .Range("A1:CN" & LR)

    .Range("U1:U" & LR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("CO1"), Unique:=True

    For Each c In .Range(Range("CO2"), .Cells(.Rows.Count, "CO").End(xlUp))
        With rng
            .AutoFilter
            .AutoFilter Field:=21, Criteria1:=c.Value
            .SpecialCells(xlCellTypeVisible).Copy
            Sheets.Add(After:=Sheets(Sheets.Count)).Name = c.Value
            ActiveSheet.Paste
        End With
    Next c
End With
据我所知,我的代码或我使用的报告格式(每日、动态范围)没有发生意外更改,因此我真的很难理解可能会突然发生什么变化

With Worksheets("Shee1") ' <-- you need this line,  modify to your sheet's name

    LR = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set rng = .Range("A1:CN" & LR)

    .Range("U1:U" & LR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("CO1"), Unique:=True

    For Each c In .Range(Range("CO2"), .Cells(.Rows.Count, "CO").End(xlUp))
        With rng
            .AutoFilter
            .AutoFilter Field:=21, Criteria1:=c.Value
            .SpecialCells(xlCellTypeVisible).Copy
            Sheets.Add(After:=Sheets(Sheets.Count)).Name = c.Value
            ActiveSheet.Paste
        End With
    Next c
End With
具体来说,要复制的值的范围是A1:CN,行数是动态的,要筛选的唯一值的列是U。你知道为什么它不起作用吗

Dim rng as Range
Dim c As Range
Dim LR As Long

    LR = Cells(Rows.Count, "A").End(xlUp).Row
    Set rng = Range("A1:CN" & LR)

    Range("U1:U" & LR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("CO1"), Unique:=True

    For Each c In Range([CO2], Cells(Rows.Count, "CO").End(xlUp))
        With rng
            .AutoFilter
            .AutoFilter Field:=21, Criteria1:=c.Value
            .SpecialCells(xlCellTypeVisible).Copy
            Sheets.Add(After:=Sheets(Sheets.Count)).Name = c.Value
            ActiveSheet.Paste
        End With
    Next c
With Worksheets("Shee1") ' <-- you need this line,  modify to your sheet's name

    LR = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set rng = .Range("A1:CN" & LR)

    .Range("U1:U" & LR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("CO1"), Unique:=True

    For Each c In .Range(Range("CO2"), .Cells(.Rows.Count, "CO").End(xlUp))
        With rng
            .AutoFilter
            .AutoFilter Field:=21, Criteria1:=c.Value
            .SpecialCells(xlCellTypeVisible).Copy
            Sheets.Add(After:=Sheets(Sheets.Count)).Name = c.Value
            ActiveSheet.Paste
        End With
    Next c
End With

所以,在我关闭所有Excel表格并重新打开后,它就自行解决了。但现在我很好奇是否有人知道为什么会发生这种事?如果Excel内存不足,代码是否会自动截断?

您的代码依赖于
ActiveSheet
、所有对象,例如
Set rng=Range(“A1:CN”&LR)
、和
Range(“U1:U”&LR)。高级筛选操作:=xlFilterCopy,copytrange:=.Range(“CO1”),唯一:=True
未使用工作表限定

With Worksheets("Shee1") ' <-- you need this line,  modify to your sheet's name

    LR = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set rng = .Range("A1:CN" & LR)

    .Range("U1:U" & LR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("CO1"), Unique:=True

    For Each c In .Range(Range("CO2"), .Cells(.Rows.Count, "CO").End(xlUp))
        With rng
            .AutoFilter
            .AutoFilter Field:=21, Criteria1:=c.Value
            .SpecialCells(xlCellTypeVisible).Copy
            Sheets.Add(After:=Sheets(Sheets.Count)).Name = c.Value
            ActiveSheet.Paste
        End With
    Next c
End With
您需要在代码的开头添加一个带有工作表的
(“Sheet1”)
语句,然后用
限定所有嵌套对象,它应该可以正常工作

With Worksheets("Shee1") ' <-- you need this line,  modify to your sheet's name

    LR = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set rng = .Range("A1:CN" & LR)

    .Range("U1:U" & LR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("CO1"), Unique:=True

    For Each c In .Range(Range("CO2"), .Cells(.Rows.Count, "CO").End(xlUp))
        With rng
            .AutoFilter
            .AutoFilter Field:=21, Criteria1:=c.Value
            .SpecialCells(xlCellTypeVisible).Copy
            Sheets.Add(After:=Sheets(Sheets.Count)).Name = c.Value
            ActiveSheet.Paste
        End With
    Next c
End With
代码

With Worksheets("Shee1") ' <-- you need this line,  modify to your sheet's name

    LR = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set rng = .Range("A1:CN" & LR)

    .Range("U1:U" & LR).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("CO1"), Unique:=True

    For Each c In .Range(Range("CO2"), .Cells(.Rows.Count, "CO").End(xlUp))
        With rng
            .AutoFilter
            .AutoFilter Field:=21, Criteria1:=c.Value
            .SpecialCells(xlCellTypeVisible).Copy
            Sheets.Add(After:=Sheets(Sheets.Count)).Name = c.Value
            ActiveSheet.Paste
        End With
    Next c
End With

对于工作表(“Shee1”)“我认为对于初学者来说,您应该添加一个工作表引用,因为当您添加新工作表时,它将成为活动工作表,默认情况下,代码将引用该工作表。您使用的是哪个版本的Excel?我在使用Excel 2010时遇到过此类问题。仅供参考:
。不需要特殊单元格(xlCellTypeVisible)
.Copy
将只复制可见行。这不是答案,不应作为答案发布。如果您有其他信息要添加,请编辑您的问题并将其添加到那里。此空间用于一个特定用途,上面的粗体标签清楚地表明了您的答案。所以不是聊天室、讨论小组或论坛。