Как добавить еще один фильтр в мой код VBA? - PullRequest
0 голосов
/ 01 мая 2019

Я создал код в VBA, который фильтрует мои данные перед передачей, но я бы хотел добавить дополнительный фильтр.

Как мне поступить?

Я пытался просто добавить строку под Критерием 1 с новыми значениями, но это не работает.

 With Wb1.Sheets(12)
            If .AutoFilterMode Then .AutoFilterMode = False
            .Range("$A$1:$AM" & .Cells(.Rows.Count, "A").End(xlUp).Row).AutoFilter Field:=19, _
     Criteria1:="Test,Test"
            Set rngToCopy = .AutoFilter.Range
        End With
        rngToCopy.Copy
        wb2.Sheets(2).Range("$A1").PasteSpecial xlValues
    End If
    ThisWorkbook.RefreshAll

По какой-то причине все еще возникают проблемы, вот весь код.Когда я выполняю, я не получаю сообщение об ошибке, но ничего не копируется.


Sub CopyData()
    On Error GoTo ErrorHandle


    Application.ScreenUpdating = False


    Dim Wb1 As Workbook, wb2 As Workbook, wB As Workbook
    Dim rngToCopy As Range


    For Each wB In Application.Workbooks
        If Left(wB.Name, 21) = "Test_Test Test" Then
            Set Wb1 = wB
            Exit For
        End If
    Next


    If Not Wb1 Is Nothing Then '<~~ check if you actually found the needed workbook
        Set wb2 = ThisWorkbook
 With Wb1.Sheets(12).Range("$A$1:$AM" & Cells(Rows.Count, "A").End(xlUp).Row)
        If AutoFilterMode Then .AutoFilterMode = False
        .AutoFilter Field:=19, Criteria1:="Test,Test"
        .AutoFilter Field:=38, Criteria1:="Employee"
        'do stuff
        Set rngToCopy = .AutoFilter.Range
   End With
   rngToCopy.Copy
        wb2.Sheets(2).Range("$A1").PasteSpecial xlValues
    End If
    ThisWorkbook.RefreshAll

1 Ответ

0 голосов
/ 02 мая 2019

Чтобы отфильтровать диапазон для нескольких критериев в одном столбце, используйте Or ...

With Wb1.Sheets(12).Range("$A$1:$AM" & Cells(Rows.Count, "A").End(xlUp).Row)
    .AutoFilter Field:=19, Criteria1:="Test,Test", Operator:=xlOr, Criteria2:="No"
    'Do stuff
End With

Чтобы отфильтровать более 2 критериев в столбце, вы должны использовать массив ...

Criteria1:=Array("Test,Test", "No", "Yes") 

Чтобы отфильтровать диапазон для нескольких критериев в разных столбцах (необходимо задать два поля) ...

    With Wb1.Sheets(12).Range("$A$1:$AM" & Cells(Rows.Count, "A").End(xlUp).Row)
        If AutoFilterMode Then .AutoFilterMode = False
        .AutoFilter Field:=19, Criteria1:="Test,Test"
        .AutoFilter Field:=38, Criteria1:="Employee"
        'do stuff
   End With
...