Помогите разобраться с проблемкой. Написал макросы которые скрывают пустые строки фильтром и открывают. Вот они: [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() ??? Что сбивает фильтр?
Доброго времени суток, всем!
Помогите разобраться с проблемкой. Написал макросы которые скрывают пустые строки фильтром и открывают. Вот они: [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
Сообщение отредактировал Stork4ever - Пятница, 11.11.2016, 14:27
Информация из файла никому не нужна, поэтому можете ее смело стереть и заменить на нейтральную. Большой файл тоже не нужен. Нужен маленький файл. Или еще меньше. И вообще - в Правилах написано как раз про Ваш случай
Цитата
- Чтобы понять и помочь - достаточно таблицы на 10-20 строк - При этом старайтесь сохранить структуру, расположение таблиц, имена листов - аналогично оригиналу - Если файл содержит конфиденциальную информацию - обязательно замените Ваши данные на нейтральные
А так если, то попробуйте пересчет вначале выключать, а потом включать [vba]
Информация из файла никому не нужна, поэтому можете ее смело стереть и заменить на нейтральную. Большой файл тоже не нужен. Нужен маленький файл. Или еще меньше. И вообще - в Правилах написано как раз про Ваш случай
Цитата
- Чтобы понять и помочь - достаточно таблицы на 10-20 строк - При этом старайтесь сохранить структуру, расположение таблиц, имена листов - аналогично оригиналу - Если файл содержит конфиденциальную информацию - обязательно замените Ваши данные на нейтральные
А так если, то попробуйте пересчет вначале выключать, а потом включать [vba]
Разобрался. Дело было в Workbook_SheetActivate на всей книге, которая отрабатывала после Worksheet_Activate() на нужном листе. Тему можно закрывать. СПАСИБО!!!
Разобрался. Дело было в Workbook_SheetActivate на всей книге, которая отрабатывала после Worksheet_Activate() на нужном листе. Тему можно закрывать. СПАСИБО!!!Stork4ever