Excel VBA Удаление фильтра из автофильтра фактически удаляет все записи

#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. Я хотел иметь возможность фильтровать по тому, что было помещено в ячейку (это проверенный выпадающий список), а затем удалить фильтр, выбрав опцию «все»