Страницы: 1
RSS
Макрос для снятия фильтра
 
Добрый день.
Вопрос копеечный для тех, кто понимает. В архиве даже была такая тема, но там нет ответа на мой вопрос.
Через рекордер макросов записал простейший макрос на снятие фильтров через кнопку Данные-Очистить.
Завел макрос на кнопку. Макрос работает, если включены фильтры. Нет вопросов. А вот если нажать кнопку, когда фильтров нет - он выдает ошибку вот в этой (и единственной :) ) строке макроса

- ActiveSheet.ShowAllData

Я так понимаю, что нужно добавить что то, чтобы при нажатии на кнопку при отсутствии фильтров, он просто вхолостую щелкал и все. Но я в этом ни бум-бум. Помогите пожалуйста.
 
Если требуется "Отобразить все" не зависимо от того, применен автофильтр или нет, то можно так:
Код
On Error Resume Next: ActiveSheet.ShowAllData: On Error GoTo 0
Если же требуется вообще удалить автофильтр с листа, то так:
Код
ActiveSheet.AutoFilterMode = False
Чем шире угол зрения, тем он тупее.
 
"Если требуется "Отобразить все" не зависимо от того, применен автофильтр или нет, то можно так:"

Да, Вы меня правильно поняли. Вставил в макрос - не работает :(. Выдает ту же ошибку в той же строке
 
Прошу прощения - это я балбес. Нужно было разнести по разным строкам :)
Спасибо, заработало!
 
Код
ActiveSheet.AutoFilterMode = False

Этот код должен работать, сам проверял в работе, а выложите пример файла.  
 
Цитата
SAS888 написал: On Error Resume Next: ActiveSheet.ShowAllData: On Error GoTo 0
Или так: If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Но если строки скрыты вручную или фильтром т.н. "умной" таблицы, то нужно уже так: Cells.Rows.Hidden = False
 
Цитата
DopplerEffect написал:
Этот код должен работать, сам проверял в работе, а выложите пример файла.  
Все работает, я просто невнимательно сделал первый раз.
 
Всем привет!
Столкнулся почти с аналогичной задачей, так, что не стал создавать отдельную тему, суть следующая есть несколько умных таблиц размещённых на одном листе, нужно снять все фильтры со всех разом, данный код работает:
Код
Cells.Rows.Hidden = False
, но после снятия всех фильтров в заголовках остаются кнопки, вроде как фильтр не снят, но на само деле снят, как можно исправить
 
Код
Sub Button1_Click()
     With ActiveSheet
        For Each lo In .ListObjects
            lo.AutoFilter.ShowAllData
        Next
     End With
End Sub
 
skais675, спасибо, я нашёл вот такой код, http://qaru.site/questions/228230/removing-filters-for-each-table-in-a-workbook-vba/1202718#1202718:
Код
Sub ResetFilters()
    Dim ws                    As Worksheet
    Dim wb                    As Workbook
    Dim listObj               As ListObject

    For Each ws In ActiveWorkbook.Worksheets
        For Each listObj In ws.ListObjects
            If listObj.ShowHeaders Then
                listObj.AutoFilter.ShowAllData
                listObj.Sort.SortFields.Clear
            End If
        Next listObj
    Next ws
End Sub
Ваш код, то же работает, но в чём разница?
 
Хорошая справка по работе с фильтрами
Цитата
adamm: несколько умных таблиц размещённых на одном листе
очень плохая идея
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
В дополнении темы - полное удаление фильтров
Код
Sub RemoveFilters()
    For Each lo In ActiveSheet.ListObjects
        If lo.ShowAutoFilter Then lo.ShowAutoFilter = False
    Next lo
End Sub
 
Цитата
Jack Famous написал:
очень плохая идея
Ситуация так требует, данные таблицы являются промежуточным звеном, выгружаются они из PQ, а к ним привязаны формулы
Хотя вопрос не в этом, решение есть спасибо skais675,
 
Вам нужно удалить фильтры, или сбросить?
Если сбросить, то
Код
Sub RemoveFilters()
    For Each lo In ActiveSheet.ListObjects
        lo.ShowAutoFilter = False
        lo.ShowAutoFilter = True
    Next lo
End Sub
 
я пользуюсь таким кодом, если нужно сбросить фильтры на одном листе или несколько (нужно добавить кнопку)


Private Sub CommandButton1_Click()

  Dim ws As Worksheet
   
   For Each ws In ThisWorkbook.Worksheets
   On Error Resume Next
   If ws.AutoFilterMode Then
       ws.AutoFilterMode = False
   End If
   Next ws
   
End Sub
 
geniux, Вы видели, как код выглядит у других?
Страницы: 1
Наверх