Мне нужно отфильтровать столбец по датам. Я определяю количество необходимых дат, а затем применяю фильтр. Первоначально я полагал, что было только 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
и сейчас. Поместите это в массив и используйте его как критерии... но я не могу понять синтаксис.
Проверил это, но все еще не могу заставить его работать:
- Критерии автофильтра с использованием массива (ошибка) - слишком большая строка?
- Как выполнить автофильтрацию с использованием массива критериев
- Как передать критерии из массива строк в автофильтр. VBA Excel
Это мой тестовый код для игры с синтаксисом и таблицей данных:
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")
Что мне не хватает??