Excel отключить обновление экрана vba excel

Хитрости »

20 Январь 2016              61467 просмотров


Рано или поздно у пишущих на Visual Basic for Applications возникает проблема — код хоть и облегчает жизнь и делает все автоматически, но очень долго. В этой статье я решил собрать несколько простых рекомендаций, которые помогут ускорить работу кода VBA, при этом в некоторых случаях весьма внушительно — в десятки, а то и больше, раз. Основной упор в статье сделан на начинающих, поэтому в начале статьи приводятся самые простые методы оптимизации. Более «глубокие» решения по оптимизации кода приведены в конце статьи, т.к. для применения данных решений необходим достаточный опыт работы в VB и сходу такие методы оптимизации кому-то могут быть непонятны.

  1. Если в коде есть много всяких Activate и Select, тем более в циклах — следует немедленно от них избавиться. Как это сделать я писал в статье: Select и Activate — зачем нужны и нужны ли?
  2. Обязательно на время выполнения кода отключить:
    • автоматический пересчет формул. Чтобы формулы не пересчитывались при каждой манипуляции на листе во время выполнения кода — это может дико тормозить код, если формул много:
      Application.Calculation = xlCalculationManual

      Если во время кода все же нужно пересчитывать какие-то диапазоны, то можно пересчитывать только их:

      Range("A1:C60").Calculate
    • обновление экрана, чтобы действия по изменению значений ячеек и пр. не мелькали. Зачем это надо? Т.к. все эти действия обращаются к графическому процессору и заставляют его трудиться для перерисовки экрана — это может значительно тормозить код:
      Application.ScreenUpdating = False
    • На всякий случай отключаем отслеживание событий. Нужно для того, чтобы Excel не выполнял никаких событийных процедур, которые могут быть в листе, в котором производятся изменения. Как правило это события изменения ячеек, активации листов и пр.:
      Application.EnableEvents = False
    • Если книга выводилась на печать или выводится на печать в процессе выполнения кода, то лучше убрать разбиение на печатные страницы.
      ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False

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

    • На всякий случай можно отключить отображение информации в строке статуса Excel(в каких случаях там вообще отображается информация и зачем можно узнать в статье: Отобразить процесс выполнения). Хоть это и не сильно поедает ресурсы — иногда может все же ускорить работу кода:
      Application.StatusBar = False

    Главное, что следует помнить — все эти свойства необходимо включить обратно после работы кода. Иначе могут быть проблемы с работой внутри Excel. Например, если забыть включить автопересчет формул — большинство формул будут пересчитывать исключительно принудительным методом — после нажатия сочетания клавиш Shift+F9. А если забыть отключить обновление экрана — то есть шанс заблокировать себе возможность работы на листах и книгах. Хотя по умолчанию свойство ScreenUpdating и должно возвращаться в True, если было отключено внутри процедуры — лучше не надеяться на это и привыкать возвращать все свойства на свои места принудительно. По сути все это сведется к нескольким строкам:

    'Возвращаем обновление экрана
    Application.ScreenUpdating = True
    'Возвращаем автопересчет формул
    Application.Calculation = xlCalculationAutomatic
    'Включаем отслеживание событий
    Application.EnableEvents = True

    Как такой код выглядит на практике. Предположим, надо записать в цикле в 10 000 строк значения:

    Sub TestOptimize()
    'отключаем обновление экрана
    Application.ScreenUpdating = False
    'Отключаем автопересчет формул
    Application.Calculation = xlCalculationManual
    'Отключаем отслеживание событий
    Application.EnableEvents = False
    'Отключаем разбиение на печатные страницы
    ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False
     
    'Непосредственно код заполнения ячеек
    Dim lr As Long
    For lr = 1 To 10000
        Cells(lr, 1).Value = lr 'для примера просто пронумеруем строки
    Next
     
    'Возвращаем обновление экрана
    Application.ScreenUpdating = True
    'Возвращаем автопересчет формул
    Application.Calculation = xlCalculationAutomatic
    'Включаем отслеживание событий
    Application.EnableEvents = True
    End Sub

    Разрывы печатных страниц можно не возвращать — они тормозят работу в любом случае.

  3. Следует избегать циклов, вроде Do While для поиска последней ячейки. Часто такую ошибку совершают начинающие. Куда эффективнее и быстрее вычислять последнюю ячейку на всем листе или в конкретном столбце без этого тормозного цикла Do While. Я обычно использую
    lLastRow = Cells(Rows.Count,1).End(xlUp).Row

    другие варианты определения последней ячейки я детально описывал в статье: Как определить последнюю ячейку на листе через VBA?

Для более опытных пользователей VBA я приведу несколько решений по оптимизации кодов в различных ситуациях:

  • Самая хорошая оптимизация кода, если приходится работать с ячейками листа напрямую, обрабатывать их и, возможно, изменять значения, то быстрее все обработки делать в массиве и разом выгружать на листе. Например, код выше по заполнению ячеек номерами будет в этом случае выглядеть так:
    Sub TestOptimize_Array()
    'Непосредственно код заполнения ячеек
    Dim arr, lr As Long
    'запоминаем в массив одним махом все значения 10000 строк первого столбца
    arr = Cells(1, 1).Resize(10000).Value
    'если нужно заполнение для двух и более столбцов
    'arr = Cells(1, 1).Resize(10000, 2).Value
    'или 
    'arr = Range(Cells(1, 1),Cells(10000, 2)).Value
    'или автоматически вычисляем последнюю ячейку и заносим в массив данные, начиная с ячейки А3
    'llastr = Cells(Rows.Count, 1).End(xlUp).Row 'последняя ячейка столбца А
    'arr = Range(Cells(3, 1),Cells(llastr, 2)).Value
    For lr = 1 To 10000
        arr(lr,1) = lr 'заполняем массив порядковыми номерами
    Next
    'Выгружаем обработанный массив обратно на лист в те же ячейки
    Cells(1, 1).Resize(10000).Value = arr
    End Sub

    Но здесь следует учитывать и тот момент, что большие массивы могут просто вызвать переполнение памяти. Наиболее актуально это для 32-битных систем, где на VBA и Excel выделяется памяти меньше, чем в 64-битных системах

  • Если используете быстрый ЕСЛИ — IIF, то замените его на IF … Then … Else
  • Так же лучше вместо Switch() и Choose() применить тот же IF … Then … Else
  • В большинстве случаев проверять строку на «не пусто» лучше через Len(), чем прямое сравнение с пустотой: Len(s)=0 вместо s = «». Связано с тем, что работа со строками значительно медленнее, чем с числовыми данными и Len по сути не подсчитывает длину переменной, а берет это число непосредственно уже готовое из памяти. При сравнении же текста с пустой строкой(«»), VBA сначала создает в памяти переменную нулевой длинны, а уже потом сравнивает с ней наш текст. Поэтому в некоторых случаях так же ускоряет сравнение и в таком виде: s = vbNullString
  • Не применять объединение строк без необходимости. Например, s = «АВ», будет быстрее, чем: s =»А» & «В»
  • Не применять сравнение текстовых величин напрямую. Лучше применить встроенную функцию StrComp:
    If s <> s1 Then будет медленнее, чем
    If StrComp(s, s1, vbBinaryCompare) <> 0
    и тем более, если при сравнении необходимо не учитывать регистр:
    If LCase(s) <> LCase(s1) Then будет медленнее, чем
    If StrComp(s, s1, vbTextCompare) <> 0
  • Циклы For … Next в большинстве случаев работает быстрее, чем цикл Do … Lоор
  • Избегать присвоения переменным типа Variant. Хоть соблазн и велик — этот тип забирает много памяти и в дальнейшем замедляет работу кода. Так же для объектных переменных следует избегать по возможности безликого глобального типа Object и применять конкретный тип:
    Dim rRange as Object, wsSh as Object

    будет медленнее работать, чем:

    Dim rRange as Range, wsSh as Worksheet

    Причина в том, что при объявлении As Object мы не даем VBA практически никакой информации о типе данных, кроме того, что это какой-то объект. И VBA приходится «на лету» внутри кода при каждом обращении к такой переменной определять её конкретный тип(Range, Worksheet, Workbook, Chart и т.д.). Что опять же занимает время.

  • Если работаете с массивами, то можно при объявлении указать это явно:

    вместо

    Такая инициализация происходит быстрее.
    А еще лучше будет при этом еще и тип данных сразу присвоить:

    Dim arr() as string, arr2() as long

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

Конечно, это не все приемы и решения для оптимизации. Но на первых парах должно хватить. Плюс, всегда следует исходить из здравого смысла. Например, если код выполняется за 2 секунды, то вероятно нет смысла его дальше оптимизировать. Конечно, если этот код не из тех, которые просто изменяют значение одной-двух ячеек.


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Return to VBA Code Examples

In this Article

  • Disable ScreenUpdating
  • Enable ScreenUpdating
  • VBA ScreenUpdating Example
  • ScreenUpdating Refresh
    • VBA Settings – Speed Up Code
  • VBA Coding Made Easy

As cool as it looks watching your VBA macro manipulate the screen, you can help your Macro run faster if you turn off (disable) ScreenUpdating.

Disable ScreenUpdating

1. To disable ScreenUpdating, At the beginning of your code put this line:

Application.ScreenUpdating = False

Enable ScreenUpdating

2. To re-enable ScreenUpdating, At the end of your code put this line:

Application.ScreenUpdating = True

VBA ScreenUpdating Example

Your procedure will then look like this:

Sub ScreenUpdating_Example()
    Application.ScreenUpdating = False

    'Do Something
    Range("a1").Copy Range("b1")
    Range("a2").Copy Range("b2")
    Range("a3").Copy Range("b3")


    Application.ScreenUpdating = True
End Sub

vba screen updating

ScreenUpdating Refresh

Disabling ScreenUpdating will make your VBA code run MUCH faster, but it will also make your work appear more professional. End-users typically don’t want to see the behind the scenes actions of your procedures (especially when the procedure runs slow). Also, you may not want end-users to see the behind the scenes functionality (ex. Hidden Worksheets). I recommend disabling (and re-enabling) ScreenUpdating in virtually all of your procedures.

However, there are some times when you want the screen to refresh. To refresh the screen, you will need to temporarily turn back on ScreenUpdating (there is no screen “refresh” command):

    Application.ScreenUpdating = True
    'Do Something
    Application.ScreenUpdating = False

VBA Settings – Speed Up Code

There are several other settings to play with to improve your code speed.

Disabling Automatic Calculations can make a HUGE difference in speed:

Application.Calculation = xlManual

Disabling the Status Bar will also make a small difference:

Application.DisplayStatusBar = False

If your workbook contains events you should usually disable events at the beginning of your procedure:

Application.EnableEvents = False

Last, your VBA code can be slowed down when Excel tries to re-calculate page breaks (Note: not all procedures will be impacted).  To disable displaying page breaks use this line of code:

ActiveSheet.DisplayPageBreaks = False

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

VBA Turn Off On ScreenUpdating

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

Как отключить «мерцание» окна

​Смотрите также​​ восстановления значения переменной​ после выполнения макроса​
​: Хорошо, вариант с​ отвечает именно за​ Application.Calculation = xlCalculationAutomatic​
​ ScreenUpdating в каждом​ 19:03, в сообщении​ работает, просто рекомендация​ действия существуют…)​ это можно заранее​ будет здорово собрать​: Application.EnableEvents​: Юрий М​MsgBox .ScreenUpdating ‘​
​ где включение?​ строки кода в​Mishel915​ до ее начального​
​ увидят открытой книгу​ активной книгой, но​ панель задач.​ Application.EnableEvents = true​ макросе (имеется в​ № 4200?’200px’:»+(this.scrollHeight+5)+’px’);»>алгоритм вложенный:​ вернуть свойство в​Nic70y​ предсказать).​ всё на одной​Application.Calculation = xlManual​
​А что произошло?​ читаем​
​The_Prist​#3​: Всем доброе время​ состояния​ экселя №1, а​ неактивным листом подойдет?)​KuklP​ sleep(100) Application.screenupdating =​ виду в цепочке​ «кнопка» вызывает функцию,​ изначальное положение после​: Не, я не​paylevan​

​ странице и, возможно,​​Hugo​Просто выход? Есть​.ScreenUpdating = False​: А что непонятного?​вставьте строку (иначе​ суток!​Дмитрий​ в панели задач​То есть консолидация​: Sub ProductionPlan()​ false​ связанных макросов).​ та в свою​ завершения работы с​ махлюю,​: Коллеги, спасибо большое​ узнать новые способы​: Это смотря какая​ возможность попасть на​ ‘ изменяем​ Вы обновление отключаете,​ не закрывается книга​В макросе одна​: Один хороший человек​ «нажатой» книгу №2,​

​ и обработка информации​​Dim x As​
​bedvit​_Boroda_​
​ очередь в цикле​ ним.​уже много раз​ за комментарии.​ ускорения работы.​ задача, что на​ лист? У меня​MsgBox .ScreenUpdating ‘​ а обратно не​ База):​ за другой открываются​ на этом же​ или вообще никакой​
​ будет в текущей​ Workbook​: Имхо должно быть​: Его вообще можно​ другую функцию​Nic70y​ так делал.​При этом, в​При этом особенно​

​ листе, какой код…​​ — нет.​​ читаем​​ включаете. Я не​
​База.Close SaveChanges:=False​ две книги Excel.​​ форуме выложил следующий​​ не «нажатой». То​​ книге но в​​Set x =​
​ достаточно: Application.ScreenUpdating =​ не вырубать. Он​​SGerman​​: Роман, спасибо за​Vemod​ рамках темы, прошу​
​ ценны практические рекомендации​

​Я часто вообще​​The_Prist​End With​
​ раз писал уже,​Mishel915​Set wb1 =​ macros. Позарез нужно​ это будут лишние​ новом генерируемом листе.​ GetObject(«F:ProductionPlanR14.xls») ‘открываем необходимую​ 1: Application.ScreenUpdating =​ сам вырубается при​: Смех над теми,​ разъяснение.​: Возможно дело в​ уточнить: можно ли,​ из опыта, подобные​ ничего не отключаю​
​: Здесь ДВЕ ячейки.​End Sub​ что лучше возвращать​: Такой код решает​ Workbooks.Open(Filename:=ThisWorkbook.Path & «Книга1»)​ его применение, но​ звонки мне, и​KuklP​ книгу​ 0​ выходе из макроса.​ кто знает меньше,​Так оно и​ разных версиях excel.​ чтобы ускорить работу​ комментарию​ — т.к. каждое​ А у Вас​Юрий М​ занчения изменных параметров​ задачу:​ Set wb2 =​
​ не получается. Может​
​ лишняя трата моего​: Нарколог: Вы пьете?​’…….. Ваш код​Prisioner​ Отсюда, кстати, следует​

​ Вас ни в​​ было​ У меня на​
​ Excel, отключить всю​vikttur​
​ отключение-включение только тормозит​ принудительный выход, если​
​: Запустил — и​ и свойств.​
​Application.ScreenUpdating = False​ Workbooks.Open(Filename:=ThisWorkbook.Path & «Книга2»)Первая​ потому, что я​ времени на объяснения)​Пациент: Это вопрос​
​x.Close 0​: Если нужно именно​ то, что Андрей​ коем случае не​Application.ScreenUpdating начал использовать​ 10м тоже все​
​ анимацию?​.​ процесс.​ изменение более одной​ что? Переключается.​Private Sub Worksheet_Change(ByVal​ ‘ Отключаем “мерцание”​ книга используется в​

CyberForum.ru

Обновление экрана

​ настолько далек от​​Посему, я думаю​
​ или предложение?​Set x =​
​ остановить выполнение кода​ написал выше​
​ украшает.​
​ с MSO 2010​ отображается не зависимо​То есть чтобы,​
​The_Prist​Но это на​ ячейки.​
​Юрий М​
​ Target As Range)​ окна Set wb1​ качестве базы данных.​ всего этого.​ оптимальным решением будет​Я к тому​ Nothing​

​ и посмотреть что​​SGerman​Проблема решена, я​и когда макрос​ от включение/выключения обновления​ например, при импорте​: Из опыта:​ моих задачах и​

​Юрий М​​: А где в​If Target.Count >​ = Workbooks.Open(Filename:=ThisWorkbook.Path &​ Данные первой книги​Макрос помогает сделать​ добавлять свойство ShowWindowsInTaskbar​ — что это​End Sub​

​ происходит, а потом​:​
​ уже сказал. А​ вызывал другой макрос,​ экрана.​
​ данных, или, к​Исходный код(копирование отдельных​ кодах — когда​
​: Не очень понимаю​
​ Вашем примере Application.ScreenUpdating​
​ 1 Then Exit​
​ «Книга1») ThisWorkbook.Activate ‘​

​ применяются во второй​​ обновление файла не​
​ в начало и​ было: «подойдет?)»​Guest​ решить — продолжать​Manyasha​ цирк, он в​

