Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Не корректная работа фильтра (сбрасывается) - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Не корректная работа фильтра (сбрасывается) (Макросы/Sub)
Не корректная работа фильтра (сбрасывается)
Stork4ever Дата: Пятница, 11.11.2016, 14:11 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Доброго времени суток, всем!

Помогите разобраться с проблемкой. Написал макросы которые скрывают пустые строки фильтром и открывают. Вот они:
[vba]
Код
Sub PRN1()
    Sheets("List1").Range("$A$11:$Z$1000").AutoFilter Field:=20, Criteria1:="1"
    Sheets("List1").Cells(2, 22) = 1  ' признак какой фильтр выбран
End Sub
Sub PRN_ALL()
    Sheets("List1").Range("$A$11:$Z$1000").AutoFilter Field:=20
    Sheets("List1").Cells(2, 22) = 0  ' признак какой фильтр выбран
End Sub
[/vba]

Сделал две кнопки типа "Скрыть" и "Отобразить", что бы быстро пользоваться фильтром.
Далее, если выбирать фильтр скрыть, а потом уйти с листа на другие листы в книге, то по возвращении фильтр сбрасывается. Тогда я написал макрос для List1:
[vba]
Код
Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
        Sheets("List1").Range("$A$11:$Z$1000").AutoFilter
    If  Sheets("List1").Cells(2, 22) = 1 Then
        Sheets("List1").Range("$A$11:$Z$1000").AutoFilter Field:=20, Criteria1:="1"
        Else
        Sheets("List1").Range("$A$11:$Z$1000").AutoFilter Field:=20
    End If
    Application.ScreenUpdating = True
End Sub
[/vba]

На мой взгляд все логично. При активации листа List1 проверяем ячейку с признаком и вновь активируем нужный фильтр. НО!!!

Интересная вещь... Если выбран фильтр, который скрывает строки, то по возвращении часть скрытых строк остается скрытыми, а часть появляется. Ячейки с признаком фильтрации и строки абсолютно одинаковые, и я никак не могу понять, почему такое происходит.
Пробовал макросы на пустом тестовой файле - все работает! Переносил нужный лист из нужной книги в новую - все работает! Возвращаю обратно в нужную книгу - НЕ РАБОТАЕТ!!!

Что интересно! Если поставить паузу в конце Worksheet_Activate(), то фильтр выводится правильно!, но как только снимаешь с паузы, то часть строк вновь появляется.

Если в конце Worksheet_Activate() поставить Application.EnableEvents = False, то фильтр отображается корректно, но потом не работают другие макросы! Значит что-то еще запускается после отработки Worksheet_Activate()

Так что же может запускаться после работы Worksheet_Activate() ??? Что сбивает фильтр?


Сообщение отредактировал Stork4ever - Пятница, 11.11.2016, 14:27
 
Ответить
СообщениеДоброго времени суток, всем!

Помогите разобраться с проблемкой. Написал макросы которые скрывают пустые строки фильтром и открывают. Вот они:
[vba]
Код
Sub PRN1()
    Sheets("List1").Range("$A$11:$Z$1000").AutoFilter Field:=20, Criteria1:="1"
    Sheets("List1").Cells(2, 22) = 1  ' признак какой фильтр выбран
End Sub
Sub PRN_ALL()
    Sheets("List1").Range("$A$11:$Z$1000").AutoFilter Field:=20
    Sheets("List1").Cells(2, 22) = 0  ' признак какой фильтр выбран
End Sub
[/vba]

Сделал две кнопки типа "Скрыть" и "Отобразить", что бы быстро пользоваться фильтром.
Далее, если выбирать фильтр скрыть, а потом уйти с листа на другие листы в книге, то по возвращении фильтр сбрасывается. Тогда я написал макрос для List1:
[vba]
Код
Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
        Sheets("List1").Range("$A$11:$Z$1000").AutoFilter
    If  Sheets("List1").Cells(2, 22) = 1 Then
        Sheets("List1").Range("$A$11:$Z$1000").AutoFilter Field:=20, Criteria1:="1"
        Else
        Sheets("List1").Range("$A$11:$Z$1000").AutoFilter Field:=20
    End If
    Application.ScreenUpdating = True
