Как автоматически обновить автофильтр Excel при изменении данных?
Вариант использования: я изменяю значение одной ячейки на значение, которое было отфильтровано. Я хочу, чтобы текущая строка исчезла без необходимости делать что-либо еще.
microsoft-excel
Сорин
источник
источник
Ответы:
Обмен кода с этим, похоже, тоже помогает (по крайней мере, в Excel 2010):
источник
Я обнаружил, что когда я работал с таблицами, это не сработало. Фильтр был не на листе, а на столе. этот код добился цели
Я нашел информацию здесь: http://www.jkp-ads.com/articles/Excel2007TablesVBA.asp
источник
Щелкните правой кнопкой мыши по имени вашего листа, выберите «Просмотр кода» и вставьте код ниже. После вставки щелкните значок Excel под «Файл» в левом верхнем углу или введите Alt-F11, чтобы вернуться к представлению электронной таблицы.
Это включит автообновление. Не забудьте сохранить файл в формате с поддержкой макросов lie
.xlsm
.источник
Я также использую VBA / Macro, основанный на
Worksheet_Change
событии, но мой подход немного отличается ... Хорошо, сначала код, а затем объяснения:(Используйте комбинацию клавиш Alt+, F11чтобы появилась панель разработки, и вставьте код на лист, содержащий фильтр, который вы хотите автоматически обновить.)
В моем примере я предполагаю иметь простой фильтр для одного столбца (в моем случае L), и что мой диапазон данных находится в строках от 1 (даже если он может содержать заголовок) до 126 (выберите число, достаточно большое, чтобы конечно). Операция проста: когда что-то меняется на моем листе, фильтр в указанном диапазоне снова удаляется / повторно применяется, чтобы его обновить. Здесь нужно немного пояснений: поле и критерии .
Поле представляет собой целое смещение диапазона. В моем случае у меня только фильтр с одним столбцом, а диапазон создается одним столбцом (L), который является первым в диапазоне (поэтому я использую 1 в качестве значения).
Критерии является строкой , которая описывает фильтр для применения в диапазоне данных. В моем примере я хочу показать только те строки, где столбец L отличается от 0 (поэтому я использовал «<> 0»).
Это все. Дополнительные сведения о методе Range.AutoFilter см. По адресу : https://msdn.microsoft.com/en-us/library/office/ff193884.aspx.
источник
Просто чтобы закрепить ответ (ы):
Сорин говорит:
Щелкните правой кнопкой мыши по имени вашего листа, выберите «Просмотр кода» и вставьте код ниже. После вставки щелкните значок Excel под «Файл» в левом верхнем углу или введите Alt-F11, чтобы вернуться к представлению электронной таблицы.
Это включит автообновление. Не забудьте сохранить файл в формате с поддержкой макросов lie .xlsm.
И Крис использовал этот код (который я только что сделал в 2010 году):
Если вы не расширите сообщение, вы увидите только длинный ответ! ;)
источник
Извините, недостаточно комментариев для комментирования. (Администраторы, не стесняйтесь разрезать это на комментарий выше.) Пользовательский ответ "danicotra" начинается с "Я использую VBA / Macro, основанный также на событии Worksheet_Change, но мой подход ..." с
"первым удаленным фильтром
", затем применяю его снова
является правильным решением при использовании Excel 2007+. Однако .AutoFilter.ApplyFilter недопустим в XL03 и более ранних версиях, поэтому я покажу путь ниже.
Я прошу настоящих экспертов и гуру прочесть код, потому что я уверен, что это материал высшего качества. Возможно, необъяснимый подсчет понижения в этом ответе может быть обращен вспять, когда люди увидят, что хорошо сделано ниже.
Даникотра использовал упрощенный пример. На самом деле, вы можете сделать это более широко. Предположим, с ActiveSheet для следующего (или некоторого другого объекта листа):
Сохранить диапазон автофильтра. Он содержит столбцы .AutoFilter.Filters.Count и строки (.AutoFilter.Range.Count / .AutoFilter.Filters.Count), сохраненные в rngAutofilter.
Соберите в массив myAutofilters каждое из 4 свойств каждого из элементов автофильтра .AutoFilter.Filters.Count, следя за тем, чтобы избежать ошибок, определяемых приложением, когда .On или .Operator имеет значение false. (myAutofilters будет reDim'd на количество строк и столбцов в шаге 1)
Отключите фильтр, но сохраните выпадающие списки с помощью .ShowAllData
Для каждого элемента фильтра, который был .On в соответствии с сохраненным массивом, сбросьте 3 из 4 свойств каждого из элементов автофильтра .AutoFilter.Filters.Count. Опять же, позаботьтесь о том, чтобы избежать ошибок, определенных приложением, когда .Operator имеет значение false, поэтому для каждого элемента «i»
поле rngAutofilter.AutoFilter: = i, Criteria1: = myAutofilters (i, 2)
или
поле rngAutofilter.AutoFilter: = i, Критерии1: = myAutofilters (i, 2), Оператор: = myAutofilters (i, 3), Критерии2: = myAutofilters (i, 4)
Теперь автофильтр будет восстановлен в том же диапазоне, в котором он находился до запуска вашего кода, но с обновленным автофильтром для изменений данных.
источник
источник