​ то приходилось в​​Отключение обновления помогает​ примеру, использовании счётчиков,​
​ ячеек в основном)​ лист без формул​ вопрос — я​
​ = True?​ Sub​ Возвращаем указатель текущего​ книге.​ открывая его вручную​

​ конец процедур.​​Вариант с активной​
​: Спасибо за ответы.​
​ или нет, тогда​
​,​ другом месте. Или​
​ другом макросе прописывать​ когда операции на​ а также любых​
​ был оптимизирован. Все​ и событий, а​

​ ведь и так​​nerv​If Not Intersect(Target,​ приложения (для избежания​
​В таком открытии​ (все как я​Radist_514​

​ книгой, но неактивным​KukLP, вы все​ вот такая конструкция:​Спасибо, Марина !​ я не знаю​ откл.​ нескольких листах, убирает​ других ситуациях значения​ вычисления перенеслись в​ вся обработка данных​ на листе это​: >Запустите два раза.​

​ Range(«A1»)) Is Nothing​​ различных глюков) Set​ двух книг заметно​ понял делается из​
​: Здравствуйте!​ листом подойдет.​ правильно написали с​Application.ScreenUpdating = True​
​ Хотел новой благодарностью​ местных традиций ?​
​SGerman​ мелькание.​ в ячейках изменялись​
​ массивы. Так вот​ в массивах (без​ делаю. Куда ещё​
​Первый запуск (макроса):​ Then Exit Sub​ wb2 = Workbooks.Open(Filename:=ThisWorkbook.Path​
​ мерцание на экране​
​ исходного файла за​Наткнулся на работе​Но боюсь, меня​ точки зрения нормального​
​ Stop Application.ScreenUpdating =​
​ повысить Вашу репутацию​
​SGerman​
​: Зравствуйте !​Rioran​

​ без подмигиваний, проскальзываний​​ этот оптимизированный код​
​ обращения к листу​ попасть? :-)​True ‘ проверяем​
​Application.ScreenUpdating = False​

​ & «Книга2») Application.ScreenUpdating​
​ перной книги.​
​ раз).​ на маленькую неприятность.​
​ поняли неправильно. На​ кода по открытию​
​ FalseПри этом выскочит​ в очередной раз,​
​:​
​Почему-то далеко не​

​:​​ и иных ресурсоёмких​ выполнялся в 6​

​ в процессе).​​The_Prist​’ отключаем False​’здесь код​

​ = True ‘​​Вопрос – возможно​

​ВОТ КАК БЫЛО​
​ Написал макрос для​
​ самом деле применение​ книги.​

​ окошко такое же​
​ но не вышло​krosav4ig​ всегда помогает отключение​
​Nic70y​

​ динамических эффектов.​​ раз быстрее исходного.​Хотя отключить обновление​: Потому что это​

​ ‘ да, отключено​​Application.ScreenUpdating = 1​
​ Возвращаем режим обновления​ ли при открытии​
​ СКАЗАНО:​ проверки данных из​ свойства ScreenUpdating в​Но мне как​

​ как при ошибке,​ — наверно «многабукав».​, Минут 10 собирал​ моргания стандартным способом​, привет!​
​Dima S​ На 32-битной системе,​ экрана в 99%​
​ не событийная процедура.​Второй​End Sub​ экрана при измененииСледуя​
​ двух подряд книг​

​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub update()​​ одного файла в​ нужном месте очень​

​ раз интересен был​​ но будет активны​ Но почему не​
​ куски кода, чтобы​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Application.ScreenUpdating = False​Как я понял​: а ScreenUpdating чем​
​ 2010 офис. А​ случаев в общем​Sub io()​True ‘ проверяем.​

​ran​​ Вашим реконаписать из​ избавится от мерцания​With Application ‘операции​ другом и дабы​ даже кстати. Т.е.​ ответ именно по​

​ кнопки «Continue», которая​​ выдается предупреждение ?​ сложилась хотя бы​Application.ScreenUpdating = True​ по переписке разработчиков​

​ не угодил?​​ в 64-битной 2010​

​ полезно.​​With Application​ Включено. А ведь​

​: А нигде!​​ №4 написал код:​ первой книги. Тоесть​ с приложением/отключаем для​ не получить эпилептический​
​ не стоит менять​ функции ScreenUpdating.​ продолжит выполнение кода​Guest_E​ приблизительная картинка.​Может быть, есть​ ОТСЮДА (инглиш), в​

​Слэн​
​ офис — на​
​paylevan​
​MsgBox .ScreenUpdating​
​ мы его отключали)​
​В том и​
​Application.ScreenUpdating = False​

​ первая книга должна​​ повышения скорости работы​ припадок от мерцания​

​ активный лист во​​Я только начинаю​ и кнопка «End»,​

​: Добрый день! Я​​В результате при​
​ еще какие-нибудь хитрости​
​ ранних версиях Excel​: для меня было​ 1/6 медленнее.​: Спасибо,​

​.ScreenUpdating = False​​False​ вопрос — почему​ ‘ Отключаем “мерцание”​ откриваться, но не​ макроса​

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

​ компания Microsoft разрешала​​ потрясающим, когда я​Не будем вдаваться​
​ber$erk​
​MsgBox .ScreenUpdating​
​Юрий М​
​ в одном случае​
​ окна Set База​
​ должна быть активной​
​.ScreenUpdating = False​
​ начале главной процедуры​

​ свойства. По скорости​ VBA, поэтому и​Evgeny_1​ роль или важность​ не добавилось​ ?​ разработчикам больший контроль​ оптимизацией алгоритма, вылизывая​

​ в подробности, но​​.​Exit Sub​
​: А теперь читаем​ продолжает работать, а​
​ = GetObject _​
​ даже на мгновение.​ ‘обновление экрана​ Application.ScreenUpdating = False​ ничего не выигрывается(если​ вопросы мои тривилальные.​: Господа, прошу прощения​
​ применения «ScreenUpdating =​SGerman​Спасибо за помощь​ над свойством​ буквально каждую строчку,​ по опыту можно​Возможно есть ещё​End With​ Димин пост от​ во втором -​ (PathName:=»C:Documents and SettingsПользовательРабочий​
​ И если возможно​

​.DisplayAlerts = False​​ , а в​ не сказать наоборот).​Дъмитръ, я полагал​ если вопрос где-то​ False»? (так сказать,​
​: «Макрос» — это​Hugo​Application.ScreenUpdating​ выжал 10% для​ сказать, что каждая​
​ функции по ускорению​End Sub​ 03.12.2011, 16:14​ нет!?​

​ столКнига1.xls») ThisWorkbook.Activate ‘​ то как?​
​ ‘вывод системных сообщений​
​ конце Application.ScreenUpdating =​ Если Вы хотите​
​ что ScreenUpdating отвечает​
​ был раскрыт, но​
​ для чего?) Заранее​
​ любой код, как​

​: Здравствуйте.​​. И можно было​ сортировки массива, а​ оптимизация это отдельный​ работы Excel?​Выполняя напрямую из​

planetaexcel.ru

Ускорение работы Excel-приложений.

​ran​​Юрий М​ Возвращаем указатель текущего​Например, так не​Папка = «полный​
​ True. Всё отлично​ заполнять данными из​ за обновление экрана​ прочитав все темы​ благодарен!​
​ я понял с​Покажите пример в​ его отключить и​ пришел ZVI и​ процесс, требующий отдельного​

​Мне кажется, будет​​ редактора VBA вы​
​: Да нет его!​

​: А мне ещё​​ приложения (для избежания​ проходит.​ путь папки»​
​ работало в оффисе​ других книг активный​ в целом, а​ в поиске по​Pavel55​
​ Вашей веселой пиктограммки.​ файле когда не​ само оно уже​ «простым» переопределением типа​ подохода.​ полезным собрать на​ не отключаете обновление​Я знаю, что​ вот это непонятно:​
​ различных глюков) Set​Application.ScreenUpdating = False​’———— Excel-файлы в​ 2007, но сейчас​

​ лист, используйте ScreenUpdating.​​ не только в​​ запросу (как в​​: Данное свойство отключает​
​Так вот, именно​ помогает.​ включается при определённых​
​ переменной сделал 40%​Основные принципы:​ этой странице все​ — иначе не​ надо вставлять включение.​If Not Intersect(Target,​ wb1 = Workbooks.Open(Filename:=ThisWorkbook.Path​ ‘ Отключаем “мерцание”​

​ этой папке ——————​​ обновили на 2016​ Если неактивный -​ выполняющемся VBA приложении…​ заголовке) ответа я​ обновление экрана (визуализацию)​ так я и​SGerman​ условиях. Однако в​хотя, конечно бывало,​-вычисление самых тормозных​ основные функции и​ смогли бы видеть​Но меня интересует​

​ Range(«A1»)) Is Nothing​​ & «Книга2») Application.ScreenUpdating​ окна Set wb1​Имя = Dir(Папка​ и, как результат,​
​ незачем, не нужно.​KuklP​ не нашел.​
​ и макрос намного​ делал ! В​
​:​​ последующих версиях компания​ что оптимизацией алгоритма​ мест(как правило обращение​​ приёмы, добавление и​

​ ход выполнения. А​​ не это, а​​ Then Exit Sub​​ = True ‘​ = Workbooks.Open(Filename:=ThisWorkbook.Path &​ & «*.xls*»)​ мерцание появилось. Прошу​The_Prist в двух​: 2. Это не​Вступление:​ быстрее выполняется, т.к.​ каждом «макросе» в​Hugo​
​ принудительно ввела «перезагрузку»​​ удавалось добиться ускорения​ к ячейкам, но​

​ использование которых помогает​​ вот с листа​ именно тот вопрос,​При изменении в​ Возвращаем режим обновления​ «Книга1») Application.ScreenUpdating =​:)

​Do While Имя​​ прощение за то,​ словах бы объяснил.​ функция, это свойство;​Имеется наипростейшая процедурка​ не тратятся ресурсы​ начале вырубал, в​, Проект слишком большой​
​ метода. Таким образом,​ в 200 раз..​ есть исключения; активация​ сделать исполнение макросов​ — да, отключается.​ который я задал!​

​ ячейке А1 НИЧЕГО​​ экрана при изменении​​ True ‘ Возвращаем​​ <> «»​ что не прилагаю​ У меня такого​3. как только​ смысл которой таков:​ компьютера на отображение​
​ конце — врубал​ — xls>800 Kb​ в новых версиях​ikki​​ листов, книг, ячеек);​​ более быстрым.​

​ran​​Может конечно это​
​ не произойдёт. Кроме​ База = NothingТоже​ режим обновления экрана​With .Workbooks.Open _​ файл ибо это​ дара нет.​ процедура закончилась, свойство​ есть открытая активная​ действий на экране​ отображение.​SGerman​ (там не понятно,​:​
​-переводим тормоз в​ber$erk​: Давайте попробую еще​ мой локальный глюк,​ выхода из процедуры,​ решает задачу. Кроме​ при изменении ThisWorkbook.Activate​
​(Filename:=Папка & Имя,​
​ конфиденциальная информация. Если​Evgeny_1​ автоматом возвращается в​ книга «расчет картона​…reply​
​И у меня​: Разобрался !!!​ каких именно) после​Слэн​ газ: исключаем все​: , смысла особого​ раз объяснить.​ но у меня​ конечно.​ того, код не​
​ ‘ Возвращаем указатель​ UpdateLinks:=True)​ кто-то стыкался с​: Я все понял​
​ true(и это правильно,​ (разработка), необходимо открыть​: Спасибо, Павел! Доходчиво​ все радостно моргало​

​Дело было в​​ того, как макрос​, а ссылки на​
​ лишние активации объектов;​ в этом нет​
​Добавляю в код​
​ после выхода по​Юрий М​
​ допускает появление кнопки​ текущего приложения (для​’здесь Ваш макрос​
​ такой проблемой при​ что вы хотели​ иначе пришлось бы​ в фоне книгу​ технически обьснил. А​ !​ том, что алгоритм​

​ отрабатывает — изменённая​​ ту тему случаем​ операции сравнения ячеек(как​
​ — тема со​ первой строкой​ строке​
​: Смотрите:​ «База» или «Книга1″​ избежания различных глюков)​ делает свое грязное​ переходе на новую​ донести по поводу​
​ перезапускать Экс в​ «productionplanR14» и снова​ на счет безопасности​
​Когда же все​ вложенный: «кнопка» вызывает​​ им настройка​​ не сохранилось?​ правило в циклах)​

​ временем уедет вниз.​​MsgBox Application.ScreenUpdating​If Target.Count >​Вы отключили обновление:​
​ на панели уведомлений,​
​ Set wb2 =​
​ дело​
​ версию оффиса, подскажите,​
​ ScreenUpdating. Спасибо вам​
​ случае любого сбоя,​ активировать книгу «расчет​ что-то есть в​ внутренние переключения убрал,​ функцию, та в​Application.ScreenUpdating​

​Слэн​​ и вычисления переводим​ Да и информация​
​Сколько я бы​ 1 Then Exit​Application.ScreenUpdating = False​ что может быть​ Workbooks.Open(Filename:=ThisWorkbook.Path & «Книга2»)​.Close SaveChanges:=True​
​ пожалуйста, как пофиксить​ за это.​ или забывчивости программиста);​ картона (разработка)».​ этом? Как-то расслышал​ моргание исчезло.​ свою очередь в​возвращается в прежнее​: вот:​ в массивы(с умом);​

​ эта в 98%​​ ни менял значение​ Sub​

​принудительно вышли, если​​ преимуществом.​Busine2009​End With​ данную ситуацию.​Неясным для меня​1. я предложил​Код таков:​ один раз?…(мол говорили​Вот так-то​:)
​ цикле другую функцию,​ русло.​ikki​ сводим обращение к​

​ случаев гостям не​​ в [A1], получаю​​возможность попасть на​​ более одной ячейки:​Относительно​: Код: Sub P1()​

​Имя = Dir​​Спасибо.​

​ осталась лишь одна​​ вариант, при котором​
​Sub ProductionPlan()​

planetaexcel.ru

Application.ScreenUpdating = 0 (Макросы/Sub)

​ что кто-то успеет,что-то​​Manyasha​ а та и​
​Особо отмечается, что​
​: спасибо.​ ячейкам листа к​
​ интересна — им​ MsgBox True, не​ любой лист Excel​If Target.Count >​
​База.Close SaveChanges:=Falseто этот​ Dim База As​
​Loop​

​vikttur​​ вещь — это​​ использование ScreenUpdating не​​Application.ScreenUpdating = False​
​ сделать!). Заранее огромное​: не дуйтесь. Если​ тоже в цикле​ если перевести выполнение​оч.хорошая тема.​ минимуму;​ нужно готовое решение,​ смотря на принудительный​ появляется только после​ 1 Then Exit​ код не записывал​ Excel.Workbook Set База​

​.ScreenUpdating = True​​: Попробовать создать пример.​
​ панель задач, в​
​ нужно.​
​'Application.ShowWindowsInTaskbar = False​
​ спасибо!..​
​ бы Вы поискали,​
​ — третью. И​ макроса в пошаговый​

