2017-02-22 11 views
0

У меня есть таблица, в которой один из столбцов заполнен датами. Я хочу добавить динамическую сортировку в этот список каждый раз, когда он будет открыт, поэтому я сделал макрос для запуска обновления фильтра даты на 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 - без успеха.

ответ

0

Ответ, кажется, что VBA является действительно особенно о его форматах дат.

Этот код работает, когда ни один из вопросов в вопросе не делает.

tbl.Range.AutoFilter Field:=9, _ 
    Criteria1:=">=" & CStr(Format(DateAdd("m", -6, Now()), "yyyy-mm-dd")), _ 
    Operator:=xlAnd, _ 
    Criteria2:="<=" & CStr(Format(Now(), "yyyy-mm-dd")) 

Как ближе, я могу только сделать вывод, что я получаю никаких результатов, используя ранее пытался код, потому что VBA не всегда хорошо играть с другими dateformats, но он охотно вступил строки в таблицу в любом случае. Когда я затем проверяю фильтр таблицы с помощью графического интерфейса пользователя и нажимаю Enter, Excel распознает формат даты, потому что это не так сложно, как двигатель VBA, и wham, фильтр применяется успешно.

Смежные вопросы