【问题标题】:How do i add another filter to my VBA Code?如何向我的 VBA 代码添加另一个过滤器?
【发布时间】:2019-09-20 07:11:27
【问题描述】:

我在 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

【问题讨论】:

  • 其他过滤条件是什么?在什么领域? (即您是否过滤同一列?)
  • 参数略有不同但概念相同。它将是 Field: =38 和 Criteria2:="Employee"。我只是不确定语法。
  • 我更新了答案;当我将您的 with 语句结合起来以包含范围时,我未能从 .Cells(.Rows 中删除 .,这是 copy_paste 的危险
  • 感谢您的帮助,但仍有一些地方不太合适。我没有收到错误,但是当我运行宏时没有任何反应。我已经更新了问题以包含我的整个代码。有任何想法吗?谢谢。

标签: excel vba filtering autofilter


【解决方案1】:

要在单个列中过滤多个条件的范围,请使用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

【讨论】:

  • 由于某种原因,当我尝试此方法时,我得到“无效或不合格的参考”。
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 2017-11-22
  • 2018-02-15
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
相关资源
最近更新 更多