​Nic70y​​-правильное объявление переменных(особенно​​ а старожилы итак​​ выход.​ выполнения​ Sub​ так как открытая​ = GetObject _​ ‘обновление экрана​ Удалите все секретное,​ которой «нажатой» (активной)​Evgeny_1​Application.Workbooks.Open («F:ProductionPlanR14.xls») ‘открываем​Igor67​ что такое​ кругом стоит true/false.​ режим (с помощью​: Отключаем обновление экрана​ массивы — рамер​ все об оптимизации​Но стоит мне​Application.ScreenUpdating = True​

​а обновление не​​ База нужна во​ (PathName:=»C:Documents and SettingsПользовательРабочий​
​.DisplayAlerts = True​ листы, с которыми​

​ показывается временная книга,​​: KukLP, спасибо, разобрался,​ необходимую книгу​: На работе написал​Call​ Когда все внутренние​ F8 клавиши выполнять​ в начале макроса,​
​ не должен быть​ знают (ну или​ скопировать 2 ячейки​Юрий М​

​ включили.​​ второй книге.​​ столБаза.xls») ‘Проверяем, что​​ ‘вывод системных сообщений​
​ макрос не работает,​ которую я открывал,​ буду использовать предложенную​Application.Workbooks(«расчет картона (разработка).xls»).Activate​ макрос с открытием​и поняли, что​ строчки переключения отображения​​ по 1-й строке​​в конце включаем.​ неоправданом велик);​ почти все :-))​ — можно мышем​: Покажите файл ТОЛЬКО​The_Prist​Ципихович Эндрю​ База открыта и​End With​ внутри макроса закомментировать​ а не та​ вами схему.​ ‘активируем изначальную книгу​ исходной, копированием и​​ написали, то тоже​​ закомментарил, мерцание исчезло.​ кода), то свойство​
​Вопрос — а​-при необходимости отключаем​vikttur​ по листу щелкать​ с этим фрагментом.​: Вопрос на засыпку:​: по большому счёту​​ посмотрим содержимое первого​​End Sub​ чего-нибудь. Возможно, выявите​ книга, которая в​KuklP​’Application.ShowWindowsInTaskbar = True​ закрытием, снятиями защиты​ бы посмеялись)​Всем спасибо !​Application.ScreenUpdating​ обязательно включать?​
​ отслеживание событий, обновление​​: Обработка ячеек листа​​ до посинения, ничего​Пытливый​ что делает эта​
​ в начале процедуры​ листа первой ячейки.​ВОТ КАК БЫЛО​ источник.​​ действительности является активной​​: А вот GetObject,​Application.ScreenUpdating = True​ и переходами. Комп​Цитата​ Проблема решена.​всегда будет True​Вроде как и​ экрана, вычисления, показ​ по сравнению с​ не происходит (в​: Ну так The_Prist​ строка?​а в конце​ MsgBox База.Worksheets(1).Cells(1, 1).Value​ СДЕЛАНО:​Radist_514​ на момент окончания​​ как раз функция:-)​​End Sub​
​ слабый, моргал как​SGerman, 12.07.2016 в​RAN​​ независимо от установленной​​ без включения, после​ предупреждений.​ обработкой данных в​ ячейку попасть не​ так и написал:​If Target.Count >​ ничего не пишут​ ‘Закрываем. База.Close SaveChanges:=False​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub update()​: Окей, обязательно попробую,​ макроса (по процедуре​ Ну, считайте занудой..​Изначально в процедуре​ сумашедший. Обрабатывается куча​ 19:10, в сообщении​

​: Есть.​​ разработчиком. И отслеживать​ завершения макроса он​
​Dima S​ массиве — тормоз.​
​ могу, курсор -​Если процедура завершается​
​ 1 Then Exit​В функции эту​ ‘Далее удаляем объектную​With Application​ спасибо! Думал, может​

excelworld.ru

Убрать мерцание экрана при выполнении кода (VBA+Excel)

​ приведенной в 1м​​ Все это я​
​ естественно не было​ формул. Столбцы на​ № 7200?’200px’:»+(this.scrollHeight+5)+’px’);»>У меня​
​200?'200px':''+(this.scrollHeight+5)+'px');">Call Макрос()​

​ реальное состояние этого​


​ обновляется.​: Не использовать Select​Вставка макросом формул​ стрелка) до того,​
​ «естественным путем» через​

​ Sub​​ строку не пишут​
​ переменную База. ‘Если​.ScreenUpdating = False​ кто-то уже сталкивался​

​ посте). Если например​​ беру из справки​​ строчек Application.ShowWindowsInTaskbar, которые​​ А — закончились.​вообще нет​

​включает обновление экрана,​​ свойства можно будет​
​Или я чего-то​ без надобности​ вместо вычисления в​ как в VBA​ End Sub, то​Для общего понимания:​И всё ОК,​ объектная переменная объявлена​.DisplayAlerts = False​ с такой же​ временную книгу просто​ — F1.​ в коде выше​
​ Мучался со вставкой​Call Macros, как​

​ и в этом​​ только с помощью​
​ не понимаю?​
​Range(«A1»).Select: Selection.Value =​ коде — тормоз.​ выполню​ обновление включается автоматом.​
​ если Вы вышли​ разве нет???​

​ внутри процедуры, ‘то​​Test2 = «C:Test22.xlsx»​
​ проблемой, в плане​ открыть и закрыть,​
​Evgeny_1​
​ помечены как комментарии.​

​ формул, их распространением​ и​
​ макросе его снова​ ввода булевой переменной,​Подскажите тупому пожалуйста.​ «Hello»​Отключили обновление экрана,​:)

​Application.ScreenUpdating = True​​Если «неестественным» -​​ из процедуры, завершая​​А по правильному​
​ это просто формальность,​Testing = Dir(Test2​ корня проблемы: это​ то в панели​
​: KukLP, я правильно​Результат вышеописанного кода​ на реальный диапазон​самих макросов​ нужно отключать.​

​ которая будет дублировать​​Roman777​​можно записать как​​ а тут нужно…​nerv​

​ через Exit Sub​​ её логически, т.е.​​ да нужно в​​ т.к. объектная переменная​ & «2.xls»)​ из-за перехода на​ задач активной (нажатой)​ понимаю что эта​ в экселе выполняется​ данных.​
​.​​Возврат в исходную​ значение свойства при​:​Range(«A1») = «Hello»Аналогично​Нет такого, чтобы​: Дмитрий, спасибо за​ автоматического включения обновления​
hands

​ дойдя до End​​ конце процедуры всё​ сама ‘удалится после​Do While Testing​ обновленный софт или​ книги после выполнения​
​ функция применима к​ правильно, то есть​А решение -​…только Function и​ процедуру — тоже.​ изменениях.​

​Nic70y​​ и с Activate.​​»примени вот это -​​ участие) Но если​ не происходит.​ Sub, то VBA​ же поставить в​
​ завершения процедуры. Лучше​ <> «»​ просто я натупил​:(

​ макроса вообще не​​ любому кол-ву открываемых​ запустив макрос в​ ScreenUpdating = False​ SubSub — это​
​SGerman​Упоминается, что «перезагрузка»​, Добрый день.​Когда записать макрос​ и счастье на​ честно, то я​nerv​
​ сам возвращает значение​ Труе​ всегда использовать, ‘чтобы​
​With .Workbooks.Open _​ где-то? Поэтому и​ будет…, хотя на​
​ книг/листов, из которых​

​ текущей открытой книге,​​Поставил формулы с​ и есть макрос.​: Уточнение.​​Application.ScreenUpdating​​Лично у меня​ макрорекордером там будет​ века!​
​ не понял :​​: А теперь читаем​ Application.ScreenUpdating в True.​то есть 1​​ не забыть это​​(Filename:=Test2 & 2,​ интересуюсь, если из-за​​ экране активной становится​​ нужно в кучу​
​ в фоне открывается​ двукратным запасом и​Макрос внутри другого​
​Везде стояло, конечно​свойства происходит, когда​ в любом случае​
​ множество таких конструкций.​
​"​
​ )​
​ Димин пост от​
​ Если же Вы​
​ раз в начале​

​ сделать тогда, когда​
​ UpdateLinks:=True)​
​ нового оффиса, то​
​ та книга, которую​
​ собрать информацию на​
​ 2я книга и​
​ отключил обновление.​
​ макроса можно вызвать​​ же:​​ задействуется другой макрос​ необходимость включить после​Если нужно вывести​paylevan​Правильно ли я​specool​ 03.12.2011, 16:14{/post}{/quote}Как плохо,​
​ принудительно завершили процедуру​​ Фальше и 1​​ это надо. Set​.Close SaveChanges:=True​ как пофиксить, чтобы​ я в конце​ итоговом листе активной​ активной остается 1я​
​Раньше пользователи дергались​​ так:​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Application.ScreenUpdating = False​ (?) или модуль.​ отключения остаётся, поскольку​ массив на лист,​:​
​ понимаю, что в​ что я не​ — то…короче ничего​ раз в конце​ База = Nothing​End With​ не тратить время​

​ процедуры собственно и​​ книги?​ книга. Однако в​ и пытались файлик​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub t1()​Application.ScreenUpdating = True​Помимо прочего нашёл​ всё-таки, с отключенным​

​ то лучше не​​ber$erk​​ коде ниже оно​​ умею читать!))) Спасибо,​
​ никуда не возвращается.​ на Труе и​ End Sub​Имя = Dir​ на долгие поиски.​ указал сделать активной.​Всмысле без принудительного​ панели задач почему​

excelworld.ru

ScreenUpdating. VBA

​ не однократно загубить,​​’код​и экран моргал​ в сети упоминания,​ обновлением не видно​ циклом в каждую​, если собрать всё​ должно отключаться и​

​ понял : )​​ran​ всё​Mishel915​Loop​Ігор Гончаренко​Эта ситуация исправляется​ свойства ScreenUpdating =​

​ то активной отображается​​ а теперь МАШИНА​End Sub​ как ненормальный :)​ что можно работать​ не только изменений,​ ячейку, а сразу​ воедино, то когда​ не включаться?​Юрий М​

​: Но ведь здесь​​Я почему так​: Спасибо за отзыв.​.ScreenUpdating = True​: не работал с​ только принудительным обновлением​ False у меня​ 2я книга, а​ СЧИТАЕТ и все​Sub t2()​Почему — так​ со свойством​ которые я выполняю​ весь массив в​
​ тема со временем​Если нет, то,​
​: Мало ли что​ в обоих случаях​ рассуждаю, потому что​
​Так тоже не​.DisplayAlerts = True​ офис 2016, тем​ панели задач после​ ничего мелькать не​ не первая.​
​ спокойно ждут.​t1’Вызываем t1​ и не понял.​
​Application.StatusBar​ в той или​ диапазон.​ уедет вниз, её​

​ пожалуйста, приведите пример​​ написал, Главное -​ принудительное завершение процедуры!​ надо пробовать в​ проходит. Применяю код:​End With​ не менее уверен:​

planetaexcel.ru

Есть ли команда разового обновления экрана в Excel

​ выполнения макроса (свойством​​ будет при выполнении​При убирании ковычек​По времени не​
​End Sub​ Такое впечатление, что​и оно всегда​ иной ячейке, но​Юрий М​ легко будет найти​ когда, когда оно​ прочитать :-) А​Я специально удалил​
​ разных процедурах и​Sub Макрос_Щелкнуть() Dim​

​End Sub​​1) что Application.ScreenUpdating​​ ShowWindowsInTaskbar). Когда процедура​​ макроса на фоне?​
​ со строчек Application.ShowWindowsInTaskbar,​ скажу, по нервам​а можно так:​ false на false​ будет отображаться в​

​ и просто какая​​: И я немного​ по тематическим запросам​ не включается)​ у Саши утро.​

​ весь код, оставив​​ глаза это не​ База As Excel.Workbook​Предварительно активировал макросы​ работает там так​ написана с принудительным​KuklP​ после выполнения макроса,​
​ вообще 0.​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub t1()​ дает true​ экселе с учётом​ ячейка выделена.​ добавлю:​ в любом поисковике.​Private Sub Worksheet_SelectionChange(ByVal​ran​ только строки принудительного​

CyberForum.ru

Application.ScreenUpdating и панель задач

​ техника надо сажать​​ Dim wb1 As​ и сделал их​ же как и​ обновлением панели задач,​: Не правильно. Если​ в панели задач​А то раньше​’код​

​SGerman​
​ изменений даже при​Nic70y​- стараться использовать​ Поэтому, всё же,​ Target As Range)​: .​ выхода.​ робота чтобы считал​ Workbook Set База​

​ доступными. Потом зашел​

​ во всех предыдущих​
​ то активное книга​
​ Ваш итоговый лист​
​ активным показывается правильная​ — придумал фигню​
​End Sub​:​
​ выключенном обновлении экрана.​
​: ну например​
​ конструкцию With -​

​ польза, мне кажется,​With Application​Юрий М​Если выходить по​ мерцание​

​ = GetObject _​ в Visual Basic​ версиях​ экселя совпадает с​ неактивен и в​ книга (изначальная из​ нам, а она​Sub t2()​RAN​ Опробовал — можно​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub tipakod()​ End With;​ есть.​

​Debug.Print .ScreenUpdating ‘​: Что нужно выполнить,​ строке​ran​ (PathName:=»C:Documents and SettingsПользовательРабочий​ нажал Insert -​2) проблема не​ «нажатой» книгой на​

​ это время вы​
​ которой и запускался​ не работает…​Call t1’Вызываем t1​,​ задавать текст строки,​

​Application.ScreenUpdating = 0​- максимально использовать​

​vikttur​​ всегда True​ чтобы «сломалось»?​If Not Intersect(Target,​: Приветствую!​ столКнига1.xls») Set wb1​ Module. Появилось окошко,​

​ в переходе на​​ панели задач.​ меняете на нем​

​ макрос)​Guest_E​End Sub​У меня вообще​ которая в моём​[a1] = «8»​ переменные — один​

​, спасибо большое за​.ScreenUpdating = False​nerv​

​ Range(«A1»)) Is Nothing​​Помогите разобраться с​
​ = Workbooks.Open(Filename:=ThisWorkbook.Path &​ куда и вставил​
​ новую версию, а​Evgeny_1​ данные(берете из других​
​Вопрос:​
​: Спасибо Igor, обяснил​
​Андрей (​ нет Call Macros,​
​ 2013-м Экселе показана​

​End Sub​​ раз вычислили (присвоили)​

​ практические рекомендации.​Exit Sub​: Пытливый, Юрий, а​ Then Exit Sub​ непонятным​

​ «Книга2») Set База​ выше описанный макрос.​ проблема в Вашем​: Я всетаки с​

​ книг), то открытие-закрытие​почему Application.ScreenUpdating так​ на примерах, да,​RAN​

​ как и самих​ в самом низу,​и все ок.​ значение, а затем​ber$erk​End With​

​ теперь скажите мне​​то Application.ScreenUpdating возвращается​Private Sub Worksheet_Change(ByVal​
​ = Nothing End​ Жму Play ниче​ коде​ дома скину скриншот​ этих книг не​ работает странно, как​ хорошое решение пришло​) рассказал про особенность​
​ макросов.​ рядом с кнопкой​не, наверное я​ обращаться только к​

​: не в обиду​​End Sub​ почему здесь результат​ в True, а​

​ Target As Range)​​ SubПеред открытием Книги2​ не происходит(думал, что​достаточно сделать так:​ проблемы с панелью​ повлияет на обновление​ избежать этого «бага»​

​ людям! Я тебя​​ 2-го способа (Кстати,​Весь код -​ записи макроса. Также​ все-таки туплю…​ ним.​ будет сказано, но​Юрий М​ тот же самый)​ если по строке​

​Application.ScreenUpdating = False​ «мерцает» Книга1, тоесть​ операция маленькая может​ Sub X1 Application.ScreenUpdating​ задач.​ экрана, Вы никак​

​ без прописывания дополнительных​​ тоже признаю как​ я про нее​ на листах, формах​ в обход отключенного​Roman777​- принудительный выход​ Вы пользовались поиском​: У меня такого​Не утро, просто​If Target.Count >​If Target.Count >​ База.​ быстро сделал). Закрыл​ = False X2​Юрий М​ не сможете отследить​ строчек с Application.ShowWindowsInTaskbar.​ знатока форума!​ не знала. Андрей,​ и модулях -​ обновления экрана работает​:​ из циклов, если​ прежде чем начать​ не происходит -​ с одного языка​ 1 Then Exit​ 1 Then Exit​Разница в том,​ все сохраняя (но​

​ ‘ и все​​: Далась Вам эта​ это. Однако, изменение​Надеюсь описал непонятный​

​AndreA SN​ спасибо за информацию!​ только Function и​ и обновление внешнего​Nic70y​

​ достигнут результат.​​ эту тему?​
​ могу сразу после​ на другой пока​
​ Sub​ Sub​ что при использовании​
​ при сохранении были​ что написано тут​ панель задач :-)​
​ данных на активном​ момент доступно…​: Допустим, я отключил​)​ Sub​ вида формы с​, Что-то тут не​- при использовании​Dima S​ копирования/вставки активировать любую​ еще туго переключаюсь)​то нет.​If Not Intersect(Target,​ GetObject кнопка «База»​ кучи каких-то надписей).​ после Х2 будет​ Представьте, что она​ листе НЕИЗБЕЖНО вызовет​
​Evgeny_1​ обновление Application.screenupdating =​Еще одна особенность:​krosav4ig​

​ помощью метода​​ чисто, у меня​ вложенных Если (If)​: Отключили обновление экрана,​ ячейку.​ Параллельно на js​

​Вопрос возник в​ Range(«A1»)) Is Nothing​ или «Книга1» на​ Зашел в нужный​ мигать по страшной​ вообще не отображается.​ ScreenUpdating, если он​: Пытаюсь прикрепить скриншот​ false​Application.ScreenUpdating​:​.RePaint​ код отрабатывает, а​первой​ а тут нужно…Вот-вот​paylevan​ сижу мастерю :​ процессе разбирательства с​ Then Exit Sub​ панели уведомлений отсутствует​ файл который должен​ силе Application.ScreenUpdating =​Guest​ не установлен в​ проблемы — страница​Но потом мне​
​относится только к​SGerman​.​ лист остаётся пустым,​(внешней) проверкой сразу​ — если весь​: Здравствуйте. Прошу поделиться​ )​ кодом, превая строка​End Sub​ (что тоже хорошо).​

​ был обновиться, но​​ True end sub​: Мне эта панель​ False. Такого не​ с ответом виснет​

​ нужно в определенный​​ приложению Excel. Если​, ну вы хотя​Возвращаясь к изначальному​ до тех пор​

