Фильтр Excel скрывает результат с помощью критериев фильтра VBA

#excel #vba #filter #autofilter

Вопрос:

Я применяю фильтр дат с помощью VBA к таблице Excel, но результат не отображается.

     Public Dte As Date
Dte = "31/12/2020"
With Sheets("Temptable").ListObjects("Temp").Range
    .AutoFilter Field:=2, Criteria1:=package
    .AutoFilter Field:=4, Criteria1:="<" amp; Dte
End With
 

поле 2 работает, но не поле 4: оно скрывает ячейки, как будто в них нет значения. Затем я перехожу к фильтру excel и нажимаю «фильтр даты» -> «До» ->> Dte есть ->>> Я нажимаю enter, и он применяет фильтр.
Почему это не применяется автоматически ?

Ответ №1:

Попробуйте написать это, как показано ниже, вы пропускаете кавычки вокруг пакета, поэтому я считаю, что VBA пытается фильтровать на основе переменной «пакет», которая не была создана. Использование Option Explicit может привести к ошибкам такого типа в будущем, так как оно заставляет вас определять любую переменную, которую вы вызываете. Однако без всего вашего кода я полагаю, что все, что находится во втором столбце вашей таблицы, содержит текст «пакет» и что это не была переменная, которую вы использовали в другом месте.

     Public Dte As Date
Dte = "31/12/2020"
With Sheets("Temptable").ListObjects("Temp").Range
    .AutoFilter Field:=2, Criteria1:="package"
    .AutoFilter Field:=4, Criteria1:="<" amp; Dte
End With
 

Комментарии:

1. Отлично! Ты сделал это, я пытался разобраться в этом. Ошибка заключалась в том, чтобы скрыть себя 😛 @Mark S.

2. Классно! Сначала я был сосредоточен на дате, но заметил, что она применяется правильно, поэтому, когда я проверил, что такое другой фильтр, я увидел, что он пустой, и сразу понял, что происходит. Надеюсь, ОП примет этот ответ, но я не уверен на 100%, что именно так работали их базовые данные. Я воссоздал только то, что мог себе представить из объяснения.

Ответ №2:

Спасибо за весь ответ. На самом деле пакет уже является переменной, которая задана в коде, о котором я не упоминал, и она фильтрует правильные строковые данные.

К сожалению, ваше решение не решает проблему. даже с учетом приведенного ниже :

         Public Dte As Date
Dte = "31/12/2020"
With Sheets("Temptable").ListObjects("Temp").Range
    .AutoFilter Field:=4, Criteria1:="<" amp; Dte
End With