Проблема с 2 критериями автофильтра на VBA - PullRequest
0 голосов
/ 05 ноября 2019

I m trying to filter the dates in a column using autofilter, but when i must filter between two dates this error shows: "The autofilter method of the range class has failed". I m получает значения даты из двух текстовых полей в активном листе.

Я уже пытался затемнить объект listobject и сделать что-то вроде "listobject.range.autofilter", но получилта же ошибка.

Private Sub DataDe_Change()

'dim var
Dim rng As Range

'set var
Set rng = Range("B2:T2")

'if both text boxes are empty the filter clears
If DataDe.Text = "" And DataAte.Text = "" Then
    rng.AutoFilter Field:=1
End If

'if the value of this textbox isn't a date the sub won't do anything
If Not IsDate(DataDe.Text) Then GoTo subkill:

'if it is a date then it cheks if the other textbox
'contains a date and apply an one criteria filter
If Not IsDate(DataAte.Text) Then
    rng.AutoFilter Field:=1, _
            Criteria1:=">=" & Format(DataDe.Text, "dd/mm/yyyy")
End If

'if both are dates apply a two criteria filter
'and only in this condition the error pops up
If IsDate(DataAte.Text) Then
    rng.AutoFilter Field:=1, _
            Criteria1:=">=" & Format(DataDe.Text, "dd/mm/yyyy"), _
            Operator:=x1And, _
            Criteria2:="<=" & Format(DataAte.Text, "dd/mm/yyyy")
End If


subkill:

End Sub

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Я наконец нашел проблему. Этот код был написан не мной полностью, я помогаю другу в выполнении этой задачи, и когда он отправил его мне, я не написал свой собственный код. Дело в том, что в выбранном шрифте для редактора vba «1» и «l» действительно похожи, лол. Оператор "xland" был записан как "x1and". Мне потребовалось всего 10 дней, чтобы заметить это :) Спасибо за помощь!

0 голосов
/ 09 ноября 2019

Вот как я пытался воссоздать проблему

Private Sub TextBox2_Change()

    Dim rng As Range

    Set rng = Range("A1:B1")

    If Me.TextBox2.Text = "" And Me.TextBox1.Text = "" Then
        rng.AutoFilter 1
    End If

    If Not IsDate(Me.TextBox2.Text) Then GoTo subkill

    If Not IsDate(Me.TextBox1.Text) Then
        rng.AutoFilter 1, ">=" & Format(Me.TextBox1.Text, "m/d/yyyy")
    End If

    If IsDate(Me.TextBox2.Text) Then
        rng.AutoFilter 1, ">=" & Format(Me.TextBox1.Text, "m/d/yyyy"), xlAnd, "<=" & Format(Me.TextBox2.Text, "m/d/yyyy")
    End If

subkill:

End Sub

filtered listobject

Когда я переместил свой диапазон на B1: C6 и изменил код наSet rng = Range("B1:C1") это все еще работает. Обычно эта ошибка означает, что вы фильтруете столбец, который не входит в ваш диапазон, но я не вижу этого здесь.

Я читал в другом месте, что даты должны быть в формате США дляавтофильтр. Если это правда, попробуйте изменить формат даты. Но если вы попробовали 01.01.2009 в обоих полях, это будет одинаковая действительная дата в обоих форматах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...