​ отсекать ненужное.​​ код все делает​ функциями, а также​Sub io()​ которого​Если изменить А1,​ Без использования GetObject​ он не обновился​ Sub X2 Application.ScreenUpdating​ задач действительно не​ произойдет, если не​ и скриншот вместе​ момент просто обновить​ Вы внутри макроса​ бы код покажите​ вопросу. Судя по​ пока не включу​Hugo​ через Ж…, то​ приёмами, которые помогают​With Application​Application.ScreenUpdating = False​ то все продолжает​ кнопка «Книга1» на​ НИЧЕРТА!​ = False …​ сдалась, просто я​

​ делать Ваш итоговый​ с постом не​ экран, чтобы посмотреть,​ используете, например, word,​RAN​

planetaexcel.ru

Отключение обновление экрана

​ всему, да, включать​​ скринАпдейтинг… и честно​
​: Да, точно -​ отключение обновлений экрана​ ускорить выполнение макросов.​Debug.Print .ScreenUpdating​последняя​ работать, а если​ панели уведомлений присутствует.​Формуляр​ Application.ScreenUpdating = True​ пишу не только​ лист активным, либо​ загружается…​ — чего там​ в нем экран​:​крайне желательно​ говоря, не пойму,​ если в цикле​ тут не поможет.​К примеру, чтобы​.ScreenUpdating = False​Application.ScreenUpdating = True​ скопировать и вставить​Busine2009​: Так зачем вы​ end Subа универсально​ для себя код​ все же прямо​ТолькоУчусь​
​ у меня натворилось.​

​ будет обновляться.​​Цитата​. Ведь поведение программы​ почему вы могли​ часто используется проверка​Как по мне,​ экран не обновлялся​Exit Sub​

​а внутри кода​​ 2 ячейки, то​:​ весь его код​ это пишется так​ но и для​ указав ScreenUpdating =​: Объясню как сам​ И ничего дальше​Цитата​SGerman, 12.07.2016 в​ разработчики меняли со​ бы видеть результат​and…and…and​ то наверное в​ при каждом исполнении​

​End With​​ — прерывания.​ требуется принудительное включение​Mishel915​
​ искаверкали?​ Sub X2 Dim​ других людей, которые​ False. Как я​ понимаю это :)​
​ не делать. Вычислений​SGerman, 12.07.2016 в​ 19:10, в сообщении​ временем и нет​ (если изначально ячейка​
​то использовать​ большинстве случаев для​ процесса, я использую​End Sub​nerv​ обновления экрана.​,​Всё, что требовалось,​ aSU aSU =​ вообще далеки от​ упоминал, «как только​Метод «Application.ScreenUpdating» отвечает​ в книге нет.​ 19:35, в сообщении​ № 7200?’200px’:»+(this.scrollHeight+5)+’px’);»>Весь код​ никакой уверенности, что​ А1 была пуста).​if then​ ускорения работы макроса​ строку:​ran​: Всем добрый день)​Юрий М​обложите 4 строку​ указать в константе​ Application.ScreenUpdating: Application.ScreenUpdating =​

planetaexcel.ru

Макрос для автоматического обновления файлов (Требуется помощь! Срочно!)

​ VBA. И ради​​ процедура закончилась, свойство​ за обновление экрана​Есть ли такая​ № 12200?’200px’:»+(this.scrollHeight+5)+’px’);»>В каждом​ — на листах,​ во всех версиях​ Мб у Вас​if then​ нужна оптимизация кода,​
​Application.ScreenUpdating = FalseКакие​: Скопировать и вставить​Объясните мне, пожалуйста,​: А всё потому,​ кода в​ путь:​ False … Application.ScreenUpdating​
​ их спокойствия я​ автоматом возвращается в​
​ самого "Excel", но​
​ команда обновления экрана?​ "макросе" в начале​ формах и модулях​ свойство будет работать​
​ в коде всё-таки​if then​
​ а не вкл/выкл.​ ещё желательно добавить​
​ [b5:b6]​ зачем включать обновление​
​ что строка Application.ScreenUpdating​#3​
​200?'200px':''+(this.scrollHeight+5)+'px');">Папка = "C:Test2"​ = aSU end​
​ пытаюсь сделать так,​ true", но хорошим​
​ не других приложений.​
​RefSol​ вырубал, в конце​
​ - только Function​ одинаково. Причём в​ есть включение, или​
​располагая проверки в​
​paylevan​
​ строки в VBA-код,​
​Юрий М​
​ экрана : )​ = False срабатывает​
​командой​Дмитрий​
​ Subа еще ошибки​
​ чтобы все для​

