Vba 要复制到新图纸的高级过滤器

Vba 要复制到新图纸的高级过滤器,vba,excel,Vba,Excel,我正在尝试自动筛选列,并将所有唯一值复制/粘贴到新的工作表中。下面是我一直在使用的代码,但是在运行代码时我遇到了这个错误: 运行时错误“1004”:提取范围缺少字段名或字段名无效 Sub Filter() Application.ScreenUpdating = False Dim x As Range Dim rng As Range Dim last As Long Dim sht As String 'specify sheet name in which the data is s

我正在尝试自动筛选列,并将所有唯一值复制/粘贴到新的工作表中。下面是我一直在使用的代码,但是在运行代码时我遇到了这个错误:

运行时错误“1004”:提取范围缺少字段名或字段名无效

Sub Filter()

Application.ScreenUpdating = False

Dim x As Range
Dim rng As Range
Dim last As Long
Dim sht As String

'specify sheet name in which the data is stored
sht = "Filter This"

'change filter column in the following code
last = Sheets(sht).Cells(Rows.Count, "C").End(xlUp).Row
Set rng = Sheets(sht).Range("A1:H" & last)

Sheets(sht).Range("C1:C" & last).AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=Range("AA1"), _
Unique:=True

For Each x In Range([AA2], Cells(Rows.Count, "AA").End(xlUp))
With rng
    .AutoFilter
    .AutoFilter Field:=3, Criteria1:=x.Value
    .SpecialCells(xlCellTypeVisible).Copy

Sheets.Add(After:=Sheets(Sheets.Count)).Name = x.Value
ActiveSheet.Paste
End With
Next x

'Turn off filter
Sheets(sht).AutoFilterMode = False

With Application
    .ScreenUpdating = True
    .CutCopyMode = False
End With


End Sub

您可以使用集合筛选出唯一项,而不是使用高级筛选器

Sub UsingCollection()
    Dim cUnique As Collection, ws As Worksheet, fRng As Range
    Dim Rng As Range
    Dim Cell As Range
    Dim sh As Worksheet
    Dim vNum As Variant

    Set sh = ThisWorkbook.Sheets("Filter This")
    Set Rng = sh.Range("C2:C" & sh.Cells(sh.Rows.Count, "C").End(xlUp).Row)
    Set cUnique = New Collection

    On Error Resume Next
    For Each Cell In Rng.Cells
        cUnique.Add Cell.Value, CStr(Cell.Value)
    Next Cell
    On Error GoTo 0

    For Each vNum In cUnique
        With sh
            Set fRng = .Range("C1:H" & .Cells(.Rows.Count, "C").End(xlUp).Row)
        End With
        Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
        With ws
            .Name = vNum
            With fRng
                .AutoFilter Field:=3, Criteria1:=vNum
                fRng.Copy ws.Range("A1")
            End With
            .AutoFilterMode = False
        End With
    Next vNum

End Sub

advancedfilter希望提取范围中的标题与源数据中的标题匹配。在您的案例中,AA1应该具有与C1
Range([AA2]相同的文本,单元格(Rows.Count,“AA”).End(xlUp))
将导致错误。使用
范围(“AA2”,单元格(Rows.Count,“AA”).End(xlUp))
而不是烦扰的爸爸-要详细说明吗?抱歉,我是advancedfilter的新手。汤姆-谢谢你的意见。高级过滤器使用三个范围:数据源、条件范围和目标。它将数据源中所有符合条件的行提取到目的地中——它通过列标题计算出在何处应用条件以及在目的地中放置哪些列的方式。在您的例子中,您正在将所有行(但唯一值)从C复制到AA,但这两个范围仍然需要列标题。在您指示的地方我没有收到错误,但确实收到了@Tom指示的错误,当我如他所述更改行时,我没有收到错误。
对于范围内的每个x(范围(“AA2”)、单元格(rows.Count,“AA”)。End(xlUp))