Страницы: 1
RSS
Теоретический вопрос про Application.ScreenUpdating
 
Приветствую, народ.
Вопрос тут у меня.... теоретического содержания.

Что будет если ввести  Application.ScreenUpdating = False   но не вернуть в конце кода Application.ScreenUpdating = True  ??   Что произойдет, какие будут неполадки ?
 
Ничего.
 
В 90% случаев ничего страшного, но недавно наткнулся на код (кажется с фильтрами), где без команды экран завис.
 
Помнится, года два назад было обсуждение, что, мол, ежели корректно процедуру по End Sub завершить, то все будет хорошо, а вот если через Exit Sub то возможны варианты.

з.ы. ВО, даже ссылку нашел! :)
Кому решение нужно - тот пример и рисует.
 
Цитата
Пытливый написал:
ВО, даже ссылку  нашел!
правда, мои ответы(как и многих других тем) там скрыты(ошибка форума).
Если кратко: screenUpdating будет возвращено в True по завершении процедуры, из которой было отключено. Но! Если это свойство было отключено из подпроцедуры(например, вызвана функция, его отключающая) - то возвращения свойства может не произойти.
Так же в большинстве случае свойство не возвращается само, если выход из процедуры был ключевыми End или Exit Sub. И в 99% не будет возвращено, если внутри процедуры возникла ошибка и останов процедуры.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий Щербаков, а зачем вообще нужно Application.ScreenUpdating = True ?

Вот False - понятно - отключает мельтешение на экране.
А True  - зачем ?
Чтобы опять включить мельтешение на экране ?
 
Тоже сталкивался несколько раз с таким, что обновление экрана переставало работать. Поэтому лучше включать всегда. Даже если включен обработчик ошибок, то в конце лучше включить, если ранее где-то отключалось.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
чтобы Excel работал в штатном режиме
Отображение экрана обычно отключается в макросах и не столько из-за мельтешения экрана, а больше из-за того, что перерисовать текущее содержимое экрана - это довольно ресурсоемкий процесс, оключение этого процесса позволяет сделать выполнение макроса в сотни раз быстрее, улавливаете разницу между 1 сек и 100 сек. (полторы минуты) и нет смысла прорисовывать каждое промежуточное состояние экрана (листа) когда можно 1 раз изобразить итоговое состояние.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ясно.
 
Цитата
Дмитрий Щербаков написал: мои ответы(как и многих других тем) там скрыты
Где вижу, там открываю. И по ссылке уже открыл
 
Цитата
Дмитрий Щербаков написал:
И в 99% не будет возвращено, если внутри процедуры возникла ошибка и останов процедуры.
Позволю себе не согласиться.
В качестве эксперимента вставил в макрос, создающий копию листа, и делаюший из нее книжку-раскраску, строку активации не существующего листа.
По нажатии End отобразилась вполне корректная раскраска.
 
На всякий пожарный держу в одном из модулей микро макрос включающий пересчет, события и обновление экрана. А то есть любопытные пользователи, которые при запуске файла с активацией всяческих реставраций того, что они могли испортить, любят давить на разные кнопки пытаясь прервать процесс. В итоге все прочие макросы считывают с листов не корректную информацию и прочее. Правда даже при аварийном завершении процедур ни разу экран не "замерзал".
Изменено: Anchoret - 08.02.2018 18:19:04
 
Цитата
vikttur написал:
Где вижу, там открываю
Спасибо  ;)
Цитата
RAN написал:
По нажатии End отобразилась вполне корректная раскраска
Я не говорил, что не будет отображаться результат. Но заморозка экрана может остаться. Например, не будет отображаться выделение ячеек, прокрутка и т.п. Т.е. в Excel перейти можно, но работать не очень комфортно. Но справедливости ради надо отметить еще и тот факт, что в разных версиях поведение может различаться. Плюс сам код тоже имеет значение. Как писалось раньше - если отключение происходит в той же процедуре, на которой ошибка - то с большОй долей вероятности свойство вернется в значение по умолчанию. Хотя отмечал так же случаи того, что свойство возвращалось и при ошибках в подчиненных процедурах.
Т.к. давно тесты подобные не проводил - могу ошибиться. Сам все коды давно пишу так, что в начале вызывается отдельная функция оптимизации параметров, а при ошибке или окончании процедуры - возвращаются установленные до запуска процедуры параметры.
Изменено: Дмитрий Щербаков - 08.02.2018 20:03:01
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Подводя итог
Если вы не включили обновление экрана, и все работает - спите спокойно.
Если не работает - включите, и спите спокойно.
:D
 
Цитата
Дмитрий Щербаков написал:
Например, не будет отображаться выделение ячеек, прокрутка
А вот такое было. 2010 и 2013 эксели.
 
Цитата
Дмитрий Щербаков написал:
мои ответы(как и многих других тем) там скрыты(ошибка форума).
Включил отображение.
 
Да ну? Я первый )
 
3 сообщения были скрыты )
 
Спешка...
Страницы: 1
Наверх