Здравствуйте! Подскажите пожалуйста как макросом отключить обновление определенного диапазона ячеек с формулами, остальные ячейки автоматически обновляются. Например отключаем автоматическое обновление формул в диапазоне ячеек A1:Y10000 (в моих условиях приблизительно 15000000 ячеек с формулами пересчет которых надо на время остановить), проделываем нужные операции и опять включаем автоматический пересчет формул в указанных ячейках. Данная операция нужна для более быстрой обработки макроса. Спасибо!
Здравствуйте! Подскажите пожалуйста как макросом отключить обновление определенного диапазона ячеек с формулами, остальные ячейки автоматически обновляются. Например отключаем автоматическое обновление формул в диапазоне ячеек A1:Y10000 (в моих условиях приблизительно 15000000 ячеек с формулами пересчет которых надо на время остановить), проделываем нужные операции и опять включаем автоматический пересчет формул в указанных ячейках. Данная операция нужна для более быстрой обработки макроса. Спасибо!djon2012
[/vba] Или всё же настаиваете на отключении формул в определенном диапазоне? Только мне не понятна такая процедура, ведь при включении автопересчета все формулы в книге будут пересчитаны и это займет время.
Остановите пересчет всей книги[vba]
Код
Application.Calculation = xlManual
[/vba]Пересчитайте нужный диапазон [vba]
Код
ActiveSheet.Range("A1:C3").Calculate
[/vba]Включите вновь автопересчет[vba]
Код
Application.Calculation = xlAutomatic
[/vba] Или всё же настаиваете на отключении формул в определенном диапазоне? Только мне не понятна такая процедура, ведь при включении автопересчета все формулы в книге будут пересчитаны и это займет время.gling
ЯД-41001506838083
Сообщение отредактировал gling - Среда, 18.09.2019, 00:28
Здравствуйте gling! Да мне нужно отключить пересчет формул именно в определенном диапазоне. И да, вы абсолютно правы, что при включенном автопересчета ВСЕ ФОРМУЛЫ в книге будут пересчитаны и это ЗАЙМЕТ ВРЕМЯ. Как я уже упоминал у меня на листе более 15 000 000 формул в определенном диапазоне, обновление которых мне нужно только в определенный момент, а далее отключить пересчет этого диапазона ячеек с формулами. На листе кроме этого диапазона ячеек с формулами (15 000 000 ячеек), есть и с 100-ню других ячеек с формулами пересчет которых мне нужен постоянно. При работе макроса идет очень долгое его выполнение так как в процессе его работы идет постоянный перерасчет ВСЕХ ФОРМУЛ в книге а это напомню болеее 15 000 000 ячеек. Вот для этого мне нужно отключить перерасчет именно этого диапазона ячеек с 15 000 000 формул, оставляя возможность работать остальным ячейкам с формулами потом за надобностью снова включить чтобы обновить данные и отключить. Очень старался обьяснить аж взопрел. Пойду ка я випью кофейку, чего и вам желаю. Спасибо!
Здравствуйте gling! Да мне нужно отключить пересчет формул именно в определенном диапазоне. И да, вы абсолютно правы, что при включенном автопересчета ВСЕ ФОРМУЛЫ в книге будут пересчитаны и это ЗАЙМЕТ ВРЕМЯ. Как я уже упоминал у меня на листе более 15 000 000 формул в определенном диапазоне, обновление которых мне нужно только в определенный момент, а далее отключить пересчет этого диапазона ячеек с формулами. На листе кроме этого диапазона ячеек с формулами (15 000 000 ячеек), есть и с 100-ню других ячеек с формулами пересчет которых мне нужен постоянно. При работе макроса идет очень долгое его выполнение так как в процессе его работы идет постоянный перерасчет ВСЕХ ФОРМУЛ в книге а это напомню болеее 15 000 000 ячеек. Вот для этого мне нужно отключить перерасчет именно этого диапазона ячеек с 15 000 000 формул, оставляя возможность работать остальным ячейкам с формулами потом за надобностью снова включить чтобы обновить данные и отключить. Очень старался обьяснить аж взопрел. Пойду ка я випью кофейку, чего и вам желаю. Спасибо!djon2012
А возможно ли сделать так чтобы отключить автоматический пересчет формул на одном листе книги Excel, но оставить его на другом. Другими словами на Лист1 формулы не будут автоматически пересчитываться, а на Лист2 будут автоматически пересчитываться
А возможно ли сделать так чтобы отключить автоматический пересчет формул на одном листе книги Excel, но оставить его на другом. Другими словами на Лист1 формулы не будут автоматически пересчитываться, а на Лист2 будут автоматически пересчитыватьсяdjon2012
Можно попробовать без программирования обернуть все формулы условием, зависящим от некоторой "управляющей" ячейки (например, A1). Т.е., например, имеющуюся формулу (допустим, в ячейке B2):
Код
=B1+1
превратить в
Код
=ЕСЛИ($A$1;B1+1)
И далее вводить в ячейку A1 число 1, если пересчет формул нужен, и число 0 (или просто стирать значение), если пересчет не нужен.
Точно не уверен (но можно же проверить на практике!), но, вроде бы, если по условию получается ЛОЖЬ, то выражение в функции ЕСЛИ, соответствующее значению ИСТИНА, не вычисляется/не пересчитывается (и наоборот, соответственно, тоже). Т.е., вроде бы, в ЕСЛИ по соображениям экономии всегда вычисляется только одна его часть.
P.S. Провел небольшое исследование. Добавил в формулу вызов пользовательской функции (UDF):
Код
=ЕСЛИ($A$1;B1+1+qwerty())
Где сама UDF имеет такой вид: [vba]
Код
Function qwerty() qwerty = 10 'и на эту строку ставим точку прерывания End Function
[/vba] Так вот, при "выключенном пересчете" (при A1 = 0) любые изменения, производимые с ячейкой B1, не вызывают захода в UDF и останова на точке прерывания. Установка же значения A1 = 1 тут же приводит к такому останову.
Можно попробовать без программирования обернуть все формулы условием, зависящим от некоторой "управляющей" ячейки (например, A1). Т.е., например, имеющуюся формулу (допустим, в ячейке B2):
Код
=B1+1
превратить в
Код
=ЕСЛИ($A$1;B1+1)
И далее вводить в ячейку A1 число 1, если пересчет формул нужен, и число 0 (или просто стирать значение), если пересчет не нужен.
Точно не уверен (но можно же проверить на практике!), но, вроде бы, если по условию получается ЛОЖЬ, то выражение в функции ЕСЛИ, соответствующее значению ИСТИНА, не вычисляется/не пересчитывается (и наоборот, соответственно, тоже). Т.е., вроде бы, в ЕСЛИ по соображениям экономии всегда вычисляется только одна его часть.
P.S. Провел небольшое исследование. Добавил в формулу вызов пользовательской функции (UDF):
Код
=ЕСЛИ($A$1;B1+1+qwerty())
Где сама UDF имеет такой вид: [vba]
Код
Function qwerty() qwerty = 10 'и на эту строку ставим точку прерывания End Function
[/vba] Так вот, при "выключенном пересчете" (при A1 = 0) любые изменения, производимые с ячейкой B1, не вызывают захода в UDF и останова на точке прерывания. Установка же значения A1 = 1 тут же приводит к такому останову.Gustav