​ тоном будет вернуть​ Например, удаление значений​
​:​
​ — врубал​
​ и Sub​
​ официальной документации нет​
​ действие, после которого​
​ порядке от более​:​
​ чтобы убыстрить, в​: Скопировал, вставил -​
​Запустите два раза.​
​ до принудительного выхода​ScreenUpdating​
​: Для англоязычной версии​
​ отследить, чтобы дело​
​ них было как​
​ его директивно -​
​ в ячейках, строк​
​AndreA SN​
​Application — относится​
​Цитата​
​ никакого уточнения о​ Application.ScreenUpdating становится равным​ редкого условия к​ber$erk​ целом, работу Excel-приложения?​ что дальше?​Sub io()​ из процедуры (Then​.​ Excel также все​ дошло до выполнения​ можно проще и​ Application.ScreenUpdating = True.​ и т.д.​, попробуйте сделать так:​ к запущенному приложению​SGerman, 12.07.2016 в​ том, как метод​ True (если такие​ более частому (обычно​

​, конечно пользовался, но​​ber$erk​ran​With Application​
​ Exit Sub). А​И после 6​ оставлять ?​
​ последней строки и​

​ привычнее, если они​​Evgeny_1​А метод «Application.ShowWindowsInTaskbar»​Application.screenupdating = true​

excelworld.ru

​ Excel, необязательно вырубать​

если печать производится внутри кода, то эту строку желательно вставить сразу после строки, выводящей лист на печать(при условии, что печать не происходит в цикле. В этом случае — по завершению цикла печати).
На всякий случай можно отключить отображение информации в строке статуса Excel (в каких случаях там вообще отображается информация и зачем можно узнать в статье: Отобразить процесс выполнения). Хоть это и не сильно поедает ресурсы — иногда может все же ускорить работу кода:

Главное, что следует помнить — все эти свойства необходимо включить обратно после работы кода . Иначе могут быть проблемы с работой внутри Excel. Например, если забыть включить автопересчет формул — большинство формул будут пересчитывать исключительно принудительным методом — Shift+F9. А если забыть отключить обновление экрана — то есть шанс заблокировать себе возможность работы на листах и книгах. Хотя по умолчанию свойство ScreenUpdating и должно возвращаться в True, если было отключено внутри процедуры — лучше не надеяться на это и привыкать возвращать все свойства на свои места принудительно. По сути все это сведется к нескольким строкам:

‘Возвращаем обновление экрана Application.ScreenUpdating = True ‘Возвращаем автопересчет формул Application.Calculation = xlCalculationAutomatic ‘Включаем отслеживание событий Application.EnableEvents = True

Как такой код выглядит на практике. Предположим, надо записать в цикле в 10 000 строк значения:

Sub TestOptimize() ‘отключаем обновление экрана Application.ScreenUpdating = False ‘Отключаем автопересчет формул Application.Calculation = xlCalculationManual ‘Отключаем отслеживание событий Application.EnableEvents = False ‘Отключаем разбиение на печатные страницы ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False ‘Непосредственно код заполнения ячеек Dim lr As Long For lr = 1 To 10000 Cells(lr, 1).Value = lr ‘для примера просто пронумеруем строки Next ‘Возвращаем обновление экрана Application.ScreenUpdating = True ‘Возвращаем автопересчет формул Application.Calculation = xlCalculationAutomatic ‘Включаем отслеживание событий Application.EnableEvents = True End Sub

Разрывы печатных страниц можно не возвращать — они тормозят работу в любом случае.
Следует избегать циклов, вроде Do While для поиска последней ячейки . Часто такую ошибку совершают начинающие. Куда эффективнее и быстрее вычислять последнюю ячейку на всем листе или в конкретном столбце без этого тормозного цикла Do While. Я обычно использую

другие варианты определения последней ячейки я детально описывал в статье: Как определить последнюю ячейку на листе через VBA?

Для более опытных пользователей VBA я приведу несколько решений по оптимизации кодов в различных ситуациях:

Sub TestOptimize_Array() ‘Непосредственно код заполнения ячеек Dim arr, lr As Long ‘запоминаем в массив одним махом все значения 10000 строк первого столбца arr = Cells(1, 1).Resize(10000).Value ‘если нужно заполнение для двух и более столбцов ‘arr = Cells(1, 1).Resize(10000, 2).Value ‘или ‘arr = Range(Cells(1, 1),Cells(10000, 2)).Value ‘или автоматически вычисляем последнюю ячейку и заносим в массив данные, начиная с ячейки А3 ‘llastr = Cells(Rows.Count, 1).End(xlUp).Row ‘последняя ячейка столбца А ‘arr = Range(Cells(3, 1),Cells(llastr, 2)).Value For lr = 1 To 10000 arr(lr,1) = lr ‘заполняем массив порядковыми номерами Next ‘Выгружаем обработанный массив обратно на лист в те же ячейки Cells(1, 1).Resize(10000).Value = arr End Sub

Но здесь следует учитывать и тот момент, что большие массивы могут просто вызвать переполнение памяти. Наиболее актуально это для 32-битных систем, где на VBA и Excel выделяется памяти меньше, чем в 64-битных системах

Избегать присвоения переменным типа Variant . Хоть соблазн и велик — этот тип забирает много памяти и в дальнейшем замедляет работу кода. Так же для объектных переменных следует избегать по возможности безликого глобального типа Object и применять конкретный тип:

Как отключить обновление экрана для другого приложения (блокнот)

4 Badan [2016-12-09 12:55:00]

Я написал макрос в vba, который открывает текстовый файл с помощью блокнота, выбирает все txt и копирует его в Excel. Я должен обрабатывать около 100 файлов ежедневно таким образом, и я хочу избавиться от мигающих изображений, которые я наблюдаю. Код работает, но проблема в том, что команда

Не работает с записной книжкой. Я могу использовать только обычный фокус, иначе код не работает. Как я могу выполнить код ниже, не заметив, что файл блокнота открыт и обработан?

Я не мог найти никакого рабочего решения.

excel-vba csv notepad

Вот быстрый ответ, как запустить Notepad, но скрыть окно и использовать vbHide вместо vbNormalFocus в вашей команде Shell :

Но я очень сомневаюсь, что SendKeys будет работать над невидимым окном.

Итак, это не ответ на вопрос, но вы считаете, что используете FileSystemObject и просто читаете файл без фактического открытия Notepad.exe ?

Код будет работать с акцентированными символами, например. мой тестовый текстовый файл:

Насколько я знаю, Application.ScreenUpdating применим только к вашему сеансу Excel, а не к другим программам, запущенным в Windows. Таким образом, чтобы фактически остановить появление этих окон — , но все еще можно прочитать содержимое окна, вам придется сделать что-то достаточно сложное с Windows API. Использовать FileSystemObject много, проще.

0 Badan [2016-12-12 11:37:00]

Наконец-то я нашел очень элегантное решение, которое может обрабатывать внешние приложения. Все, что вам нужно, это Роберт Шутт для написания этого шедеврального кода. Это делает блокнот размером 1 пиксель, поэтому никаких мигающих изображений не наблюдается. Это выглядит довольно сложно для меня, но это спасло мой день:

How to dou

Поскольку ваши макросы Excel становятся все более надежными и сложными, вы можете обнаружить, что они теряют производительность. При обсуждении макросов слово производительность обычно является синонимом speed . Скорость — это то, как быстро ваши процедуры VBA выполняют свои намеченные задачи. Ниже приведены десять способов помочь сохранить макросы Excel с оптимальным уровнем производительности.

Расчет листового листа

Знаете ли вы, что каждый раз, когда ячейка, которая влияет на любую формулу в вашей электронной таблице, изменяется или обрабатывается, Excel пересчитывает весь рабочий лист? В таблицах с большим количеством формул это поведение может резко замедлить работу ваших макросов.

Вы можете использовать Приложение. Свойство Calculate, чтобы сообщить Excel переключиться на ручной режим расчета. Когда рабочая книга находится в режиме ручного вычисления, рабочая книга не будет пересчитываться до тех пор, пока вы явно не выполните расчет, нажав клавишу F9.

Поместите Excel в ручной режим расчета, запустите свой код и затем вернитесь в автоматический режим расчета.

Установка режима вычисления обратно в xlCalculationAutomatic автоматически приведет к пересчету рабочего листа, поэтому нет необходимости нажимать клавишу F9 после запуска макроса.

Отключение обновления экрана листа

Вы можете заметить, что когда ваши макросы запускаются, на вашем экране происходит небольшое количество мерцания. Это мерцание — это Excel, пытающийся перерисовать экран, чтобы показать текущее состояние рабочего листа. К сожалению, каждый раз, когда Excel перерисовывает экран, он занимает ресурсы памяти.

Вы можете использовать Приложение. ScreenUpdating свойство, чтобы отключить обновления экрана, пока ваш макрос не завершится. Отключение обновления экрана экономит время и ресурсы, позволяя макросу работать немного быстрее. После того, как ваш макрокоманда завершен, вы можете снова включить обновление экрана.

После того, как свойство ScreenUpdating вернётся к True, Excel автоматически вызовет перерисовку экрана.

Отключение обновлений строки состояния

Строка состояния Excel, которая отображается в нижней части окна Excel, обычно отображает ход определенных действий в Excel.Если ваш макрос работает с большим количеством данных, строка состояния займет несколько ресурсов.

Важно отметить, что отключить обновление экрана отдельно от выключения отображения строки состояния. Строка состояния будет продолжать обновляться, даже если вы отключите обновление экрана. Вы можете использовать Приложение. Свойство DisplayStatusBar для временного отключения любых обновлений строки состояния, что еще больше улучшает производительность вашего макроса:

Указание Excel на игнорирование событий

Вы можете реализовать макросы как процедуры событий, указывая Excel на запуск определенного кода при изменении рабочего листа или рабочей книги.

Иногда стандартные макросы вносят изменения, которые вызывают процедуру события. Например, если у вас есть стандартный макрос, который манипулирует несколькими ячейками в Sheet1, каждый раз, когда ячейка на этом листе изменяется, ваш макрос должен приостанавливаться, пока выполняется событие Worksheet_Change.

Вы можете добавить еще один уровень повышения производительности, используя свойство EnableEvents, чтобы заставить Excel игнорировать события во время запуска макроса.

Перед запуском макроса установите для свойства EnableEvents значение False. После того, как ваш макрокоманда закончен, вы можете вернуть свойство EnableEvents значение True.

Скрытие разрывов страниц

Каждый раз, когда ваш макрос изменяет количество строк, изменяет количество столбцов или изменяет настройку страницы рабочего листа, Excel вынужден занять время, перерасчитывая разрывы страниц на листе.

Вы можете избежать этого поведения, просто скрыв разрывы страниц перед запуском своего макроса.

Установите для свойства листа DisplayPageBreaks значение False, чтобы скрыть разрывы страниц. Если вы хотите продолжать показывать разрывы страниц после запуска макроса, установите для свойства листа DisplayPageBreaks значение True.

Приостановка обновлений сводной таблицы

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

Вы можете улучшить производительность своего макроса, приостановив перерасчет сводной таблицы до тех пор, пока не будут сделаны все изменения поля поворота. Просто установите PivotTable. Свойство ManualUpdate для True, чтобы отложить пересчет, запустите свой макрокоманд и затем установите сводную таблицу. Свойство ManualUpdate вернется к False, чтобы вызвать пересчет.

Очистка от копирования и вставки

Важно помнить, что хотя Macro Recorder экономит время, написав код VBA для вас, он не всегда записывает наиболее эффективный код. Ярким примером является то, как Macro Recorder захватывает любое действие копирования и вставки, которое вы выполняете во время записи.

Вы можете немного увеличить свои макросы, вырезав посредника и выполнив прямую копию из одной ячейки в ячейку назначения. Этот альтернативный код использует аргумент Destination для обхода буфера обмена и копирования содержимого ячейки A1 непосредственно в ячейку B1.

Если вам нужно скопировать только значения (не форматирование или формулы), вы можете повысить производительность еще больше, избегая при этом метода копирования. Просто установите значение ячейки назначения на то же значение, которое находится в исходной ячейке. Этот метод примерно в 25 раз быстрее, чем при использовании метода Copy:

Если вам нужно скопировать только формулы из одной ячейки в другую (а не значения или форматирование), вы можете установить формулу ячейки назначения той же формуле, содержащейся в исходной ячейке:

Использование оператора With

При записи макросов вы часто будете манипулировать одним и тем же объектом более одного раза. Вы можете сэкономить время и повысить производительность, используя оператор With для выполнения нескольких действий на данном объекте за один снимок.

Оператор With, используемый в следующем примере, сообщает Excel применять все изменения форматирования за один раз:

Привычка к чередованию действий в операторы With не только ускорит выполнение макросов, но и упростит чтение вашего макрокода.

Избегание метода Select

Macro Recorder предпочитает использовать метод Select для явного выбора объектов, прежде чем предпринимать действия над ними. Как правило, нет необходимости выбирать объекты перед их работой. Фактически, вы можете значительно улучшить производительность макросов, не используя метод Select.

После записи ваших макросов, сделайте привычкой изменять сгенерированный код, чтобы удалить методы Select. В этом случае оптимизированный код будет выглядеть следующим образом:

Обратите внимание, что ничего не выбрано.Код просто использует иерархию объектов для применения необходимых действий.

Ограничение поездок на рабочий лист

Еще один способ ускорить работу с макросами — ограничить количество ссылок на данные рабочего листа в вашем коде. Всегда менее эффективно захватывать данные из рабочего листа, чем из памяти. Другими словами, ваши макросы будут работать намного быстрее, если им не придется многократно взаимодействовать с рабочим листом.

Например, следующий простой код заставляет VBA непрерывно возвращаться к листам («Лист1»). Range («A1»), чтобы получить номер, необходимый для сравнения, выполняемого в инструкции If:

Более эффективным способом является сохранение значения в листах («Лист1»). Range («A1») к переменной MyMonth. Таким образом, код ссылается на переменную MyMonth вместо рабочего листа:

Рассмотрите возможность использования переменных для работы с данными в памяти, а не напрямую со ссылкой на рабочие листы.

Excel vba: Почему обновление экрана не обновляется, прежде чем отключать обновление экрана.

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

Когда я выключаю второй элемент, ячейка обновляется. Как я могу обновить ячейку, а затем отключить обновление экрана?

EDIT: обновление Экран уже верно, когда mainSub начинается; Комментируя setupApp sub out , он помогает, потому что он явно запускается раньше, чем ячейки редактируются несколько позже.

Создан 30 авг. 17 2017-08-30 13:36:04 Ans

Есть ли приложение.ScreenUpdating = False в getStateNames? – Moosli 30 авг. 17 2017-08-30 14:27:07

@Moosli Нет, нет – Ans 30 авг. 17 2017-08-30 14:32:24

Хорошо, давайте отправимся в Кахт. Вы можете увидеть это в комментариях в моем ответе. – Moosli 30 авг. 17 2017-08-30 14:36:50

Я действительно не понимаю, почему это не работает. Но вы можете попытаться вызвать SetupApp с помощью инструкции If. Для этого вам нужно привязать editSub к функции и в конце просто вернуть истинное значение. Что-то вроде этого:

Второе решение

Вы можете попытаться форсировать события с DoEvents для обновления экрана.

Или Помещенный DoEvents сразу после того, как вы написаны в клетках.

Если это не работает, вы можете попробовать метод Wait:

Первое решение

ли судимое вам повернуть ScreenUpdating на Перед выполнением Sub?

Создан 30 авг. 17 2017-08-30 13:50:20 Moosli

Не помогает. Экран updatin ** уже ** истинен при запуске суб. Комментирование второй суб ** помогает **, потому что она, очевидно, выполняется раньше, чем нужно. – Ans 30 авг. 17 2017-08-30 13:51:44

Сколько кода в editSub? Becuase, если есть только несколько строк, может быть, что UpdateEvent должен замедляться, и он будет отключен до обновления экрана. – Moosli 30 авг. 17 2017-08-30 13:54:33

Довольно много строк. Он берет некоторые данные, проверяет их, добавляет в массив и только затем редактирует ячейки со значениями из массива. – Ans 30 авг. 17 2017-08-30 13:56:28

@Ans Хорошо, я добавил мой Awnser – Moosli 30 авг. 17 2017-08-30 14:05:06

К сожалению, ни то, ни другое не помогает . Ожидание просто приводит к более длительному времени выполнения, в то время как ячейки все еще пусты, «DoEvents» ничего не влияет. – Ans 30 авг. 17 2017-08-30 14:14:20

Можете ли вы опубликовать код из editSup? – Moosli 30 авг. 17 2017-08-30 14:19:49

Я редактировал вопрос. – Ans 30 авг. 17 2017-08-30 14:22:53

Копилка знаний…..

Ускоряем выполнение VBA кода, а так же убираем ненужные уведомления (всплывающие окна).

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

Excel.Application.ScreenUpdating = False ‘убирает обновление экрана. Можно использовать почти всегда — лишняя нагрузка на процессор.

Excel.Application.DisplayAlerts = False ‘убирает всплывающие окна. Совсем. Использовать аккуратно.

Excel.Application.EnablEevents = False ‘убирает обработку событий в Excel. События необходимо отключать для исключения зацикливания или выполнения незапланированных действий. Например при внесении одним макросом значения на лист и лишнего (не нужного) выполнения другого макроса по обработки события добавления значения на лист — который, как вариант, рассчитан на ручной ввод. Использовать только при необходимости.

Excel.Application.Calculation = xlCalculationManual ‘убирает автопересчет формул и зависимых от них объектов. Можно и нужно использовать почти всегда — лишняя нагрузка на процессор, особенно если формулы использующие массивы или поиск.

Не забываем ОБЯЗАТЕЛЬНО все вернуть обратно, чтобы пользователи не ругались = ) :

Excel.Application.ScreenUpdating = True
Excel.Application.DisplayAlerts = True
Excel.Application.EnableEvents = True
Excel.Application.Calculation = xlCalculationAutomatic

Навигация по записям

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Похожие статьи

Благодарю всех за пояснения.

БМВ, Ваш пример и правда гораздо нагляднее.
sokol92, Вы  правы, думаю и у меня так и было раньше, а проблема не в  этом. Значение  у меня в False переключается, а вот обновление экрана  при этом по  прежнему происходит.
Дмитрий(The_Prist) Щербаков, Ваши пояснения особо в тему, потому что это как раз то, что мне нужно.

Моя «основная» процедура выглядит примерно так:

Код
Private Sub General()
Application.ScreenUpdating = False
'...
Call SubProcedure
'...
Debug.Print Application.ScreenUpdating
Application.ScreenUpdating = True
End Sub

Значение свойства ScreenUpdating меняется только дважды — на входе переключается на False и на выходе обратно на True (что, как я понял лучше всё-таки делать). Я проверял в разных подпроцедурах сохраняет ли свойство ScreenUpdating значение False — и оно везде сохраняется вплоть до возвращения обратно в головную процедуру. Т.е. насколько я понимаю, код должен работать как и задумано — обновление экрана выключено в ходе выполнения всех подпроцедур.

Однако несмотря на то, что ScreenUpdating=False, обновление экрана все равно происходит, это заметно чисто визуально. Хотя до недавнего времени этот же файл работал нормально (изменений в коде не производилось). Поэтому я и подумал, что ScreenUpdating включается при выходе из подпроцедур, хотя теперь понимаю что это не так.

Любопытный момент: если убрать строчку Application.ScreenUpdating = True из головной процедуры, всё начинает работать корректно (обновление экрана включается только в самом конце — при выходе из головной процедуры — автоматически).

Я не могу найти никакого логичного объяснения такому поведению приложения.

Содержание

  1. VBA — отключить обновление экрана
  2. Отключить обновление экрана
  3. Включить обновление экрана
  4. Пример обновления экрана VBA
  5. Обновление экрана Обновить
  6. Настройки VBA — код ускорения
  7. VBA – Turn off Screen Updating
  8. Disable ScreenUpdating
  9. Enable ScreenUpdating
  10. VBA ScreenUpdating Example
  11. ScreenUpdating Refresh
  12. VBA Settings – Speed Up Code
  13. VBA Coding Made Easy
  14. VBA Coding Made Easy
  15. VBA Code Examples Add-in
  16. Excel vba отключить обновление экрана
  17. Как отключить «мерцание» окна
  18. Обновление экрана
  19. Ускорение работы Excel-приложений.
  20. Application.ScreenUpdating = 0 (Макросы/Sub)
  21. Убрать мерцание экрана при выполнении кода (VBA+Excel)
  22. ScreenUpdating. VBA
  23. Есть ли команда разового обновления экрана в Excel
  24. Application.ScreenUpdating и панель задач
  25. Отключение обновление экрана
  26. Макрос для автоматического обновления файлов (Требуется помощь! Срочно!)

VBA — отключить обновление экрана

Как бы здорово это ни выглядело, наблюдая, как ваш макрос VBA манипулирует экраном, вы можете помочь вашему макросу работать быстрее, если отключите (отключите) ScreenUpdating.

Отключить обновление экрана

1. Чтобы отключить ScreenUpdating, в начале кода поместите эту строку:

1 Application.ScreenUpdating = False

Включить обновление экрана

2. Чтобы снова включить ScreenUpdating, в конце кода поместите эту строку:

1 Application.ScreenUpdating = True

Пример обновления экрана VBA

Тогда ваша процедура будет выглядеть так:

1234567891011 Sub ScreenUpdating_Example ()Application.ScreenUpdating = False’Сделай что-нибудьДиапазон («a1»). Копировать диапазон («b1»)Диапазон («a2»). Копировать диапазон («b2»)Диапазон («a3»). Копировать диапазон («b3»)Application.ScreenUpdating = TrueКонец подписки

Обновление экрана Обновить

Отключение ScreenUpdating заставит ваш код VBA работать НАМНОГО быстрее, но это также сделает вашу работу более профессиональной. Конечные пользователи обычно не хотят видеть закулисные действия ваших процедур (особенно, когда процедура выполняется медленно). Кроме того, вы можете не захотеть, чтобы конечные пользователи видели скрытые функции (например, скрытые рабочие листы). Я рекомендую отключить (и снова включить) ScreenUpdating практически во всех ваших процедурах.

Однако бывают случаи, когда вы хотите, чтобы экран обновился. Чтобы обновить экран, вам нужно будет временно снова включить ScreenUpdating (нет команды «обновить» экрана):

123 Application.ScreenUpdating = True’Сделай что-нибудьApplication.ScreenUpdating = False

Настройки VBA — код ускорения

Есть несколько других настроек, с которыми можно поиграть, чтобы улучшить скорость вашего кода.

Отключение автоматических вычислений может ОГРОМНО изменить скорость:

1 Application.Calculation = xlManual

Отключение строки состояния также имеет небольшое значение:

1 Application.DisplayStatusBar = False

Если ваша рабочая книга содержит события, вам обычно следует отключать события в начале процедуры:

1 Application.EnableEvents = False

Наконец, ваш код VBA может замедлиться, когда Excel пытается повторно вычислить разрывы страниц (Примечание: не все процедуры будут затронуты). Чтобы отключить отображение разрывов страниц, используйте эту строку кода:

Источник

VBA – Turn off Screen Updating

In this Article

As cool as it looks watching your VBA macro manipulate the screen, you can help your Macro run faster if you turn off (disable) ScreenUpdating.

Disable ScreenUpdating

1. To disable ScreenUpdating, At the beginning of your code put this line:

Enable ScreenUpdating

2. To re-enable ScreenUpdating, At the end of your code put this line:

VBA ScreenUpdating Example

Your procedure will then look like this:

ScreenUpdating Refresh

Disabling ScreenUpdating will make your VBA code run MUCH faster, but it will also make your work appear more professional. End-users typically don’t want to see the behind the scenes actions of your procedures (especially when the procedure runs slow). Also, you may not want end-users to see the behind the scenes functionality (ex. Hidden Worksheets). I recommend disabling (and re-enabling) ScreenUpdating in virtually all of your procedures.

However, there are some times when you want the screen to refresh. To refresh the screen, you will need to temporarily turn back on ScreenUpdating (there is no screen “refresh” command):

VBA Settings – Speed Up Code

There are several other settings to play with to improve your code speed.

Disabling Automatic Calculations can make a HUGE difference in speed:

Disabling the Status Bar will also make a small difference:

If your workbook contains events you should usually disable events at the beginning of your procedure:

Last, your VBA code can be slowed down when Excel tries to re-calculate page breaks (Note: not all procedures will be impacted). To disable displaying page breaks use this line of code:

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

Источник

Excel vba отключить обновление экрана

Как отключить «мерцание» окна

​Смотрите также​​ восстановления значения переменной​ после выполнения макроса​
​: Хорошо, вариант с​ отвечает именно за​ Application.Calculation = xlCalculationAutomatic​
​ ScreenUpdating в каждом​ 19:03, в сообщении​ работает, просто рекомендация​ действия существуют. )​ это можно заранее​ будет здорово собрать​: Application.EnableEvents​: Юрий М​MsgBox .ScreenUpdating ‘​
​ где включение?​ строки кода в​Mishel915​ до ее начального​
​ увидят открытой книгу​ активной книгой, но​ панель задач.​ Application.EnableEvents = true​ макросе (имеется в​ № 4200?’200px’:»+(this.scrollHeight+5)+’px’);»>алгоритм вложенный:​ вернуть свойство в​Nic70y​ предсказать).​ всё на одной​Application.Calculation = xlManual​
​А что произошло?​ читаем​
​The_Prist​#3​: Всем доброе время​ состояния​ экселя №1, а​ неактивным листом подойдет?)​KuklP​ sleep(100) Application.screenupdating =​ виду в цепочке​ «кнопка» вызывает функцию,​ изначальное положение после​: Не, я не​paylevan​

​ странице и, возможно,​​Hugo​Просто выход? Есть​.ScreenUpdating = False​: А что непонятного?​вставьте строку (иначе​ суток!​Дмитрий​ в панели задач​То есть консолидация​: Sub ProductionPlan()​ false​ связанных макросов).​ та в свою​ завершения работы с​ махлюю,​: Коллеги, спасибо большое​ узнать новые способы​: Это смотря какая​ возможность попасть на​ ‘ изменяем​ Вы обновление отключаете,​ не закрывается книга​В макросе одна​: Один хороший человек​ «нажатой» книгу №2,​

​ и обработка информации​​Dim x As​
​bedvit​_Boroda_​
​ очередь в цикле​ ним.​уже много раз​ за комментарии.​ ускорения работы.​ задача, что на​ лист? У меня​MsgBox .ScreenUpdating ‘​ а обратно не​ База):​ за другой открываются​ на этом же​ или вообще никакой​
​ будет в текущей​ Workbook​: Имхо должно быть​: Его вообще можно​ другую функцию​Nic70y​ так делал.​При этом, в​При этом особенно​

​ листе, какой код. ​​ — нет.​​ читаем​​ включаете. Я не​
​База.Close SaveChanges:=False​ две книги Excel.​​ форуме выложил следующий​​ не «нажатой». То​​ книге но в​​Set x =​
​ достаточно: Application.ScreenUpdating =​ не вырубать. Он​​SGerman​​: Роман, спасибо за​Vemod​ рамках темы, прошу​
​ ценны практические рекомендации​

​Я часто вообще​​The_Prist​End With​
​ раз писал уже,​Mishel915​Set wb1 =​ macros. Позарез нужно​ это будут лишние​ новом генерируемом листе.​ GetObject(«F:ProductionPlanR14.xls») ‘открываем необходимую​ 1: Application.ScreenUpdating =​ сам вырубается при​: Смех над теми,​ разъяснение.​: Возможно дело в​ уточнить: можно ли,​ из опыта, подобные​ ничего не отключаю​
​: Здесь ДВЕ ячейки.​End Sub​ что лучше возвращать​: Такой код решает​ Workbooks.Open(Filename:=ThisWorkbook.Path & «Книга1»)​ его применение, но​ звонки мне, и​KuklP​ книгу​ 0​ выходе из макроса.​ кто знает меньше,​Так оно и​ разных версиях excel.​ чтобы ускорить работу​ комментарию​ — т.к. каждое​ А у Вас​Юрий М​ занчения изменных параметров​ задачу:​ Set wb2 =​
​ не получается. Может​
​ лишняя трата моего​: Нарколог: Вы пьете?​’. Ваш код​Prisioner​ Отсюда, кстати, следует​

​ Вас ни в​​ было​ У меня на​
​ Excel, отключить всю​vikttur​
​ отключение-включение только тормозит​ принудительный выход, если​
​: Запустил — и​ и свойств.​
​Application.ScreenUpdating = False​ Workbooks.Open(Filename:=ThisWorkbook.Path & «Книга2»)Первая​ потому, что я​ времени на объяснения)​Пациент: Это вопрос​
​x.Close 0​: Если нужно именно​ то, что Андрей​ коем случае не​Application.ScreenUpdating начал использовать​ 10м тоже все​
​ анимацию?​.​ процесс.​ изменение более одной​ что? Переключается.​Private Sub Worksheet_Change(ByVal​ ‘ Отключаем “мерцание”​ книга используется в​

Обновление экрана

​ настолько далек от​​Посему, я думаю​
​ или предложение?​Set x =​
​ остановить выполнение кода​ написал выше​
​ украшает.​
​ с MSO 2010​ отображается не зависимо​То есть чтобы,​
​The_Prist​Но это на​ ячейки.​
​Юрий М​
​ Target As Range)​ окна Set wb1​ качестве базы данных.​ всего этого.​ оптимальным решением будет​Я к тому​ Nothing​

​ и посмотреть что​​SGerman​Проблема решена, я​и когда макрос​ от включение/выключения обновления​ например, при импорте​: Из опыта:​ моих задачах и​

​Юрий М​​: А где в​If Target.Count >​ = Workbooks.Open(Filename:=ThisWorkbook.Path &​ Данные первой книги​Макрос помогает сделать​ добавлять свойство ShowWindowsInTaskbar​ — что это​End Sub​

​ происходит, а потом​:​
​ уже сказал. А​ вызывал другой макрос,​ экрана.​
​ данных, или, к​Исходный код(копирование отдельных​ кодах — когда​
​: Не очень понимаю​
​ Вашем примере Application.ScreenUpdating​
​ 1 Then Exit​
​ «Книга1») ThisWorkbook.Activate ‘​

​ применяются во второй​​ обновление файла не​
​ в начало и​ было: «подойдет?)»​Guest​ решить — продолжать​Manyasha​ цирк, он в​

​ то приходилось в​​Отключение обновления помогает​ примеру, использовании счётчиков,​
​ ячеек в основном)​ лист без формул​ вопрос — я​
​ = True?​ Sub​ Возвращаем указатель текущего​ книге.​ открывая его вручную​

​ конец процедур.​​Вариант с активной​
​: Спасибо за ответы.​
​ или нет, тогда​
​,​ другом месте. Или​
​ другом макросе прописывать​ когда операции на​ а также любых​
​ был оптимизирован. Все​ и событий, а​

​ ведь и так​​nerv​If Not Intersect(Target,​ приложения (для избежания​
​В таком открытии​ (все как я​Radist_514​

​ книгой, но неактивным​KukLP, вы все​ вот такая конструкция:​Спасибо, Марина !​ я не знаю​ откл.​ нескольких листах, убирает​ других ситуациях значения​ вычисления перенеслись в​ вся обработка данных​ на листе это​: >Запустите два раза.​

​ Range(«A1»)) Is Nothing​​ различных глюков) Set​ двух книг заметно​ понял делается из​
​: Здравствуйте!​ листом подойдет.​ правильно написали с​Application.ScreenUpdating = True​
​ Хотел новой благодарностью​ местных традиций ?​
​SGerman​ мелькание.​ в ячейках изменялись​
​ массивы. Так вот​ в массивах (без​ делаю. Куда ещё​
​Первый запуск (макроса):​ Then Exit Sub​ wb2 = Workbooks.Open(Filename:=ThisWorkbook.Path​
​ мерцание на экране​
​ исходного файла за​Наткнулся на работе​Но боюсь, меня​ точки зрения нормального​
​ Stop Application.ScreenUpdating =​
​ повысить Вашу репутацию​
​SGerman​
​: Зравствуйте !​Rioran​

​ без подмигиваний, проскальзываний​​ этот оптимизированный код​
​ обращения к листу​ попасть? :-)​True ‘ проверяем​
​Application.ScreenUpdating = False​

​ & «Книга2») Application.ScreenUpdating​
​ перной книги.​
​ раз).​ на маленькую неприятность.​
​ поняли неправильно. На​ кода по открытию​
​ FalseПри этом выскочит​ в очередной раз,​
​:​
​Почему-то далеко не​

​:​​ и иных ресурсоёмких​ выполнялся в 6​

​ в процессе).​​The_Prist​’ отключаем False​’здесь код​

​ = True ‘​​Вопрос – возможно​

​ВОТ КАК БЫЛО​
​ Написал макрос для​
​ самом деле применение​ книги.​

​ окошко такое же​
​ но не вышло​krosav4ig​ всегда помогает отключение​
​Nic70y​

​ динамических эффектов.​​ раз быстрее исходного.​Хотя отключить обновление​: Потому что это​

​ ‘ да, отключено​​Application.ScreenUpdating = 1​
​ Возвращаем режим обновления​ ли при открытии​
​ СКАЗАНО:​ проверки данных из​ свойства ScreenUpdating в​Но мне как​

​ как при ошибке,​ — наверно «многабукав».​, Минут 10 собирал​ моргания стандартным способом​, привет!​
​Dima S​ На 32-битной системе,​ экрана в 99%​
​ не событийная процедура.​Второй​End Sub​ экрана при измененииСледуя​
​ двух подряд книг​

​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub update()​​ одного файла в​ нужном месте очень​

​ раз интересен был​​ но будет активны​ Но почему не​
​ куски кода, чтобы​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Application.ScreenUpdating = False​Как я понял​: а ScreenUpdating чем​
​ 2010 офис. А​ случаев в общем​Sub io()​True ‘ проверяем.​

​ran​​ Вашим реконаписать из​ избавится от мерцания​With Application ‘операции​ другом и дабы​ даже кстати. Т.е.​ ответ именно по​

​ кнопки «Continue», которая​​ выдается предупреждение ?​ сложилась хотя бы​Application.ScreenUpdating = True​ по переписке разработчиков​

​ не угодил?​​ в 64-битной 2010​

​ полезно.​​With Application​ Включено. А ведь​

​: А нигде!​​ №4 написал код:​ первой книги. Тоесть​ с приложением/отключаем для​ не получить эпилептический​
​ не стоит менять​ функции ScreenUpdating.​ продолжит выполнение кода​Guest_E​ приблизительная картинка.​Может быть, есть​ ОТСЮДА (инглиш), в​

​Слэн​
​ офис — на​
​paylevan​
​MsgBox .ScreenUpdating​
​ мы его отключали)​
​В том и​
​Application.ScreenUpdating = False​

​ первая книга должна​​ повышения скорости работы​ припадок от мерцания​

​ активный лист во​​Я только начинаю​ и кнопка «End»,​

​: Добрый день! Я​​В результате при​
​ еще какие-нибудь хитрости​
​ ранних версиях Excel​: для меня было​ 1/6 медленнее.​: Спасибо,​

​.ScreenUpdating = False​​False​ вопрос — почему​ ‘ Отключаем “мерцание”​ откриваться, но не​ макроса​

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

​ компания Microsoft разрешала​​ потрясающим, когда я​Не будем вдаваться​
​ber$erk​
​MsgBox .ScreenUpdating​
​Юрий М​
​ в одном случае​
​ окна Set База​
​ должна быть активной​
​.ScreenUpdating = False​
​ начале главной процедуры​

​ свойства. По скорости​ VBA, поэтому и​Evgeny_1​ роль или важность​ не добавилось​ ?​ разработчикам больший контроль​ оптимизацией алгоритма, вылизывая​

​ в подробности, но​​.​Exit Sub​
​: А теперь читаем​ продолжает работать, а​
​ = GetObject _​
​ даже на мгновение.​ ‘обновление экрана​ Application.ScreenUpdating = False​ ничего не выигрывается(если​ вопросы мои тривилальные.​: Господа, прошу прощения​
​ применения «ScreenUpdating =​SGerman​Спасибо за помощь​ над свойством​ буквально каждую строчку,​ по опыту можно​Возможно есть ещё​End With​ Димин пост от​ во втором -​ (PathName:=»C:Documents and SettingsПользовательРабочий​
​ И если возможно​

​.DisplayAlerts = False​​ , а в​ не сказать наоборот).​Дъмитръ, я полагал​ если вопрос где-то​ False»? (так сказать,​
​: «Макрос» — это​Hugo​Application.ScreenUpdating​ выжал 10% для​ сказать, что каждая​
​ функции по ускорению​End Sub​ 03.12.2011, 16:14​ нет!?​

​ столКнига1.xls») ThisWorkbook.Activate ‘​ то как?​
​ ‘вывод системных сообщений​
​ конце Application.ScreenUpdating =​ Если Вы хотите​
​ что ScreenUpdating отвечает​
​ был раскрыт, но​
​ для чего?) Заранее​
​ любой код, как​

​: Здравствуйте.​​. И можно было​ сортировки массива, а​ оптимизация это отдельный​ работы Excel?​Выполняя напрямую из​

Ускорение работы Excel-приложений.

​ran​​Юрий М​ Возвращаем указатель текущего​Например, так не​Папка = «полный​
​ True. Всё отлично​ заполнять данными из​ за обновление экрана​ прочитав все темы​ благодарен!​
​ я понял с​Покажите пример в​ его отключить и​ пришел ZVI и​ процесс, требующий отдельного​

​Мне кажется, будет​​ редактора VBA вы​
​: Да нет его!​

​: А мне ещё​​ приложения (для избежания​ проходит.​ путь папки»​
​ работало в оффисе​ других книг активный​ в целом, а​ в поиске по​Pavel55​
​ Вашей веселой пиктограммки.​ файле когда не​ само оно уже​ «простым» переопределением типа​ подохода.​ полезным собрать на​ не отключаете обновление​Я знаю, что​ вот это непонятно:​
​ различных глюков) Set​Application.ScreenUpdating = False​’———— Excel-файлы в​ 2007, но сейчас​

​ лист, используйте ScreenUpdating.​​ не только в​​ запросу (как в​​: Данное свойство отключает​
​Так вот, именно​ помогает.​ включается при определённых​
​ переменной сделал 40%​Основные принципы:​ этой странице все​ — иначе не​ надо вставлять включение.​If Not Intersect(Target,​ wb1 = Workbooks.Open(Filename:=ThisWorkbook.Path​ ‘ Отключаем “мерцание”​

​ этой папке ——————​​ обновили на 2016​ Если неактивный -​ выполняющемся VBA приложении. ​ заголовке) ответа я​ обновление экрана (визуализацию)​ так я и​SGerman​ условиях. Однако в​хотя, конечно бывало,​-вычисление самых тормозных​ основные функции и​ смогли бы видеть​Но меня интересует​

​ Range(«A1»)) Is Nothing​​ & «Книга2») Application.ScreenUpdating​ окна Set wb1​Имя = Dir(Папка​ и, как результат,​
​ незачем, не нужно.​KuklP​ не нашел.​
​ и макрос намного​ делал ! В​
​:​​ последующих версиях компания​ что оптимизацией алгоритма​ мест(как правило обращение​​ приёмы, добавление и​

​ ход выполнения. А​​ не это, а​​ Then Exit Sub​​ = True ‘​ = Workbooks.Open(Filename:=ThisWorkbook.Path &​ & «*.xls*»)​ мерцание появилось. Прошу​The_Prist в двух​: 2. Это не​Вступление:​ быстрее выполняется, т.к.​ каждом «макросе» в​Hugo​
​ принудительно ввела «перезагрузку»​​ удавалось добиться ускорения​ к ячейкам, но​

​ использование которых помогает​​ вот с листа​ именно тот вопрос,​При изменении в​ Возвращаем режим обновления​ «Книга1») Application.ScreenUpdating =​

​Do While Имя​​ прощение за то,​ словах бы объяснил.​ функция, это свойство;​Имеется наипростейшая процедурка​ не тратятся ресурсы​ начале вырубал, в​, Проект слишком большой​
​ метода. Таким образом,​ в 200 раз..​ есть исключения; активация​ сделать исполнение макросов​ — да, отключается.​ который я задал!​

​ ячейке А1 НИЧЕГО​​ экрана при изменении​​ True ‘ Возвращаем​​ <> «»​ что не прилагаю​ У меня такого​3. как только​ смысл которой таков:​ компьютера на отображение​
​ конце — врубал​ — xls>800 Kb​ в новых версиях​ikki​​ листов, книг, ячеек);​​ более быстрым.​

​ran​​Может конечно это​
​ не произойдёт. Кроме​ База = NothingТоже​ режим обновления экрана​With .Workbooks.Open _​ файл ибо это​ дара нет.​ процедура закончилась, свойство​ есть открытая активная​ действий на экране​ отображение.​SGerman​ (там не понятно,​:​
​-переводим тормоз в​ber$erk​: Давайте попробую еще​ мой локальный глюк,​ выхода из процедуры,​ решает задачу. Кроме​ при изменении ThisWorkbook.Activate​
​(Filename:=Папка & Имя,​
​ конфиденциальная информация. Если​Evgeny_1​ автоматом возвращается в​ книга «расчет картона​. reply​
​И у меня​: Разобрался . ​ каких именно) после​Слэн​ газ: исключаем все​: , смысла особого​ раз объяснить.​ но у меня​ конечно.​ того, код не​
​ ‘ Возвращаем указатель​ UpdateLinks:=True)​ кто-то стыкался с​: Я все понял​
​ true(и это правильно,​ (разработка), необходимо открыть​: Спасибо, Павел! Доходчиво​ все радостно моргало​

​Дело было в​​ того, как макрос​, а ссылки на​
​ лишние активации объектов;​ в этом нет​
​Добавляю в код​
​ после выхода по​Юрий М​
​ допускает появление кнопки​ текущего приложения (для​’здесь Ваш макрос​
​ такой проблемой при​ что вы хотели​ иначе пришлось бы​ в фоне книгу​ технически обьснил. А​ !​ том, что алгоритм​

​ отрабатывает — изменённая​​ ту тему случаем​ операции сравнения ячеек(как​
​ — тема со​ первой строкой​ строке​
​: Смотрите:​ «База» или «Книга1″​ избежания различных глюков)​ делает свое грязное​ переходе на новую​ донести по поводу​
​ перезапускать Экс в​ «productionplanR14» и снова​ на счет безопасности​
​Когда же все​ вложенный: «кнопка» вызывает​​ им настройка​​ не сохранилось?​ правило в циклах)​

​ временем уедет вниз.​​MsgBox Application.ScreenUpdating​If Target.Count >​Вы отключили обновление:​
​ на панели уведомлений,​
​ Set wb2 =​
​ дело​
​ версию оффиса, подскажите,​
​ ScreenUpdating. Спасибо вам​
​ случае любого сбоя,​ активировать книгу «расчет​ что-то есть в​ внутренние переключения убрал,​ функцию, та в​Application.ScreenUpdating​

​Слэн​​ и вычисления переводим​ Да и информация​
​Сколько я бы​ 1 Then Exit​Application.ScreenUpdating = False​ что может быть​ Workbooks.Open(Filename:=ThisWorkbook.Path & «Книга2»)​.Close SaveChanges:=True​
​ пожалуйста, как пофиксить​ за это.​ или забывчивости программиста);​ картона (разработка)».​ этом? Как-то расслышал​ моргание исчезло.​ свою очередь в​возвращается в прежнее​: вот:​ в массивы(с умом);​

​ эта в 98%​​ ни менял значение​ Sub​

​принудительно вышли, если​​ преимуществом.​Busine2009​End With​ данную ситуацию.​Неясным для меня​1. я предложил​Код таков:​ один раз. (мол говорили​Вот так-то​
​ цикле другую функцию,​ русло.​ikki​ сводим обращение к​

​ случаев гостям не​​ в [A1], получаю​​возможность попасть на​​ более одной ячейки:​Относительно​: Код: Sub P1()​

​ осталась лишь одна​​ вариант, при котором​
​Sub ProductionPlan()​

Application.ScreenUpdating = 0 (Макросы/Sub)

​ что кто-то успеет,что-то​​Manyasha​ а та и​
​Особо отмечается, что​
​: спасибо.​ ячейкам листа к​
​ интересна — им​ MsgBox True, не​ любой лист Excel​If Target.Count >​
​База.Close SaveChanges:=Falseто этот​ Dim База As​
​Loop​

​vikttur​​ вещь — это​​ использование ScreenUpdating не​​Application.ScreenUpdating = False​
​ сделать!). Заранее огромное​: не дуйтесь. Если​ тоже в цикле​ если перевести выполнение​оч.хорошая тема.​ минимуму;​ нужно готовое решение,​ смотря на принудительный​ появляется только после​ 1 Then Exit​ код не записывал​ Excel.Workbook Set База​

​.ScreenUpdating = True​​: Попробовать создать пример.​
​ панель задач, в​
​ нужно.​
​’Application.ShowWindowsInTaskbar = False​
​ спасибо. ​ ​ бы Вы поискали,​
​ — третью. И​ макроса в пошаговый​

​Nic70y​​-правильное объявление переменных(особенно​​ а старожилы итак​​ выход.​ выполнения​ Sub​ так как открытая​ = GetObject _​ ‘обновление экрана​ Удалите все секретное,​ которой «нажатой» (активной)​Evgeny_1​Application.Workbooks.Open («F:ProductionPlanR14.xls») ‘открываем​Igor67​ что такое​ кругом стоит true/false.​ режим (с помощью​: Отключаем обновление экрана​ массивы — рамер​ все об оптимизации​Но стоит мне​Application.ScreenUpdating = True​

​а обновление не​​ База нужна во​ (PathName:=»C:Documents and SettingsПользовательРабочий​
​.DisplayAlerts = True​ листы, с которыми​

​ показывается временная книга,​​: KukLP, спасибо, разобрался,​ необходимую книгу​: На работе написал​Call​ Когда все внутренние​ F8 клавиши выполнять​ в начале макроса,​
​ не должен быть​ знают (ну или​ скопировать 2 ячейки​Юрий М​

​ включили.​​ второй книге.​​ столБаза.xls») ‘Проверяем, что​​ ‘вывод системных сообщений​
​ макрос не работает,​ которую я открывал,​ буду использовать предложенную​Application.Workbooks(«расчет картона (разработка).xls»).Activate​ макрос с открытием​и поняли, что​ строчки переключения отображения​​ по 1-й строке​​в конце включаем.​ неоправданом велик);​ почти все :-))​ — можно мышем​: Покажите файл ТОЛЬКО​The_Prist​Ципихович Эндрю​ База открыта и​End With​ внутри макроса закомментировать​ а не та​ вами схему.​ ‘активируем изначальную книгу​ исходной, копированием и​​ написали, то тоже​​ закомментарил, мерцание исчезло.​ кода), то свойство​
​Вопрос — а​-при необходимости отключаем​vikttur​ по листу щелкать​ с этим фрагментом.​: Вопрос на засыпку:​: по большому счёту​​ посмотрим содержимое первого​​End Sub​ чего-нибудь. Возможно, выявите​ книга, которая в​KuklP​’Application.ShowWindowsInTaskbar = True​ закрытием, снятиями защиты​ бы посмеялись)​Всем спасибо !​Application.ScreenUpdating​ обязательно включать?​
​ отслеживание событий, обновление​​: Обработка ячеек листа​​ до посинения, ничего​Пытливый​ что делает эта​
​ в начале процедуры​ листа первой ячейки.​ВОТ КАК БЫЛО​ источник.​​ действительности является активной​​: А вот GetObject,​Application.ScreenUpdating = True​ и переходами. Комп​Цитата​ Проблема решена.​всегда будет True​Вроде как и​ экрана, вычисления, показ​ по сравнению с​ не происходит (в​: Ну так The_Prist​ строка?​а в конце​ MsgBox База.Worksheets(1).Cells(1, 1).Value​ СДЕЛАНО:​Radist_514​ на момент окончания​​ как раз функция:-)​​End Sub​
​ слабый, моргал как​SGerman, 12.07.2016 в​RAN​​ независимо от установленной​​ без включения, после​ предупреждений.​ обработкой данных в​ ячейку попасть не​ так и написал:​If Target.Count >​ ничего не пишут​ ‘Закрываем. База.Close SaveChanges:=False​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub update()​: Окей, обязательно попробую,​ макроса (по процедуре​ Ну, считайте занудой..​Изначально в процедуре​ сумашедший. Обрабатывается куча​ 19:10, в сообщении​

​: Есть.​​ разработчиком. И отслеживать​ завершения макроса он​
​Dima S​ массиве — тормоз.​
​ могу, курсор -​Если процедура завершается​
​ 1 Then Exit​В функции эту​ ‘Далее удаляем объектную​With Application​ спасибо! Думал, может​

Убрать мерцание экрана при выполнении кода (VBA+Excel)

​ приведенной в 1м​​ Все это я​
​ естественно не было​ формул. Столбцы на​ № 7200?’200px’:»+(this.scrollHeight+5)+’px’);»>У меня​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Call Макрос()​

​ реальное состояние этого​
​ обновляется.​: Не использовать Select​Вставка макросом формул​ стрелка) до того,​
​ «естественным путем» через​

​ Sub​​ строку не пишут​
​ переменную База. ‘Если​.ScreenUpdating = False​ кто-то уже сталкивался​

​ посте). Если например​​ беру из справки​​ строчек Application.ShowWindowsInTaskbar, которые​​ А — закончились.​вообще нет​

​включает обновление экрана,​​ свойства можно будет​
​Или я чего-то​ без надобности​ вместо вычисления в​ как в VBA​ End Sub, то​Для общего понимания:​И всё ОК,​ объектная переменная объявлена​.DisplayAlerts = False​ с такой же​ временную книгу просто​ — F1.​ в коде выше​
​ Мучался со вставкой​Call Macros, как​

​ и в этом​​ только с помощью​
​ не понимаю?​
​Range(«A1»).Select: Selection.Value =​ коде — тормоз.​ выполню​ обновление включается автоматом.​
​ если Вы вышли​ разве нет. ​

​ внутри процедуры, ‘то​​Test2 = «C:Test22.xlsx»​
​ проблемой, в плане​ открыть и закрыть,​
​Evgeny_1​
​ помечены как комментарии.​

​ формул, их распространением​ и​
​ макросе его снова​ ввода булевой переменной,​Подскажите тупому пожалуйста.​ «Hello»​Отключили обновление экрана,​

​Application.ScreenUpdating = True​​Если «неестественным» -​​ из процедуры, завершая​​А по правильному​
​ это просто формальность,​Testing = Dir(Test2​ корня проблемы: это​ то в панели​
​: KukLP, я правильно​Результат вышеописанного кода​ на реальный диапазон​самих макросов​ нужно отключать.​

​ которая будет дублировать​​Roman777​​можно записать как​​ а тут нужно. ​nerv​

​ через Exit Sub​​ её логически, т.е.​​ да нужно в​​ т.к. объектная переменная​ & «2.xls»)​ из-за перехода на​ задач активной (нажатой)​ понимаю что эта​ в экселе выполняется​ данных.​
​.​​Возврат в исходную​ значение свойства при​:​Range(«A1») = «Hello»Аналогично​Нет такого, чтобы​: Дмитрий, спасибо за​ автоматического включения обновления​

​ дойдя до End​​ конце процедуры всё​ сама ‘удалится после​Do While Testing​ обновленный софт или​ книги после выполнения​
​ функция применима к​ правильно, то есть​А решение -​. только Function и​ процедуру — тоже.​ изменениях.​

​Nic70y​​ и с Activate.​​»примени вот это -​​ участие) Но если​ не происходит.​ Sub, то VBA​ же поставить в​
​ завершения процедуры. Лучше​ <> «»​ просто я натупил​

​ макроса вообще не​​ любому кол-ву открываемых​ запустив макрос в​ ScreenUpdating = False​ SubSub — это​
​SGerman​Упоминается, что «перезагрузка»​, Добрый день.​Когда записать макрос​ и счастье на​ честно, то я​nerv​
​ сам возвращает значение​ Труе​ всегда использовать, ‘чтобы​
​With .Workbooks.Open _​ где-то? Поэтому и​ будет. хотя на​
​ книг/листов, из которых​

​ текущей открытой книге,​​Поставил формулы с​ и есть макрос.​: Уточнение.​​Application.ScreenUpdating​​Лично у меня​ макрорекордером там будет​ века!​
​ не понял :​​: А теперь читаем​ Application.ScreenUpdating в True.​то есть 1​​ не забыть это​​(Filename:=Test2 & 2,​ интересуюсь, если из-за​​ экране активной становится​​ нужно в кучу​
​ в фоне открывается​ двукратным запасом и​Макрос внутри другого​
​Везде стояло, конечно​свойства происходит, когда​ в любом случае​
​ множество таких конструкций.​
​»​
​ )​
​ Димин пост от​
​ Если же Вы​
​ раз в начале​
​ сделать тогда, когда​
​ UpdateLinks:=True)​
​ нового оффиса, то​
​ та книга, которую​
​ собрать информацию на​
​ 2я книга и​
​ отключил обновление.​
​ макроса можно вызвать​​ же:​​ задействуется другой макрос​ необходимость включить после​Если нужно вывести​paylevan​Правильно ли я​​ 03.12.2011, 16:14Как плохо,​
​ принудительно завершили процедуру​​ Фальше и 1​​ это надо. Set​.Close SaveChanges:=True​ как пофиксить, чтобы​ я в конце​ итоговом листе активной​ активной остается 1я​
​Раньше пользователи дергались​​ так:​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Application.ScreenUpdating = False​ (?) или модуль.​ отключения остаётся, поскольку​ массив на лист,​:​
​ понимаю, что в​ что я не​ — то. короче ничего​ раз в конце​ База = Nothing​End With​ не тратить время​

​ процедуры собственно и​​ книги?​ книга. Однако в​ и пытались файлик​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub t1()​Application.ScreenUpdating = True​Помимо прочего нашёл​ всё-таки, с отключенным​

​ то лучше не​​ber$erk​​ коде ниже оно​​ умею читать!))) Спасибо,​
​ никуда не возвращается.​ на Труе и​ End Sub​Имя = Dir​ на долгие поиски.​ указал сделать активной.​Всмысле без принудительного​ панели задач почему​

ScreenUpdating. VBA

​ не однократно загубить,​​’код​и экран моргал​ в сети упоминания,​ обновлением не видно​ циклом в каждую​, если собрать всё​ должно отключаться и​

​ понял : )​​ran​ всё​Mishel915​Loop​Ігор Гончаренко​Эта ситуация исправляется​ свойства ScreenUpdating =​

​ то активной отображается​​ а теперь МАШИНА​End Sub​ как ненормальный :)​ что можно работать​ не только изменений,​ ячейку, а сразу​ воедино, то когда​ не включаться?​Юрий М​

​: Но ведь здесь​​Я почему так​: Спасибо за отзыв.​.ScreenUpdating = True​: не работал с​ только принудительным обновлением​ False у меня​ 2я книга, а​ СЧИТАЕТ и все​Sub t2()​Почему — так​ со свойством​ которые я выполняю​ весь массив в​
​ тема со временем​Если нет, то,​
​: Мало ли что​ в обоих случаях​ рассуждаю, потому что​
​Так тоже не​.DisplayAlerts = True​ офис 2016, тем​ панели задач после​ ничего мелькать не​ не первая.​
​ спокойно ждут.​t1’Вызываем t1​ и не понял.​
​Application.StatusBar​ в той или​ диапазон.​ уедет вниз, её​

​ пожалуйста, приведите пример​​ написал, Главное -​ принудительное завершение процедуры!​ надо пробовать в​ проходит. Применяю код:​End With​ не менее уверен:​

Есть ли команда разового обновления экрана в Excel

​ выполнения макроса (свойством​​ будет при выполнении​При убирании ковычек​По времени не​
​End Sub​ Такое впечатление, что​и оно всегда​ иной ячейке, но​Юрий М​ легко будет найти​ когда, когда оно​ прочитать 🙂 А​Я специально удалил​
​ разных процедурах и​Sub Макрос_Щелкнуть() Dim​

​End Sub​​1) что Application.ScreenUpdating​​ ShowWindowsInTaskbar). Когда процедура​​ макроса на фоне?​
​ со строчек Application.ShowWindowsInTaskbar,​ скажу, по нервам​а можно так:​ false на false​ будет отображаться в​

​ и просто какая​​: И я немного​ по тематическим запросам​ не включается)​ у Саши утро.​

​ весь код, оставив​​ глаза это не​ База As Excel.Workbook​Предварительно активировал макросы​ работает там так​ написана с принудительным​KuklP​ после выполнения макроса,​
​ вообще 0.​Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub t1()​ дает true​ экселе с учётом​ ячейка выделена.​ добавлю:​ в любом поисковике.​Private Sub Worksheet_SelectionChange(ByVal​ran​ только строки принудительного​

Application.ScreenUpdating и панель задач

​ техника надо сажать​​ Dim wb1 As​ и сделал их​ же как и​ обновлением панели задач,​: Не правильно. Если​ в панели задач​А то раньше​’код​

​SGerman​
​ изменений даже при​Nic70y​- стараться использовать​ Поэтому, всё же,​ Target As Range)​: .​ выхода.​ робота чтобы считал​ Workbook Set База​

​ доступными. Потом зашел​

​ во всех предыдущих​
​ то активное книга​
​ Ваш итоговый лист​
​ активным показывается правильная​ — придумал фигню​
​End Sub​:​
​ выключенном обновлении экрана.​
​: ну например​
​ конструкцию With -​

​ польза, мне кажется,​With Application​Юрий М​Если выходить по​ мерцание​

​ = GetObject _​ в Visual Basic​ версиях​ экселя совпадает с​ неактивен и в​ книга (изначальная из​ нам, а она​Sub t2()​RAN​ Опробовал — можно​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub tipakod()​ End With;​ есть.​

​Debug.Print .ScreenUpdating ‘​: Что нужно выполнить,​ строке​ran​ (PathName:=»C:Documents and SettingsПользовательРабочий​ нажал Insert -​2) проблема не​ «нажатой» книгой на​

​ это время вы​
​ которой и запускался​ не работает. ​Call t1’Вызываем t1​,​ задавать текст строки,​

​Application.ScreenUpdating = 0​- максимально использовать​

​vikttur​​ всегда True​ чтобы «сломалось»?​If Not Intersect(Target,​: Приветствую!​ столКнига1.xls») Set wb1​ Module. Появилось окошко,​

​ в переходе на​​ панели задач.​ меняете на нем​

​ макрос)​Guest_E​End Sub​У меня вообще​ которая в моём​[a1] = «8»​ переменные — один​

​, спасибо большое за​.ScreenUpdating = False​nerv​

​ Range(«A1»)) Is Nothing​​Помогите разобраться с​
​ = Workbooks.Open(Filename:=ThisWorkbook.Path &​ куда и вставил​
​ новую версию, а​Evgeny_1​ данные(берете из других​
​Вопрос:​
​: Спасибо Igor, обяснил​
​Андрей (​ нет Call Macros,​
​ 2013-м Экселе показана​

​End Sub​​ раз вычислили (присвоили)​

​ практические рекомендации.​Exit Sub​: Пытливый, Юрий, а​ Then Exit Sub​ непонятным​

​ «Книга2») Set База​ выше описанный макрос.​ проблема в Вашем​: Я всетаки с​

​ книг), то открытие-закрытие​почему Application.ScreenUpdating так​ на примерах, да,​RAN​

​ как и самих​ в самом низу,​и все ок.​ значение, а затем​ber$erk​End With​

​ теперь скажите мне​​то Application.ScreenUpdating возвращается​Private Sub Worksheet_Change(ByVal​
​ = Nothing End​ Жму Play ниче​ коде​ дома скину скриншот​ этих книг не​ работает странно, как​ хорошое решение пришло​) рассказал про особенность​
​ макросов.​ рядом с кнопкой​не, наверное я​ обращаться только к​

​: не в обиду​​End Sub​ почему здесь результат​ в True, а​

​ Target As Range)​​ SubПеред открытием Книги2​ не происходит(думал, что​достаточно сделать так:​ проблемы с панелью​ повлияет на обновление​ избежать этого «бага»​

​ людям! Я тебя​​ 2-го способа (Кстати,​Весь код -​ записи макроса. Также​ все-таки туплю. ​ ним.​ будет сказано, но​Юрий М​ тот же самый)​ если по строке​

​Application.ScreenUpdating = False​ «мерцает» Книга1, тоесть​ операция маленькая может​ Sub X1 Application.ScreenUpdating​ задач.​ экрана, Вы никак​

​ без прописывания дополнительных​​ тоже признаю как​ я про нее​ на листах, формах​ в обход отключенного​Roman777​- принудительный выход​ Вы пользовались поиском​: У меня такого​Не утро, просто​If Target.Count >​If Target.Count >​ База.​ быстро сделал). Закрыл​ = False X2​Юрий М​ не сможете отследить​ строчек с Application.ShowWindowsInTaskbar.​ знатока форума!​ не знала. Андрей,​ и модулях -​ обновления экрана работает​:​ из циклов, если​ прежде чем начать​ не происходит -​ с одного языка​ 1 Then Exit​ 1 Then Exit​Разница в том,​ все сохраняя (но​

​ ‘ и все​​: Далась Вам эта​ это. Однако, изменение​Надеюсь описал непонятный​

​AndreA SN​ спасибо за информацию!​ только Function и​ и обновление внешнего​Nic70y​

​ достигнут результат.​​ эту тему?​
​ могу сразу после​ на другой пока​
​ Sub​ Sub​ что при использовании​
​ при сохранении были​ что написано тут​ панель задач :-)​
​ данных на активном​ момент доступно. ​: Допустим, я отключил​)​ Sub​ вида формы с​, Что-то тут не​- при использовании​Dima S​ копирования/вставки активировать любую​ еще туго переключаюсь)​то нет.​If Not Intersect(Target,​ GetObject кнопка «База»​ кучи каких-то надписей).​ после Х2 будет​ Представьте, что она​ листе НЕИЗБЕЖНО вызовет​
​Evgeny_1​ обновление Application.screenupdating =​Еще одна особенность:​krosav4ig​

​ помощью метода​​ чисто, у меня​ вложенных Если (If)​: Отключили обновление экрана,​ ячейку.​ Параллельно на js​

​Вопрос возник в​ Range(«A1»)) Is Nothing​ или «Книга1» на​ Зашел в нужный​ мигать по страшной​ вообще не отображается.​ ScreenUpdating, если он​: Пытаюсь прикрепить скриншот​ false​Application.ScreenUpdating​:​.RePaint​ код отрабатывает, а​первой​ а тут нужно. Вот-вот​paylevan​ сижу мастерю :​ процессе разбирательства с​ Then Exit Sub​ панели уведомлений отсутствует​ файл который должен​ силе Application.ScreenUpdating =​Guest​ не установлен в​ проблемы — страница​Но потом мне​
​относится только к​SGerman​.​ лист остаётся пустым,​(внешней) проверкой сразу​ — если весь​: Здравствуйте. Прошу поделиться​ )​ кодом, превая строка​End Sub​ (что тоже хорошо).​

