Отключить мерцание vba excel

Обновлено: 04.07.2024

Были десятки вопросов о мерцании экрана в Excel 2013 и 2016, так как Application.ScreenUpdating = False не работает так, как раньше.

Одно частичное решение включает в себя отключение вычислений рабочих таблиц, но они могут потребоваться в некоторых моделях. Другое частичное решение включает в себя создание невидимых книг, которые либо запутывают пользователя (если все рабочие книги исчезают), либо все еще видят мерцание экрана (если вы делаете все книги, кроме одного, исчезают).

Почему Microsoft не может просто разобраться в этом :(

Вот пример кода, который требует двух пустых книг (Book1 и Book2) и вызывает ужасное мерцание экрана.

Мерцание приходит, скорее всего, с помощью .Select и .Activate :

Это экран среды, который обновляется, чтобы отражать активацию соответствующих книг. Application.ScreenUpdating применяется только к экземпляру приложения, он не отключает весь ваш монитор от обновления, поскольку различные окна рабочей книги получают/теряют фокус из метода Activate . Как вы заметили, пока экран мерцает, вы не видите изменения цвета ячейки до тех пор, пока процедура не закончится. Это говорит о том, что Application.ScreenUpdating работает именно так, как он предназначен для работы, и чтобы решить эту проблему, вы должны прочитать и применить Как избежать использования Select в Excel VBA.

Использование .Activate или .Select нужно только в очень редких случаях, так что избежать его там, где это возможно.

Я также хотел бы отметить, что если строгое требование полагаться на Selection или ActiveCell качестве пользовательского ввода, невозможно будет полностью устранить мерцание окна, потому что Selection или ActiveCell существуют только в рамках ActiveSheet в ActiveWorkbook ,

Я рекомендую предоставить рабочий лист в качестве параметра в Jiggle а затем абсолютно обращаться к ячейкам. Это делает ваш код более надежным и работает в фоновом режиме, не выбирая и не активируя ничего.

Обратите внимание, что этот пример, чтобы показать, как не использовать .Select и @DisplayName показали более короткий/быстрый способ достичь того же.

Это то, что я сам много читал, но не мог найти решения. У меня есть программа примерно из 10 000 строк, где у меня есть процедура, прикрепленная к определенной командной кнопке. Это вычисляет некоторые сложные уравнения.

Я начал код, как обычно, с Application.ScreenUpdating = False и превратил его в True непосредственно перед окончанием основной процедуры. Но только верхняя часть моего листа Excel (рядом со строкой меню) продолжает мерцать около 10 секунд, пока не появится результат. Я попытался отключить события, а также перевести вычисления в ручное управление, но ничего не помогло. Даже попробовал упомянуть обновление экрана до false в начале подпроцедур, связанных с основной процедурой.

Любое предложение по этому поводу будет действительно оценено. Спасибо!

1 ответ

У меня есть рабочая тетрадь Excel, которая содержит 2 листа. Код VBA загрузит файл CSV на 1-й лист. Затем код VBA преобразует данные с 1-го листа в диаграммы на 2-м листе. Этот код VBA запускается каждые 5 секунд и вызывает мерцание графиков. У кого-нибудь есть какие-нибудь предложения, чтобы.

Попробуйте добавить это в начале подзаголовка:

И это перед самым концом:

Это должно помочь. Обратите внимание, однако, что мой экран также иногда мерцает при запуске комплекса macros (Excel выглядит так, как будто он не отвечает, но работает в фоновом режиме).

Похожие вопросы:

Я ищу код VBA в Excel 2010, который позволит мне сделать снимок экрана определенного диапазона в Excel. Прямо сейчас, когда я выбираю диапазон в excel, а затем копирую, представление искажается от.

Хотелось бы сделать это в рамках VBA (у других пользователей нет других инструментов разработки для модификации). Я знаю о сторонних приложениях (например, iMacros), которые делают то же самое, но.

У меня есть рабочая тетрадь Excel, которая содержит 2 листа. Код VBA загрузит файл CSV на 1-й лист. Затем код VBA преобразует данные с 1-го листа в диаграммы на 2-м листе. Этот код VBA запускается.

Я использую GetObject с путем к рабочей книге, чтобы либо создать новый, либо захватить существующий экземпляр Excel. Если он захватывает существующий экземпляр, созданный пользователем, окно.

У меня есть еще один вопрос из длинных серий остановить мерцание экрана excel, но я думаю, что этот вопрос немного сложнее. У меня есть клиент, которому во время выполнения макроса требуется строка.

Были десятки вопросов о Мерцании экрана в Excel 2013 и 2016 годах, так как Application.ScreenUpdating = False не работает так, как раньше. Мерцание Экрана VBA Excel Excel ScreenUpdating False и все.

Как обновить свойства .Application в книге Excel из Access VBA? Я использую Access VBA для экспорта данных в Excel, открываю файл и форматирую его (добавляю формулы и т. д.). Код работает медленно.

Читайте также: