У меня есть таблица, в которой один из столбцов заполнен датами. Я хочу добавить динамическую сортировку в этот список каждый раз, когда он будет открыт, поэтому я сделал макрос для запуска обновления фильтра даты на Workbook_Open
.Таблица может быть отфильтрована по дате из графического интерфейса пользователя, но не VBA
Проблема заключается в том, что фильтр не показывает результатов при вводе через VBA, даже если я вручную проверил в графическом интерфейсе, что код ввел правильные даты. Более того, если я просто нажимаю Enter
после проверки дат в графическом интерфейсе (то есть, не меняя ничего), вдруг фильтр работает.
Вот код, строки с комментариями - это вещи, которые я пробовал. Последняя строка является EXACT код макро-рекордер дал мне, когда я записал GUI-процесс (ручной процесс отображения желаемых результатов, а код он не делает):
Sub FixSortings
tbl.Sort.SortFields.Clear
tbl.Sort.SortFields.Add Key:=Range("Tabell2[[#All],[Ref dato]]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With tbl.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
tbl.ShowAutoFilter = False
'tbl.Range.AutoFilter Field:=9, Criteria1:=">=" & CStr(Format(DateAdd("m", -6, Now()), "dd.mm.yy")), Operator:=xlAnd, Criteria2:="<=" & CStr(Format(Now(), "dd.mm.yy"))
'tbl.Range.AutoFilter Field:=9, Criteria1:=">=" & CStr(Format(DateAdd("m", -6, Now()), "mm.dd.yy")), Operator:=xlAnd, Criteria2:="<=" & CStr(Format(Now(), "mm.dd.yy"))
'tbl.Range.AutoFilter Field:=9, Criteria1:=">=22.08.2016", Operator:=xlAnd, Criteria2:="<=22.02.2017"
ActiveSheet.ListObjects("Tabell2").Range.AutoFilter Field:=9, Criteria1:=">=22.08.2016", Operator:=xlAnd, Criteria2:="<=22.02.2017"
End Sub
tbl
декларация является правильным, и я знаю это потому, что сортировка добавляется как следует .. и фильтры также добавляются каким-то образом (поскольку я могу найти введенные даты, когда я проверяю таблицу с помощью раскрывающихся кнопок в графическом интерфейсе), это просто кажется, что, пока критерии для фильтра добавлены, он не выполняется ... или что-то в этом роде.
У меня есть идея, что это может быть связано с локализацией форматов даты. Вы можете видеть в моем коде, что я использую европейский формат даты (dd.mm.yy), и у меня ранее были проблемы с datestamps в VBA, потому что кажется, что VBA предпочитает формат даты в США.
Однако, как вы можете также видеть в моем коде, я попытался применить формат mm.dd.yy - без успеха.