Vba excel отключить автофильтр
Доброго всем времени суток. Собственно вопрос в названии. Возникла необходимость разом снять фильтр со всех( а их 21 лист) листов книги. Попробовал накропать что то самостоятельно, но не хочет работать по всем листам: только на активном.Вопрос: что не так сделал?
[vba]
Sub Макрос1()
Dim SO As Long, SO1 As Long, sh As Worksheet
SO = Cells(15, Columns.Count).End(xlToLeft).Column
SO1 = Cells(Rows.Count, 2).End(xlUp).Row
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "План" And sh.Name <> "литье" Then
With sh
ActiveSheet.Range(Cells(17, 1), Cells(SO1, SO)).AutoFilter Field:=2
End With
End If
Next sh
Доброго всем времени суток. Собственно вопрос в названии. Возникла необходимость разом снять фильтр со всех( а их 21 лист) листов книги. Попробовал накропать что то самостоятельно, но не хочет работать по всем листам: только на активном.Вопрос: что не так сделал?
[vba]
Sub Макрос1()
Dim SO As Long, SO1 As Long, sh As Worksheet
SO = Cells(15, Columns.Count).End(xlToLeft).Column
SO1 = Cells(Rows.Count, 2).End(xlUp).Row
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "План" And sh.Name <> "литье" Then
With sh
ActiveSheet.Range(Cells(17, 1), Cells(SO1, SO)).AutoFilter Field:=2
End With
End If
Next sh
Sub Макрос1()
Dim SO As Long, SO1 As Long, sh As Worksheet
SO = Cells(15, Columns.Count).End(xlToLeft).Column
SO1 = Cells(Rows.Count, 2).End(xlUp).Row
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "План" And sh.Name <> "литье" Then
With sh
ActiveSheet.Range(Cells(17, 1), Cells(SO1, SO)).AutoFilter Field:=2
End With
End If
Next sh
Sub Макрос1()
Dim SO As Long, SO1 As Long, sh As Worksheet
SO = Cells(15, Columns.Count).End(xlToLeft).Column
SO1 = Cells(Rows.Count, 2).End(xlUp).Row
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "План" And sh.Name <> "литье" Then
With sh
sh.Activate
ActiveSheet.Range(Cells(17, 1), Cells(SO1, SO)).AutoFilter Field:=2
End With
End If
Next sh
Sub Макрос1()
Dim SO As Long, SO1 As Long, sh As Worksheet
SO = Cells(15, Columns.Count).End(xlToLeft).Column
SO1 = Cells(Rows.Count, 2).End(xlUp).Row
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "План" And sh.Name <> "литье" Then
With sh
sh.Activate
ActiveSheet.Range(Cells(17, 1), Cells(SO1, SO)).AutoFilter Field:=2
End With
End If
Next sh
Sub Макрос1()
Dim SO As Long, SO1 As Long, sh As Worksheet
SO = Cells(15, Columns.Count).End(xlToLeft).Column
SO1 = Cells(Rows.Count, 2).End(xlUp).Row
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "План" And sh.Name <> "литье" Then
With sh
sh.Activate
ActiveSheet.Range(Cells(17, 1), Cells(SO1, SO)).AutoFilter Field:=2
End With
End If
Next sh
Sub dd()
Dim sh As Worksheet
On Error Resume Next
For Each sh In ActiveWorkbook.Sheets
Set fR = sh.AutoFilter.Range
fR.AutoFilter Field:=2
Next
End Sub
Sub dd()
Dim sh As Worksheet
On Error Resume Next
For Each sh In ActiveWorkbook.Sheets
Set fR = sh.AutoFilter.Range
fR.AutoFilter Field:=2
Next
End Sub
Sub dd()
Dim sh As Worksheet
On Error Resume Next
For Each sh In ActiveWorkbook.Sheets
Set fR = sh.AutoFilter.Range
fR.AutoFilter Field:=2
Next
End Sub
Sub Reset_All_Sheets_Filters() ' сброс всех фильтров на всех листах активной книги
Dim actShName$: actShName = ActiveSheet.Name
Dim actCelAdr$: actCelAdr = ActiveCell.Address
Application.ScreenUpdating = False
Dim wsSh As Worksheet
On Error Resume Next
For Each wsSh In Sheets
If wsSh.AutoFilterMode Then wsSh.ShowAllData
Next
Application.ScreenUpdating = True
Sheets(actShName).Activate: Range(actCelAdr).Activate
End Sub
Sub Reset_All_Sheets_Filters() ' сброс всех фильтров на всех листах активной книги
Dim actShName$: actShName = ActiveSheet.Name
Dim actCelAdr$: actCelAdr = ActiveCell.Address
Application.ScreenUpdating = False
Dim wsSh As Worksheet
On Error Resume Next
For Each wsSh In Sheets
If wsSh.AutoFilterMode Then wsSh.ShowAllData
Next
Application.ScreenUpdating = True
Sheets(actShName).Activate: Range(actCelAdr).Activate
End Sub
Sub Reset_All_Sheets_Filters() ' сброс всех фильтров на всех листах активной книги
Dim actShName$: actShName = ActiveSheet.Name
Dim actCelAdr$: actCelAdr = ActiveCell.Address
Application.ScreenUpdating = False
Dim wsSh As Worksheet
On Error Resume Next
For Each wsSh In Sheets
If wsSh.AutoFilterMode Then wsSh.ShowAllData
Next
Application.ScreenUpdating = True
Sheets(actShName).Activate: Range(actCelAdr).Activate
End Sub
выражение: выражение, возвращающее объект Range.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Field | Необязательный | Variant | Целочисленное смещение поля, на основе которого требуется создать фильтр (слева от списка; крайнее левое поле — значение 1). |
Criteria1 | Необязательный | Variant | Условия (строка, например "101"). Используйте "=" для поиска пустых полей, "<>" для поиска непустых полей и "> |
Возвращаемое значение
Примечания
Если опустить все аргументы, этот метод просто переключает отображение стрелок раскрывающихся списков автофильтров в указанном диапазоне.
В Excel для Mac этот метод не поддерживается. Поддерживаются аналогичные методы для Selection и ListObject.
В отличие от формул, во вложенных полях не требуется использовать квадратные скобки для добавления пробелов.
Пример
В этом примере выполняется фильтрация списка, начинающегося в ячейке A1 на листе "Лист1", чтобы отображались только те записи, в которых первое поле содержит строку "Otis". Стрелка раскрывающегося списка для поля 1 будет скрыта.
В этом примере выполняется фильтрация списка, начинающегося с ячейки A1 на листе "Лист1", для отображения только тех записей, в которых значения первого поля содержат вложенное поле Admin Division 1 (State/province/other) со значением "Washington".
В этом примере выполняется фильтрация таблицы "Таблица1" на листе "Лист1" для отображения только тех записей, в которых значения первого поля соответствуют отображаемому значению: 1, 3, Seattle или Redmond.
Типы данных могут применять несколько фильтров вложенных полей. В этом примере выполняется фильтрация таблицы "Таблица1" на листе "Лист1" для отображения только тех записей, в которых значения первого поля содержат вложенное поле Time zone(s) со значением "Pacific Time Zone", а вложенное поле Date Founded содержит значение 1851 или "(No Data)".
В этом примере выполняется фильтрация таблицы "Таблица1" на листе "Лист1" для отображения первых 10 записей для первого поля на основе вложенного поля Population.
В этом примере выполняется фильтрация таблицы "Таблица1" на листе "Лист1" для отображения всех записей января и февраля 2019 г. для поля 1. При этом не требуется наличие строки, содержащей 31 января.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Доброго дня!
Подскажите, как можно в 1 макрос и установку и снятие автофильтра сделать? чет не допру никак.
пример сделал.
[moder]Вы бы описали свою хотелку полностью. Зачем и почему Вам это?
Доброго дня!
Подскажите, как можно в 1 макрос и установку и снятие автофильтра сделать? чет не допру никак.
пример сделал.
[moder]Вы бы описали свою хотелку полностью. Зачем и почему Вам это? lFJl
Sub фил2()
If [b2].Value = 1 Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter 'Field:=1
[b2].Value = 0
Else 'If [b2].Value = 0 Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1, Criteria1:= _
RGB(255, 255, 0), Operator:=xlFilterCellColor
[b2].Value = 1
End If
End Sub
Sub фил2()
If [b2].Value = 1 Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter 'Field:=1
[b2].Value = 0
Else 'If [b2].Value = 0 Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1, Criteria1:= _
RGB(255, 255, 0), Operator:=xlFilterCellColor
[b2].Value = 1
End If
End Sub
Sub фил2()
If [b2].Value = 1 Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter 'Field:=1
[b2].Value = 0
Else 'If [b2].Value = 0 Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1, Criteria1:= _
RGB(255, 255, 0), Operator:=xlFilterCellColor
[b2].Value = 1
End If
End Sub
Сделать как в примере, только без использования ячейки
Сделать как в примере, только без использования ячейки
Сделать как в примере, только без использования ячейки
Да, только без использования ячейки :)
[moder]Да, вот теперь все сразу стало понятно. Автор - lFJl
Дата добавления - 19.02.2016 в 13:24
Sub tt()
If ActiveSheet.ListObjects("Таблица1").AutoFilter.FilterMode Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1
Else
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1, Criteria1:= _
RGB(255, 255, 0), Operator:=xlFilterCellColor
End If
End Sub
Sub tt()
If ActiveSheet.ListObjects("Таблица1").AutoFilter.FilterMode Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1
Else
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1, Criteria1:= _
RGB(255, 255, 0), Operator:=xlFilterCellColor
End If
End Sub
Sub tt()
If ActiveSheet.ListObjects("Таблица1").AutoFilter.FilterMode Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1
Else
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1, Criteria1:= _
RGB(255, 255, 0), Operator:=xlFilterCellColor
End If
End Sub
Sub фильтер()
If ActiveSheet.FilterMode = True Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1
Exit Sub
End If
If ActiveSheet.FilterMode = False Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1, Criteria1:= _
RGB(255, 255, 0), Operator:=xlFilterCellColor
Exit Sub
End If
End Sub
[/vba]
Тут фишка в свойстве FilterMode :
Свойство FilterMode. Допустимые значения: True (если на рабочем листе имеются отфильтрованные данные со скрытыми строками), False (в противном случае)
Вот еще полезное:
Свойство AutoFilterMode. Допустимые значения: True (если на рабочем листе выведены раскрывающиеся списки метода AutoFilter), False (в противном случае).
Вот здесь, ясно расписано.
Sub фильтер()
If ActiveSheet.FilterMode = True Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1
Exit Sub
End If
If ActiveSheet.FilterMode = False Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1, Criteria1:= _
RGB(255, 255, 0), Operator:=xlFilterCellColor
Exit Sub
End If
End Sub
[/vba]
Тут фишка в свойстве FilterMode :
Свойство FilterMode. Допустимые значения: True (если на рабочем листе имеются отфильтрованные данные со скрытыми строками), False (в противном случае)
Вот еще полезное:
Свойство AutoFilterMode. Допустимые значения: True (если на рабочем листе выведены раскрывающиеся списки метода AutoFilter), False (в противном случае).
Вот здесь, ясно расписано. al-Ex
Sub фильтер()
If ActiveSheet.FilterMode = True Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1
Exit Sub
End If
If ActiveSheet.FilterMode = False Then
ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1, Criteria1:= _
RGB(255, 255, 0), Operator:=xlFilterCellColor
Exit Sub
End If
End Sub
[/vba]
Тут фишка в свойстве FilterMode :
Свойство FilterMode. Допустимые значения: True (если на рабочем листе имеются отфильтрованные данные со скрытыми строками), False (в противном случае)
Вот еще полезное:
Свойство AutoFilterMode. Допустимые значения: True (если на рабочем листе выведены раскрывающиеся списки метода AutoFilter), False (в противном случае).
Вот здесь, ясно расписано. Автор - al-Ex
Дата добавления - 19.02.2016 в 16:17
Многие функции Excel также доступны для использования в VBA - и Автофильтр метод - одна из таких функций.
Если у вас есть набор данных, и вы хотите отфильтровать его по критерию, вы можете легко сделать это с помощью параметра «Фильтр» на ленте «Данные».
А если вам нужна более продвинутая версия, в Excel также есть расширенный фильтр.
Тогда зачем даже использовать автофильтр в VBA?
Если вам просто нужно отфильтровать данные и выполнить некоторые базовые действия, я бы рекомендовал придерживаться встроенных функций фильтра, которые предлагает интерфейс Excel.
Вам следует использовать VBA Autofilter, если вы хотите фильтровать данные как часть вашей автоматизации (или если это помогает вам сэкономить время, ускоряя фильтрацию данных).
Например, предположим, что вы хотите быстро отфильтровать данные на основе раскрывающегося списка, а затем скопировать эти отфильтрованные данные на новый рабочий лист.
Хотя это можно сделать с помощью встроенных функций фильтра вместе с копипастом, это может занять много времени, чтобы сделать это вручную.
В таком сценарии использование VBA Autofilter может ускорить работу и сэкономить время.
Примечание: Я расскажу об этом примере (о фильтрации данных на основе раскрывающегося списка и копировании на новый лист) позже в этом руководстве.
Синтаксис автофильтра Excel VBA
- Выражение: Это диапазон, к которому вы хотите применить автоматический фильтр.
- Поле: [Необязательный аргумент] Это номер столбца, который вы хотите отфильтровать. Это считается слева в наборе данных. Поэтому, если вы хотите отфильтровать данные на основе второго столбца, это значение будет 2.
- Критерии1: [Необязательный аргумент] Это критерии, на основе которых вы хотите отфильтровать набор данных.
- Оператор: [Необязательный аргумент] Если вы также используете критерий 2, вы можете объединить эти два критерия на основе Оператора. Для использования доступны следующие операторы: xlAnd, xlOr, xlBottom10Items, xlTop10Items, xlBottom10Percent, xlTop10Percent, xlFilterCellColor, xlFilterDynamic, xlFilterFontColor, xlFilterIcon, xlFilterValues
- Критерии2: [Необязательный аргумент] Это второй критерий, по которому вы можете фильтровать набор данных.
- VisibleDropDown: [Необязательный аргумент] Вы можете указать, хотите ли вы, чтобы раскрывающийся значок фильтра отображался в отфильтрованных столбцах или нет. Этот аргумент может иметь значение ИСТИНА или ЛОЖЬ.
Все остальные аргументы, кроме Expression, необязательны.
Если вы не используете какой-либо аргумент, он просто применяет или удаляет значки фильтра к столбцам.
Приведенный выше код просто применит метод автофильтра к столбцам (или, если он уже применен, удалит его).
Это просто означает, что если вы не видите значки фильтра в заголовках столбцов, вы начнете видеть его, когда будет выполнен приведенный выше код, и если вы его увидите, он будет удален.
Если у вас есть отфильтрованные данные, он удалит фильтры и покажет вам полный набор данных.
Теперь давайте посмотрим на несколько примеров использования Excel VBA Autofilter, которые прояснят его использование.
Пример: фильтрация данных на основе текстового условия
Предположим, у вас есть набор данных, показанный ниже, и вы хотите отфильтровать его на основе столбца «Элемент».
В приведенном ниже коде будут отфильтрованы все строки, в которых элементом является «Принтер».
Приведенный выше код относится к Sheet1, а внутри него - к A1 (которая является ячейкой в наборе данных).
Обратите внимание, что здесь мы использовали Field: = 2, поскольку столбец элемента - это второй столбец в нашем наборе данных слева.
Теперь, если вы думаете - зачем мне это делать с помощью кода VBA. Это легко сделать с помощью встроенного фильтра.
Если это все, что вы хотите сделать, лучше использовать встроенную функцию фильтра.
Но когда вы прочитаете оставшееся руководство, вы увидите, что его можно объединить с некоторым дополнительным кодом для создания мощной автоматизации.
Но прежде чем я покажу вам это, позвольте мне сначала рассмотреть несколько примеров, чтобы показать вам, на что способны все методы автофильтра.
кликните сюда чтобы загрузить файл с примером и следовать за ним.
Пример: несколько критериев (И / ИЛИ) в одном столбце
Предположим, у меня есть тот же набор данных, и на этот раз я хочу отфильтровать все записи, в которых элементом является «Принтер» или «Проектор».
Следующий код сделает это:
Обратите внимание, что здесь я использовал XLOR оператор.
Это указывает VBA использовать оба критерия и фильтровать данные, если выполняется какой-либо из двух критериев.
Точно так же вы также можете использовать критерий И.
Например, если вы хотите отфильтровать все записи, в которых количество больше 10, но меньше 20, вы можете использовать следующий код:
Пример: несколько критериев с разными столбцами
Предположим, у вас есть следующий набор данных.
С помощью автофильтра вы можете фильтровать несколько столбцов одновременно.
Например, если вы хотите отфильтровать все записи, где элемент - «Принтер», а торговый представитель - «Отметка», вы можете использовать следующий код:
Пример: отфильтровать 10 лучших записей с помощью метода автофильтрации
Предположим, у вас есть следующий набор данных.
Ниже приведен код, который предоставит вам 10 лучших записей (на основе столбца количества):
В приведенном выше коде я использовал ActiveSheet. Вы можете использовать имя листа, если хотите.
Обратите внимание, что в этом примере, если вы хотите получить 5 лучших элементов, просто измените число в Criteria1: = ”10 ″ с 10 до 5.
Итак, для топ-5 элементов код будет следующим:
Это может выглядеть странно, но независимо от того, сколько топовых элементов вы хотите, значение Operator всегда остается xlTop10Items.
Точно так же приведенный ниже код даст вам 10 нижних элементов:
А если вам нужны 5 нижних элементов, измените число в Criteria1: = ”10 ″ с 10 до 5.
Пример: отфильтруйте 10 процентов лучших с помощью метода автофильтрации
Предположим, у вас есть тот же набор данных (который использовался в предыдущих примерах).
Ниже приведен код, который предоставит вам первые 10 процентов записей (в зависимости от столбца количества):
В нашем наборе данных, поскольку у нас есть 20 записей, он вернет 2 верхние записи (что составляет 10% от общего числа записей).
Пример: использование подстановочных знаков в автофильтре
Предположим, у вас есть набор данных, как показано ниже:
Если вы хотите отфильтровать все строки, в названии которых есть слово «Доска», вы можете использовать следующий код:
В приведенном выше коде я использовал подстановочный знак * (звездочку) до и после слова «Доска» (которое является критерием).
Звездочка может представлять любое количество символов. Таким образом, это отфильтрует любой элемент, в котором есть слово «доска».
Пример: копирование отфильтрованных строк на новый лист
Если вы хотите не только фильтровать записи на основе критериев, но и копировать отфильтрованные строки, вы можете использовать следующий макрос.
Он копирует отфильтрованные строки, добавляет новый лист, а затем вставляет эти скопированные строки в новый лист.
Приведенный выше код проверяет, есть ли отфильтрованные строки в Sheet1 или нет.
И если есть отфильтрованные строки, он скопирует их, вставит новый рабочий лист и вставит эти строки на этот только что вставленный рабочий лист.
Пример: фильтрация данных на основе значения ячейки
Используя автофильтр в VBA вместе с раскрывающимся списком, вы можете создать функцию, в которой, как только вы выберете элемент из раскрывающегося списка, все записи для этого элемента будут отфильтрованы.
Что-то вроде того, что показано ниже:
кликните сюда чтобы загрузить файл с примером и следовать за ним.
Этот тип конструкции может быть полезен, когда вы хотите быстро отфильтровать данные, а затем использовать их в дальнейшей работе.
Ниже приведен код, который это сделает:
Это код события рабочего листа, который выполняется только тогда, когда на листе есть изменение, а целевая ячейка - B2 (где у нас есть раскрывающийся список).
Кроме того, условие If Then Else используется для проверки, выбрал ли пользователь «Все» в раскрывающемся списке. Если выбрано «Все», отображается весь набор данных.
Этот код НЕ помещается в модуль.
Вместо этого его нужно поместить в серверную часть рабочего листа, на котором есть эти данные.
Вот шаги, чтобы поместить этот код в окно кода рабочего листа:
- Откройте редактор VB (сочетание клавиш - ALT + F11).
- На панели Project Explorer дважды щелкните имя рабочего листа, в котором вы хотите использовать эту функцию фильтрации.
- В окне кода рабочего листа скопируйте и вставьте приведенный выше код.
- Закройте редактор VB.
Теперь, когда вы используете раскрывающийся список, он автоматически фильтрует данные.
Это код события рабочего листа, который выполняется только тогда, когда на листе есть изменение, а целевая ячейка - B2 (где у нас есть раскрывающийся список).
Кроме того, условие If Then Else используется для проверки, выбрал ли пользователь «Все» в раскрывающемся списке. Если выбрано «Все», отображается весь набор данных.
Включение и выключение автофильтра Excel с помощью VBA
При применении автофильтра к диапазону ячеек некоторые фильтры могут уже быть на месте.
Вы можете использовать приведенный ниже код, чтобы отключить любые предварительно примененные автоматические фильтры:
Этот код проверяет все листы и удаляет все примененные фильтры.
Если вы не хотите отключать фильтры для всего листа, а только для определенного набора данных, используйте следующий код:
Приведенный выше код проверяет, установлены ли уже фильтры или нет.
Если фильтры уже применены, он их удаляет, иначе ничего не делает.
Точно так же, если вы хотите включить автофильтр, используйте следующий код:
Убедитесь, что автофильтр уже применен
Если у вас есть лист с несколькими наборами данных, и вы хотите убедиться, что вы знаете, что фильтры уже не установлены, вы можете использовать приведенный ниже код.
Показать все данные
Если у вас есть фильтры, примененные к набору данных, и вы хотите показать все данные, используйте приведенный ниже код:
Приведенный выше код проверяет, имеет ли FilterMode значение TRUE или FALSE.
Если это правда, это означает, что был применен фильтр и он использует метод ShowAllData для отображения всех данных.
Обратите внимание, что это не удаляет фильтры. Значки фильтров по-прежнему доступны для использования.
Использование автофильтра на защищенных листах
По умолчанию, когда вы защищаете лист, фильтры не работают.
Если у вас уже есть фильтры, вы можете включить автофильтр, чтобы убедиться, что он работает даже на защищенных листах.
Для этого отметьте опцию Использовать автофильтр при защите листа.
Хотя это работает, когда у вас уже есть фильтры, если вы попытаетесь добавить автофильтры с помощью кода VBA, это не сработает.
Поскольку лист защищен, он не позволит запускать какие-либо макросы и вносить изменения в автофильтр.
Поэтому вам нужно использовать код, чтобы защитить рабочий лист и убедиться, что в нем включены автоматические фильтры.
Это может быть полезно, когда вы создали динамический фильтр (то, что я рассмотрел в примере - «Фильтровать данные на основе значения ячейки»).
Ниже приведен код, который защитит лист, но в то же время позволит вам использовать в нем фильтры, а также макросы VBA.
Этот код необходимо поместить в окно кода ThisWorkbook.
Вот шаги, чтобы поместить код в окно кода ThisWorkbook:
Как только вы откроете книгу и включите макросы, он автоматически запустит макрос и защитит Sheet1.
Однако перед этим он укажет EnableAutoFilter = True, что означает, что фильтры будут работать и на защищенном листе.
Кроме того, он устанавливает для аргумента UserInterfaceOnly значение True. Это означает, что пока рабочий лист защищен, код макроса VBA будет продолжать работать.
Вам также могут понравиться следующие руководства по VBA:
Автофильтры можно включить или выключить с помощью кода VBA.
Отключите автофильтр на активном листе в VBA
В следующем примере кода автофильтр отключается на активном листе, сначала проверяя, что он еще не отключен.
12345 | Public Sub KillFilter ()Если ActiveSheet.AutoFilterMode, тоActiveSheet.AutoFilterMode = FalseКонец, еслиКонец подписки |
Включите автофильтр на активном листе в VBA
В следующем примере кода включается автофильтр на активном листе, сначала проверяя, что он еще не включен.
12345 | Общедоступный подпункт StartFilter ()Если не ActiveSheet.AutoFilterMode, тоActiveSheet.Range ("A1"). АвтофильтрКонец, еслиКонец подписки |
Отключите автофильтр на всех листах в VBA.
В следующем примере кода выполняется цикл по каждому листу во всей книге и отключается автофильтр на каждом листе, сначала проверяя, что фильтр в текущей книге еще не включен.
12345678 | Публичная подпрограмма StopAllFilters ()Dim ws как рабочий листДля каждой страницы в ActiveWorkbook.WorksheetsЕсли ws.AutoFilterMode = True, тоws.AutoFilterMode = FalseКонец, еслиСледующий wsКонец подписки |
Отключите автофильтр на всех листах в VBA.
Точно так же в следующем примере кода выполняется цикл по всей книге и включается автофильтр на каждом листе, сначала проверяя, что фильтр в текущей книге еще не включен.
12345678 | Публичная подпрограмма StartAllFilters ()Dim ws как рабочий листДля каждой страницы в ActiveWorkbook.WorksheetsЕсли не ws.AutoFilterMode, тоws.Range ("A1"). АвтофильтрКонец, еслиСледующий wsКонец подписки |
Очистить все фильтры на активном листе в VBA
В следующем примере кода автофильтр остается включенным на активном листе, но очищаются все фильтры, примененные к данным.
12345 | Public Sub ClearFilter ()Если ActiveSheet.FilterMode = True, тоActiveSheet.ShowAllDataКонец, еслиКонец подписки |
Очистить все фильтры на всех листах в VBA
Точно так же в следующем примере кода выполняется цикл по всей книге и оставляет включенным автофильтр на каждом листе, если он уже включен, но очищает любой фильтр, примененный к данным.
12345678 | Публичная подпрограмма ClearAllFilters ()Dim ws как рабочий листДля каждой страницы в ActiveWorkbook.WorksheetsЕсли ws.FilterMode = True, тоws.ShowAllDataКонец, еслиСледующий wsКонец подписки |
Очистить все фильтры в таблице в VBA
Если наш рабочий лист содержит объект таблицы, мы можем настроить код, чтобы просто очистить любой фильтр, примененный к этому фильтру, оставив автофильтр включенным.
123456789 | Подложка ClearFilterFromTable ()Dim ws как рабочий листDim sTable As StringDim loTable как ListObjectsTable = "Таблица1"Установить ws = ActiveSheetУстановите loTable = ws.ListObjects (sTable)loTable.AutoFilter.ShowAllDataКонец подписки |
Если объект таблицы будет связан со сводной таблицей, то сводная таблица обновится соответствующим образом.
Читайте также: