#excel #vba
#excel #vba
Вопрос:
У меня возникла проблема, пытаясь заставить это работать. У меня фильтр работает правильно, но я не могу заставить его удалить фильтр и показать все записи.
Что происходит, так это то, что он удаляет все флажки из фильтра вместо того, чтобы выбирать их все, тем самым оставляя меня с пустой таблицей.
Я попробовал несколько вариантов ниже, а также просто перейдя:
Sheets("live_list").Range("main_list").AutoFilter Field:=8
Основной код в том виде, в котором он находится в данный момент.
Private Sub Worksheet_Change(ByVal Target As Range)
If "D2" <> "All" Then
Sheets("live_list").Range("main_list").AutoFilter Field:=8, Criteria1:=Cells(2, 4).Value
Else
Sheets("live_list").ListObjects("main_list").AutoFilter.ShowAllData
End If
End Sub
Комментарии:
1.
"D2" <> "All"
не делает того, что вы думаете, что это кстати. Это сравнение строкиD2
со строкойAll
."D2" <> "All"
всегда будетTrue
.2. Измените
Sheets("live_list").ListObjects("main_list").AutoFilter.ShowAllData
наSheets("live_list").ShowAllData
3. @BigBen Бинго, это была проблема, я понятия не имею, что я делал.
Ответ №1:
Был глуп и не объявлял ячейку должным образом.
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(2, 4).Value <> "All" Then
Sheets("live_list").Range("main_list").AutoFilter Field:=8, Criteria1:=Cells(2, 4).Value
Else
Sheets("live_list").ListObjects("main_list").AutoFilter.ShowAllData
End If
End Sub
Ответ №2:
Попробуйте вместо этого этот код:
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheets("live_list")
If Not .FilterMode = True Then
.Range("main_list").AutoFilter Field:=8, Criteria1:=Cells(2, 4).Value
Else
.AutoFilter.ShowAllData
End If
End With
End Sub
Это должно работать нормально.
Комментарии:
1. Я хотел иметь возможность фильтровать по тому, что было помещено в ячейку (это проверенный выпадающий список), а затем удалить фильтр, выбрав опцию «все»