【发布时间】:2014-05-11 21:29:28
【问题描述】:
我正在与一位朋友一起处理一个电子表格,我们将对其应用多个过滤器。
第一个过滤器跨越列 M 和 U:
Sub TokenNotActivated()
'Col H = Laptop - Main
'Col H = Desktop
'Col M = Yes
'Col U = provisioned
ThisWorkbook.Sheets(2).Activate
ActiveSheet.Range("A2:Z2").Select
Selection.AutoFilter Field:=8, Criteria1:="Desktop", Operator:=xlOr, Criteria1:="Laptop - Main"
Selection.AutoFilter Field:=13, Criteria1:="Yes"
Selection.AutoFilter Field:=21, Criteria1:="provisioned", Operator:=xlFilterValues
End Sub
第二个过滤器作用于 F 列,过滤在那里找到的每个唯一值
例如
将作为 John、Sarah、Frank 的过滤器返回。此外,如果在运行第一组过滤器后没有为其中任何一个找到行,则跳过它。负责此的代码如下:
Sub GetPrimaryContacts()
Dim Col As New Collection
Dim itm
Dim i As Long
Dim CellVell As Variant
'Get last row value
LastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
'Loop between all rows to get unique values
For i = 3 To LastRow
CellVal = Sheets("Master").Range("F" & i).Value
On Error Resume Next
Col.Add CellVal, Chr(34) & CellVal & Chr(34)
On Error GoTo 0
Next i
' Create workbooks - Token Not activated
Call TokenNotActivated
For Each itm In Col
ActiveSheet.Range("A2:Z2").Select
Selection.AutoFilter Field:=6, Criteria1:=itm
Call TokenNotActivatedProcess
Next
ActiveSheet.AutoFilter.ShowAllData
End Sub
我要做的第三件事是为应用第二个过滤器后显示的每个结果创建一个保存在 C:\Working\ 中的新电子表格。看到一旦应用了第二个过滤器,电子表格会以某种方式“重置”并允许新的过滤过程(参见上面的代码)。我一直在玩,以确保我得到正确的数据。通过打印到立即窗口,一切都是正确的。执行此操作的代码如下:
' Run the process to get the workbook saved
Function TokenNotActivatedProcess()
Dim r As Range, n As Long, itm, FirstRow As Long
n = Cells(Rows.Count, 1).End(xlUp).Row
Set r = Range("A1:A" & n).Cells.SpecialCells(xlCellTypeVisible)
FirstRow = ActiveSheet.Range("F2").End(xlDown).Row
itm = ActiveSheet.Range("F" & FirstRow).Value
If r.Count - 2 > 0 Then Debug.Print itm & " - " & r.Count - 2
End Function
我现在的问题是 - 如何从第 3 行到最后一行选择 A、B、C、D、E、Z 列(在应用两个过滤器之后),然后在每次迭代时将其保存到外部 Excel 电子表格过滤过程?我只对在“立即”窗口中产生值的输出感兴趣(即在哪里可以看到可见的单元格)。理想情况下,我希望它们采用以下格式:
TokenNotActivated - Sarah - 110514.xlsx
TokenNotActivated - John - 110514.xlsx
TokenNotActivated - Jack - 110514.xlsx
【问题讨论】:
-
你的朋友是@methuselah吗?