我需要按日期过滤列。我确定所需的日期数,然后应用过滤器。最初我认为只有2例,星期二到星期五,你使用的是上一个日期。周一需要周五,周六和周日。
然后我意识到星期五或星期一可能会有假期,这需要更多的约会......而且可能会有一个周中的假期,比如感恩节。然后我想出了这个,以涵盖4种最常见的可能性:
dPosting = dLast + 1 'dLast is the last Date used in the filter
Select Case Date - dLast
Case 2: 'Regular T - F (1 day)
shFF.Range("A1", shFF.Cells(lMax, lCol)).AutoFilter Field:=cFind.Column, Operator:=xlFilterValues, Criteria1:=Array(2, dPosting)
Case 3: 'Midweek Holiday (2 days)
shFF.Range("A1", shFF.Cells(lMax, lCol)).AutoFilter Field:=cFind.Column, Operator:=xlFilterValues, Criteria1:=Array(2, dPosting, 2, dPosting + 1)
Case 4: 'Regular Monday (3 days)
shFF.Range("A1", shFF.Cells(lMax, lCol)).AutoFilter Field:=cFind.Column, Operator:=xlFilterValues, Criteria1:=Array(2, dPosting, 2, dPosting + 1, 2, dPosting + 2)
Case 5: 'After F or M Holiday (4 days)
shFF.Range("A1", shFF.Cells(lMax, lCol)).AutoFilter Field:=cFind.Column, Operator:=xlFilterValues, Criteria1:=Array(2, dPosting, 2, dPosting + 1, 2, dPosting + 2, 2, dPosting + 3)
Case Else: 'Other
MsgBox "Too many days since last run. Please contact me", vbCritical, "Out of Scope"
End Select
然后我想,如果运行这个的人出去休假一周...并投入Case Else
。
现在我认为最简单,最干净的方法是简单地确定从上次运行dLast
和现在的日期所需的日期数。把它放到数组中并将其用作标准......但我无法弄清楚语法。
检查了这些,但仍然无法使其正常工作:
这是我使用语法和数据表的测试代码:
Sub Test()
Dim i As Integer
Dim d As Date
Dim sArr(0 To 2) As String
d = #4/25/2016#
For i = 0 To 2
sArr(i) = "2, """ & d + i & """"
Next i
ActiveSheet.Range("$A$1:$R$16643").AutoFilter Field:=17, Operator:=xlFilterValues, Criteria1:=sArr
End Sub
宏录制器使用3个日期来解决这个问题:
ActiveSheet.Range("$A$1:$R$16643").AutoFilter Field:=17, Operator:=xlFilterValues, _
Criteria2:=Array(2, "4/25/2016", 2, "4/26/2016", 2, "4/27/2016")
我错过了什么?
答案 0 :(得分:1)
你可以使用这样的东西,并使用Date - dLast而不是选择来计算日期,dt1和dt2,然后尝试
.AutoFilter Field:=2, Criteria1:= ">=" & dt1, Operator:=xlAnd, Criteria2:="<=" & dt2