#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