Кажется, что у пользователя есть выбор из трех текстовых значений в I7 или J7.Вполне вероятно, что эти две ячейки содержат списки проверки данных или что-то подобное, так как не очень удобно, чтобы они вводили значения вручную каждый раз, когда включается или выключается операция фильтрации.
Я был вдохновленпо вашему выбору имен листа и пошел с методом .AutoFilter.Я предположил, что это все в личном кодовом листе рабочих таблиц («Отфильтрованные данные») и что ваши параметры I7: J7 не находятся на другом рабочем листе.
Хотя, безусловно, можно изменить оба I7и J7 в одной операции, такой как вставка, я сократил операцию только до одной фильтрации столбцов за раз.Кажется, это отражает то, что я получил из вашего исходного кода.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'Exit Sub
If Not Intersect(Target, Range("I7:J7")) Is Nothing Then
On Error GoTo meh
Application.EnableEvents = False
Dim t As Range
Set t = Intersect(Target, Range("I7:J7")).Cells(1)
With Intersect(Columns(t.Column), Cells(7, t.Column).Resize(99999, 1), Me.UsedRange)
If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
If LCase(t.Value2) = "filter" Then
.AutoFilter Field:=1, Criteria1:="<>0", Criteria2:="<>", _
Operator:=xlAnd, VisibleDropDown:=False
End If
End With
Range("J7").Offset(0, Int(t.Column = Range("J7").Column)) = "'-- Select --"
End If
meh:
Application.EnableEvents = True
End Sub