​ был обновиться, но​​ True end sub​: Мне эта панель​ False. Такого не​ с ответом виснет​

​ нужно в определенный​​ приложению Excel. Если​, ну вы хотя​Возвращаясь к изначальному​ до тех пор​

​ отсекать ненужное.​​ код все делает​ функциями, а также​Sub io()​ которого​Если изменить А1,​ Без использования GetObject​ он не обновился​ Sub X2 Application.ScreenUpdating​ задач действительно не​ произойдет, если не​ и скриншот вместе​ момент просто обновить​ Вы внутри макроса​ бы код покажите​ вопросу. Судя по​ пока не включу​Hugo​ через Ж. то​ приёмами, которые помогают​With Application​Application.ScreenUpdating = False​ то все продолжает​ кнопка «Книга1» на​ НИЧЕРТА!​ = False . ​ сдалась, просто я​

​ делать Ваш итоговый​ с постом не​ экран, чтобы посмотреть,​ используете, например, word,​RAN​

Отключение обновление экрана

​ всему, да, включать​​ скринАпдейтинг. и честно​
​: Да, точно -​ отключение обновлений экрана​ ускорить выполнение макросов.​Debug.Print .ScreenUpdating​последняя​ работать, а если​ панели уведомлений присутствует.​Формуляр​ Application.ScreenUpdating = True​ пишу не только​ лист активным, либо​ загружается. ​ — чего там​ в нем экран​:​крайне желательно​ говоря, не пойму,​ если в цикле​ тут не поможет.​К примеру, чтобы​.ScreenUpdating = False​Application.ScreenUpdating = True​ скопировать и вставить​Busine2009​: Так зачем вы​ end Subа универсально​ для себя код​ все же прямо​ТолькоУчусь​
​ у меня натворилось.​

​ будет обновляться.​​Цитата​. Ведь поведение программы​ почему вы могли​ часто используется проверка​Как по мне,​ экран не обновлялся​Exit Sub​

​а внутри кода​​ 2 ячейки, то​:​ весь его код​ это пишется так​ но и для​ указав ScreenUpdating =​: Объясню как сам​ И ничего дальше​Цитата​SGerman, 12.07.2016 в​ разработчики меняли со​ бы видеть результат​and. and. and​ то наверное в​ при каждом исполнении​

​End With​​ — прерывания.​ требуется принудительное включение​Mishel915​
​ искаверкали?​ Sub X2 Dim​ других людей, которые​ False. Как я​ понимаю это :)​
​ не делать. Вычислений​SGerman, 12.07.2016 в​ 19:10, в сообщении​ временем и нет​ (если изначально ячейка​
​то использовать​ большинстве случаев для​ процесса, я использую​End Sub​nerv​ обновления экрана.​,​Всё, что требовалось,​ aSU aSU =​ вообще далеки от​ упоминал, «как только​Метод «Application.ScreenUpdating» отвечает​ в книге нет.​ 19:35, в сообщении​ № 7200?’200px’:»+(this.scrollHeight+5)+’px’);»>Весь код​ никакой уверенности, что​ А1 была пуста).​if then​ ускорения работы макроса​ строку:​ran​: Всем добрый день)​Юрий М​обложите 4 строку​ указать в константе​ Application.ScreenUpdating: Application.ScreenUpdating =​

Макрос для автоматического обновления файлов (Требуется помощь! Срочно!)

​ VBA. И ради​​ процедура закончилась, свойство​ за обновление экрана​Есть ли такая​ № 12200?’200px’:»+(this.scrollHeight+5)+’px’);»>В каждом​ — на листах,​ во всех версиях​ Мб у Вас​if then​ нужна оптимизация кода,​
​Application.ScreenUpdating = FalseКакие​: Скопировать и вставить​Объясните мне, пожалуйста,​: А всё потому,​ кода в​ путь:​ False . Application.ScreenUpdating​
​ их спокойствия я​ автоматом возвращается в​
​ самого «Excel», но​
​ команда обновления экрана?​ «макросе» в начале​ формах и модулях​ свойство будет работать​
​ в коде всё-таки​if then​
​ а не вкл/выкл.​ ещё желательно добавить​
​ [b5:b6]​ зачем включать обновление​
​ что строка Application.ScreenUpdating​#3​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Папка = «C:Test2»​ = aSU end​
​ пытаюсь сделать так,​ true», но хорошим​
​ не других приложений.​
​RefSol​ вырубал, в конце​
​ — только Function​ одинаково. Причём в​ есть включение, или​
​располагая проверки в​
​paylevan​
​ строки в VBA-код,​
​Юрий М​
​ экрана : )​ = False срабатывает​
​командой​Дмитрий​
​ Subа еще ошибки​
​ чтобы все для​
​ тоном будет вернуть​ Например, удаление значений​
​:​
​ — врубал​
​ и Sub​
​ официальной документации нет​
​ действие, после которого​
​ порядке от более​:​
​ чтобы убыстрить, в​: Скопировал, вставил -​
​Запустите два раза.​
​ до принудительного выхода​ScreenUpdating​
​: Для англоязычной версии​
​ отследить, чтобы дело​
​ них было как​
​ его директивно -​
​ в ячейках, строк​
​AndreA SN​
​Application — относится​
​Цитата​
​ никакого уточнения о​ Application.ScreenUpdating становится равным​ редкого условия к​ber$erk​ целом, работу Excel-приложения?​ что дальше?​Sub io()​ из процедуры (Then​.​ Excel также все​ дошло до выполнения​ можно проще и​ Application.ScreenUpdating = True.​ и т.д.​, попробуйте сделать так:​ к запущенному приложению​SGerman, 12.07.2016 в​ том, как метод​ True (если такие​ более частому (обычно​

​, конечно пользовался, но​​ber$erk​ran​With Application​
​ Exit Sub). А​И после 6​ оставлять ?​
​ последней строки и​

Источник

Содержание

  • Отключить обновление экрана
  • Включить обновление экрана
  • Пример обновления экрана VBA
  • Обновление экрана Обновить

Как бы здорово это ни выглядело, наблюдая, как ваш макрос VBA манипулирует экраном, вы можете помочь вашему макросу работать быстрее, если отключите (отключите) ScreenUpdating.

Отключить обновление экрана

1. Чтобы отключить ScreenUpdating, в начале кода поместите эту строку:

1 Application.ScreenUpdating = False

Включить обновление экрана

2. Чтобы снова включить ScreenUpdating, в конце кода поместите эту строку:

1 Application.ScreenUpdating = True

Тогда ваша процедура будет выглядеть так:

1234567891011 Sub ScreenUpdating_Example ()Application.ScreenUpdating = False’Сделай что-нибудьДиапазон («a1»). Копировать диапазон («b1»)Диапазон («a2»). Копировать диапазон («b2»)Диапазон («a3»). Копировать диапазон («b3»)Application.ScreenUpdating = TrueКонец подписки

Обновление экрана Обновить

Отключение ScreenUpdating заставит ваш код VBA работать НАМНОГО быстрее, но это также сделает вашу работу более профессиональной. Конечные пользователи обычно не хотят видеть закулисные действия ваших процедур (особенно, когда процедура выполняется медленно). Кроме того, вы можете не захотеть, чтобы конечные пользователи видели скрытые функции (например, скрытые рабочие листы). Я рекомендую отключить (и снова включить) ScreenUpdating практически во всех ваших процедурах.

Однако бывают случаи, когда вы хотите, чтобы экран обновился. Чтобы обновить экран, вам нужно будет временно снова включить ScreenUpdating (нет команды «обновить» экрана):

123 Application.ScreenUpdating = True’Сделай что-нибудьApplication.ScreenUpdating = False

Настройки VBA — код ускорения

Есть несколько других настроек, с которыми можно поиграть, чтобы улучшить скорость вашего кода.

Отключение автоматических вычислений может ОГРОМНО изменить скорость:

1 Application.Calculation = xlManual

Отключение строки состояния также имеет небольшое значение:

1 Application.DisplayStatusBar = False

Если ваша рабочая книга содержит события, вам обычно следует отключать события в начале процедуры:

1 Application.EnableEvents = False

Наконец, ваш код VBA может замедлиться, когда Excel пытается повторно вычислить разрывы страниц (Примечание: не все процедуры будут затронуты). Чтобы отключить отображение разрывов страниц, используйте эту строку кода:

1 ActiveSheet.DisplayPageBreaks = False

Вы поможете развитию сайта, поделившись страницей с друзьями

Disabling Screen Updates in Excel VBA

You can give your VBA code a performance boost by simply turning off screen updating while your code runs. This blog explains how to achieve this and how to create a basic timer to test the results.

Posted by
Andrew Gould
on 26 November 2015

You need a minimum screen resolution of about 700 pixels width to see our blogs. This is because they contain diagrams and tables which would not be viewable easily on a mobile phone or small laptop. Please use a larger tablet, notebook or desktop computer, or change your screen resolution settings.

One quick and easy technique to make your code run faster in Excel VBA is to
simply prevent the screen from being redrawn each time something changes. 
You can achieve this by using the ScreenUpdating property of
the Application object.

Creating a Simple Example

To demonstrate the principle of this technique we’ll need a small example
procedure that makes lots of visible changes to the Excel workbook.  You
can either download the example here, or create a new blank workbook, add around
five worksheets to it and then copy the code shown below into a new module.

Sub ColourInABunchOfCells()

Dim ws As Worksheet

Dim r As Range

For Each ws In Worksheets

ws.Select

For Each r In Range(«A1:Z50»)

r.Select

r.Interior.Color = rgbRed

Next r

Next ws

End Sub

Running the Code with Screen Updates On

Before disabling screen updates it’s worth running the code with the property
switched on so that you can appreciate the difference.  Head back into
Excel and either press ALT + F8
on the keyboard or, from the ribbon select Developer | Macros
On the dialog box that appears select the ColourInABunchOfCells
macro and then click the Run button.

Run macro

Select the macro and then click
Run.

You should be able to see the Excel screen flickering in the background as the
macro carries out its tasks until, eventually, it finishes.

Disabling Screen Updates

The next time we run the procedure we don’t want to be able to see the screen
flickering in the background.  To achieve this we need to add a single line
of code to the subroutine, just below the variable declarations.  It’s
probably also worth changing the colour that we’re using so that we can see when
things have changed.

Sub ColourInABunchOfCells()

Dim ws As Worksheet

Dim r As Range

Application.ScreenUpdating = False

For Each ws In Worksheets

ws.Select

For Each r In Range(«A1:Z50»)

r.Select

r.Interior.Color = rgbBlue

Next r

Next ws

End Sub

Now switch back to Excel, display the list of macros by pressing ALT
+ F8 and then run the code again.  This time
you won’t be able to see the macro carrying out its tasks; once the subroutine
has finished the screen will update once at the end to show you the final
result.

The ScreenUpdating property resets at the end of a
procedure.  This means that if you run a different subroutine after the one
above and you haven’t added the line of code to disable screen updates to it,
you’ll be able to see the screen updating in the background.

Adding a Basic Timer

You may have noticed that when running the procedure with screen updates
disabled the subroutine appeared to run faster.  This should certainly be
the case as Excel doesn’t have to continually redraw the screen each time
something changes.  If we want to quantify how much time we’ve saved we can
add some code to create a basic timer system.  The general structure of our
timer is shown below:

Sub BasicTimer()

Dim StartTime As Date, EndTime As Date

Dim TimeTaken As Double

StartTime = Time

EndTime = Time

TimeTaken = (EndTime — StartTime) * 24 * 60 * 60

MsgBox TimeTaken

End Sub

This isn’t the most accurate timer system you can create in VBA but it’s good
enough for our example.  Should you need something a little more accurate
you might want to investigate the
Timer
function instead.  Alternatively, if you’re feeling ambitious, you might
consider using some Windows API functions to
create
incredibly accurate timers.

Adding this timer system to our colour macro should result in the following
code:

Sub ColourInABunchOfCells()

Dim ws As Worksheet

Dim r As Range

Dim StartTime As Date, EndTime As Date

Dim TimeTaken As Double

StartTime = Time

Application.ScreenUpdating = False

For Each ws In Worksheets

ws.Select

For Each r In Range(«A1:Z50»)

r.Select

r.Interior.Color = rgbGreen

Next r

Next ws

EndTime = Time

TimeTaken = (EndTime — StartTime) * 24 * 60 * 60

MsgBox TimeTaken

End Sub

When you run the subroutine again you should now see the time taken in
seconds displayed at the end of the procedure.  You should test this both
with and without screen updating to determine how much faster your code runs.

Your results will vary depending on your computer’s specifications and a
range of other factors but you should certainly see an improvement in
performance when screen updates are turned off.

A More Complex Example

Although the example above demonstrates the principle of the technique, it
doesn’t really reflect the type of code you’re likely to write in the real
world.  The example below is slightly more realistic.  The basic idea
behind this example is to separate a list of films into separate worksheets
based on each film’s genre.

Films to separate

The idea is to create a separate worksheet for each genre and copy each film into the appropriate sheet.

You can download the completed example file here and the code is shown below for
your reference.

Sub SeparateFilmsByGenre()

Dim Genre As String

Dim StartTime As Date, EndTime As Date

Dim TimeTaken As Double

Dim ws As Worksheet

Application.ScreenUpdating = False

StartTime = Time

wsMovies.Select

Range(«A2»).Select

Do Until ActiveCell.Value = «»

Genre = ActiveCell.Offset(0, 7).Value

If Not SheetExists(Genre) Then

Worksheets.Add After:=Sheets(Sheets.Count)

ActiveSheet.Name = Genre

wsMovies.Range(«A1»).EntireRow.Copy ActiveCell

Range(«A2»).Select

End If

wsMovies.Select

ActiveCell.EntireRow.Copy

Worksheets(Genre).Select

ActiveCell.PasteSpecial

ActiveCell.Offset(1, 0).Select

wsMovies.Select

ActiveCell.Offset(1, 0).Select

Loop

Application.CutCopyMode = False

For Each ws In Worksheets

ws.Select

Range(«A1»).Select

ActiveCell.CurrentRegion.EntireColumn.AutoFit

Next ws

wsMovies.Select

EndTime = Time

TimeTaken = (EndTime — StartTime) * 24 * 60 * 60

MsgBox TimeTaken & » seconds»

End Sub

Function SheetExists(SheetName As String) As Boolean

On Error GoTo NoSheet

Sheets(SheetName).Select

SheetExists = True

Exit Function

NoSheet:

SheetExists = False

End Function

There’s also a simple routine that you can run to reset the workbook back to
the original state by deleting all of the genre worksheets.

Sub DeleteAllButMovies()

Dim ws As Worksheet

Application.DisplayAlerts = False

For Each ws In Worksheets

If Not ws Is wsMovies Then ws.Delete

Next ws

End Sub

Again, to test the performance gain you should run the code with screen
updates turned on and then turned off.

An Alternative Approach: Avoiding Selecting Things

Although you can save a lot of time by turning screen updates off, you can
also find performance gains by writing your code in such a way that Excel needs
to update the screen as little as possible.  The easiest way to achieve
this to avoid selecting or activating objects such as worksheets and ranges as
much as possible.  In the example code shown below the only time an object
is selected is when a new worksheet is added to the workbook.

Sub SeparateFilmsAvoidingSelectingThings()

Dim Genre As String

Dim StartTime As Date, EndTime As Date

Dim TimeTaken As Double

Dim ws As Worksheet

Dim r As Range, rs As Range

StartTime = Time

Set rs = _

wsMovies.Range(«A2», wsMovies.Range(«A1»).End(xlDown))

For Each r In rs

Genre = r.Offset(0, 7).Value

If Not SheetExists(Genre) Then

Worksheets.Add After:=Sheets(Sheets.Count)

ActiveSheet.Name = Genre

wsMovies.Range(«A1»).EntireRow.Copy ActiveCell

End If

r.EntireRow.Copy _

Worksheets(Genre).Range(«A1048576»)­.End(xlUp).Offset(1, 0)

Next r

Application.CutCopyMode = False

For Each ws In Worksheets

ws.Range(«A1»).CurrentRegion.­EntireColumn.AutoFit

Next ws

EndTime = Time

TimeTaken = (EndTime — StartTime) * 24 * 60 * 60

MsgBox TimeTaken & » seconds»

End Sub

Running this code even with screen updates turned on results in the following
time:

Avoiding selection

This code runs quickly even with screen updates turned on.

This blog has 0 threads

Add post

Понравилась статья? Поделить с друзьями:
  • Excel отключить макросы в книге
  • Excel отключить макрос макроса
  • Excel отключить замену числа на дату
  • Excel отключить замену датой
  • Excel отключить все автофильтры