Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Vba 在自动筛选后应用高级筛选_Vba_Excel_Filter - Fatal编程技术网

Vba 在自动筛选后应用高级筛选

Vba 在自动筛选后应用高级筛选,vba,excel,filter,Vba,Excel,Filter,我想做两次连续的过滤;第一次是关于我使用自动筛选的日期,以及我想对生成的结果进行高级筛选的日期(因为我已经或正在考虑)。 所以我首先做的是将一个范围变量设置为未过滤的范围 Set rng = Range(ws.Cells(1, 1), ws.Cells(rowNos, colNos)) 然后使用自动过滤器过滤给定日期 rng.AutoFilter Field:=1, Criteria1:=">" & lDate 由于现在一些行将被隐藏,并且我想应用高级过滤器,所以我使用了spe

我想做两次连续的过滤;第一次是关于我使用自动筛选的日期,以及我想对生成的结果进行高级筛选的日期(因为我已经或正在考虑)。 所以我首先做的是将一个范围变量设置为未过滤的范围

Set rng = Range(ws.Cells(1, 1), ws.Cells(rowNos, colNos))
然后使用自动过滤器过滤给定日期

rng.AutoFilter Field:=1, Criteria1:=">" & lDate
由于现在一些行将被隐藏,并且我想应用高级过滤器,所以我使用了specialcells

rng.SpecialCells(xlCellTypeVisible).AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=crt, CopyToRange:=thisWB.Worksheets("Sheet3").Range("A1"), _
    Unique:=False
但是,我在最后一步“该命令需要至少两行数据…”中出错。我确保至少有100行符合条件,这意味着错误不是因为缺少行


请帮我解决这个问题。此外,如果有其他方法可以完成任务,我很乐意更改代码。我试图做的是针对特定日期筛选一个表,然后再次筛选两列上的值(这通常是使用高级筛选器所做的)。

这似乎是
。AdvancedFilter
不适用于非连续范围。下面的代码有点含糊不清,但适用于我收集的一个小示例,我想返回大于2014年4月1日的观测值,其中Foo=Yes,Bar=7。我的数据表只包含一行符合所有这些条件

Option Explicit
Sub FilterTwice()

Dim DataSheet As Worksheet, TargetSheet As Worksheet, _
    ControlSheet As Worksheet, TempSheet As Worksheet
Dim DataRng As Range, ControlRng As Range, _
    TempRng As Range
Dim lDate As Date
Dim LastRow As Long, LastCol As Long

'assign sheets for easy reference
Set DataSheet = ThisWorkbook.Worksheets("Sheet1")
Set ControlSheet = ThisWorkbook.Worksheets("Sheet2")
Set TargetSheet = ThisWorkbook.Worksheets("Sheet3")

'clear any previously-set filters
Call ClearAllFilters(DataSheet)

'assign data range
LastRow = DataSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastCol = DataSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Set DataRng = Range(DataSheet.Cells(1, 1), DataSheet.Cells(LastRow, LastCol))

'assign a control (or critieria) range for the advanced filter
Set ControlRng = Range(ControlSheet.Cells(1, 1), ControlSheet.Cells(2, 2))

'apply date filter
lDate = "4/1/2014"
With DataRng
    .AutoFilter Field:=1, Criteria1:=">" & lDate
End With

'add a temporary sheet and copy the visible cells to create a continuous range
Set TempSheet = Worksheets.Add
DataRng.SpecialCells(xlCellTypeVisible).Copy
TempSheet.Range("A1").PasteSpecial Paste:=xlPasteAll

'assign temp range
LastRow = TempSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastCol = TempSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Set TempRng = Range(TempSheet.Cells(1, 1), TempSheet.Cells(LastRow, LastCol))

'apply advanced filter to temp range and get obs where foo = yes and bar = 7
With TempRng
    .AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=ControlRng, _
        CopyToRange:=TargetSheet.Range("A1"), Unique:=False
End With

'remove the temp sheet and clear filters on the data sheet
Application.DisplayAlerts = False
TempSheet.Delete
Application.DisplayAlerts = True
DataSheet.AutoFilterMode = False

End Sub

Sub ClearAllFilters(cafSheet As Worksheet)
    With cafSheet
        .AutoFilterMode = False
        If .FilterMode = True Then
            .ShowAllData
        End If
    End With
End Sub


以下两步流程是否在medwatt运行?