End Sub
[/vba]

На мой взгляд все логично. При активации листа List1 проверяем ячейку с признаком и вновь активируем нужный фильтр. НО!!!

Интересная вещь... Если выбран фильтр, который скрывает строки, то по возвращении часть скрытых строк остается скрытыми, а часть появляется. Ячейки с признаком фильтрации и строки абсолютно одинаковые, и я никак не могу понять, почему такое происходит.
Пробовал макросы на пустом тестовой файле - все работает! Переносил нужный лист из нужной книги в новую - все работает! Возвращаю обратно в нужную книгу - НЕ РАБОТАЕТ!!!

Что интересно! Если поставить паузу в конце Worksheet_Activate(), то фильтр выводится правильно!, но как только снимаешь с паузы, то часть строк вновь появляется.

Если в конце Worksheet_Activate() поставить Application.EnableEvents = False, то фильтр отображается корректно, но потом не работают другие макросы! Значит что-то еще запускается после отработки Worksheet_Activate()

Так что же может запускаться после работы Worksheet_Activate() ??? Что сбивает фильтр?

Автор - Stork4ever
Дата добавления - 11.11.2016 в 14:11
Stork4ever Дата: Пятница, 11.11.2016, 14:28 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Файл очень большой и с конфиденциальной информацией. Поэтому его я сюда не могу загрузить. А суть проблемы я описал.
 
Ответить
СообщениеФайл очень большой и с конфиденциальной информацией. Поэтому его я сюда не могу загрузить. А суть проблемы я описал.

Автор - Stork4ever
Дата добавления - 11.11.2016 в 14:28
_Boroda_ Дата: Пятница, 11.11.2016, 14:38 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Информация из файла никому не нужна, поэтому можете ее смело стереть и заменить на нейтральную.
Большой файл тоже не нужен. Нужен маленький файл. Или еще меньше.
И вообще - в Правилах написано как раз про Ваш случай
Цитата
- Чтобы понять и помочь - достаточно таблицы на 10-20 строк
- При этом старайтесь сохранить структуру, расположение таблиц, имена листов - аналогично оригиналу
- Если файл содержит конфиденциальную информацию - обязательно замените Ваши данные на нейтральные

А так если, то попробуйте пересчет вначале выключать, а потом включать
[vba]
Код
    Application.Calculation = xlCalculationManual
    Application.Calculation =xlCalculationAutomatic
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеИнформация из файла никому не нужна, поэтому можете ее смело стереть и заменить на нейтральную.
Большой файл тоже не нужен. Нужен маленький файл. Или еще меньше.
И вообще - в Правилах написано как раз про Ваш случай
Цитата
- Чтобы понять и помочь - достаточно таблицы на 10-20 строк
- При этом старайтесь сохранить структуру, расположение таблиц, имена листов - аналогично оригиналу
- Если файл содержит конфиденциальную информацию - обязательно замените Ваши данные на нейтральные

А так если, то попробуйте пересчет вначале выключать, а потом включать
[vba]
Код
    Application.Calculation = xlCalculationManual
    Application.Calculation =xlCalculationAutomatic
[/vba]

Автор - _Boroda_
Дата добавления - 11.11.2016 в 14:38
Stork4ever Дата: Пятница, 11.11.2016, 15:31 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Разобрался. Дело было в Workbook_SheetActivate на всей книге, которая отрабатывала после Worksheet_Activate() на нужном листе.
Тему можно закрывать.
СПАСИБО!!!
 
Ответить
СообщениеРазобрался. Дело было в Workbook_SheetActivate на всей книге, которая отрабатывала после Worksheet_Activate() на нужном листе.
Тему можно закрывать.
СПАСИБО!!!

Автор - Stork4ever
Дата добавления - 11.11.2016 в 15:31
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Не корректная работа фильтра (сбрасывается) (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!