Страницы: 1
RSS
Макрос Excel неожиданно начал тормозить
 
Здрасте. Есть макрос (ниже). Создал я его на великом весеннем карантине 2020 путем обычной записи действий. С тех пор этот макрос отрабатывал раз по 100-150 ежесуточно. Работал мгновенно. В середине мая 2021 вдруг начал приостанавливаться. Выяснил, что замирает почти в самом начале на операции Select. Я знаю, что все эти Active и Select это мусорно и все такое, но макрос год работал со скоростью пули, и вдруг (а именно после майского обновления Windows и Office) начал фризить. Причем это происходит только в Office 2013 и 2016. В 2007-2010 (на них не приходят обновления) все летает как прежде.

Вот макрос. Затык происходит на синих строках, выделяет диапазон и останавливается. ТОЛЬКО в синим коде. Либо в строке 20, либо 22. Далее никогда ничего не виснет. Висит секунд 15-20 и потом отрабатывается мгновенно. Обновление экрана я закоментил с целью увидеть место фриза.
Скрытый текст

Есть мнения?
Изменено: rasdmr - 17.06.2021 12:00:44
 
1. как вы уже сами поняли, что дело не в макросе, а в чём-то другом (файле, данных, обновлениях и т.д.)
2. вы видите кракозябли в вашем коде? Вот они 'Âêëþ÷àåì îòñëåæèâàíèå ñîáûòèé  - это говорит о том, что у вас был выбран Английский язык в раскладке Windows перед тем, как вы скопировали код из редактора VBE. Вам надо зайти снова в ваш код, переключить раскладку Windows на русский язык (там где часики в правом нижнем углу монитора), и снова скопировать код и заменить ваш старый код на новый в вашем первом сообщении
3. Код можно выкладывать в приложенном файле с небольшим примером на листе.
Изменено: New - 17.06.2021 12:03:26
 
ну русские комметарии не сильно помогут, а вот то что сразу в глаза бросается так это работа с выделенными (SELECT) областями. Все эти
Код
Range("A20:AI20").Select
   Selection.Clear

заменить на
Код
Range("A20:AI20").Clear
и
Код
Range("R90:R94").Replace What:=" (", Replacement:=";", LookAt:=xlPart, _
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False
ну а там  и видно будет что и как у вас.
По вопросам из тем форума, личку не читаю.
 
Цитата
New написал:
кракозябли в вашем коде
это там просто комменты, типа Отключаем обновление экрана или Отключаем автоматический пересчет - на макрос никак не влияет, для себя писал, чтоб помнить, что за строка

Цитата
New написал:
с небольшим примером на листе
с примером не могу, не выдернуть из полного файла, там обработка хитрой таблички из инета, т.е. ручками таблица на сайте выделяется, копируется, в файл вставляется и запускается макрос, который сделает из таблички нормальные строки/столбцы и сразу посчитает. Пример таблички Вашингтон Мистикс (ж) - Атланта Дрим (ж) | H2H | Баскетбол | БЕТСИТИ (betcity.ru), вот скриншот рабочего файла, этот макрос работает в синем квадрате, делает из этой ужасно-замудренной таблички вот такую простую
[SPOILER=]https://images4.imagebam.com/3a/fe/ea/ME14IYU_o.png[/SPOILER]
Цитата
БМВ написал:
Range("A20:AI20").Clear
Уже пытался, если заменить все, то получается такой замедленный мультик, вокруг диапазона появляется пунктирчик, потом очищается, пунктирчик пропадает, появляется в следующем диапазоне и так в каждой строчке, что в итоге становится еще дольше. На обработку 20 строк ушло 51 сек

Вот я приложу файл, куда внес эту хитрую табличку. Надо просто нажать Ctrl+W или запустить макрос volten_betcity_3. Ждать, пока курсор не попадет в F1. Вот этот самый файл до мая работал молниеносно. За год в нем ничего не менялось. В Excel 2007-2010 вот этот приложенный файл выполняет все мгновенно!
Изменено: rasdmr - 17.06.2021 23:53:37
 
ну и в 2016 тоже не долго успел до 3 досчитать когда отключил события и обновления экрана. Комп перезагружали давно?
Изменено: БМВ - 17.06.2021 15:54:08
По вопросам из тем форума, личку не читаю.
 
Код
'    Application.ScreenUpdating = False
'    Application.EnableEvents = False
'   Application.Calculation = xlCalculationManualisplayPageBreaks = False
В начале кода попробуйте раскомментировать. Только не забудьте в конце включить всё назад. И как правильно заметил БМВ, в 3 сообщении, постарайтесь максимально избавиться от Selectов.  
Изменено: msi2102 - 17.06.2021 16:37:33
 
Цитата
БМВ написал:
Комп перезагружали давно?
Буквально вчера вечером снес 8.1 и установил 10. Вообще комп работает только днем. Проблема такая же и на ноуте, где 8.1 home
Скрытый текст



Цитата
msi2102 написал:
В начале кода попробуйте раскомментировать.
Оно было расскомментированно. Закомментировал с целью увидеть место фриза. Я понимаю аллергию у всех на Select, но файл отработал молниеносно тысячи раз и перестал работать вдруг, по щелчку. В 2 часа ночи он работал. Потом в 11 утра обновилась винда и офис ежемесячным обновлением и все. Я понимаю, что Select это не кошерно или не красиво, но так сильно влиять на скорость такого маленького макроса это не может. У меня в файле не один этот макрос (исходные таблички из разных источников, под каждый вид свой макрос), однако остальные тоже содержат Select и в еще большем количестве и это не мешает.
 
Цитата
rasdmr написал:
Потом в 11 утра обновилась винда и офис ежемесячным обновлением и все.
ну так откатите обновление и проверьте. Если работает, то виноваты они.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Если работает, то виноваты они.
вот поэтому я в своём сообщении выше и ничего не стал писать ТС'у про Select, раз он сказал, что до этого макрос быстро работал, а после обновления стал тормозить.
Избавиться от Select'ов конечно желательно, но проблема видно не в них, раз до этого всё работало быстро.
И предложил ТС'у выложить код в файле, чтобы за него убрать все Select'ы в его коде. Я не хотел брать его код с кракозяблями, копировать себе в файл, редактировать его и снова давать его ТС. Так как ему надо будет копировать мой код с его кракозяблями и вставлять в свой файл.
Изменено: New - 18.06.2021 22:25:44
 
В общем проблема решена. Помогли российские враги, британец из городка Телфорд. Нашел через телеграм. Короче, в мае микрософты прекратили поддержку очередного ряда процессоров. Мой Intel G850 попал в этот ряд. Теперь глупый Ексель при расчетах создает какую-то там виртуализацию для обращения к процессору, а для этой виртуализации требуется четкое, а не бездумное использование всех этих отключалок/включалок.
Короче. Сначала отключаем прорисовку экрана, потом отключаем отслеживание событий, именно так, а не наоборот.
В конце включаем отслеживание событий, а потом прорисовку экрана, именно так, а не наоборот.
По утверждению британа возня с Select в макросах менее 1000 строк для 32бит и 5-10 тыс строк для 64бит при обычном процессоре Celeron 1,1Ггц и минимальном кэше 1 Мб никакого влияние на скорость выполнения макроса не оказывает.
В общем все снова летает.

Всем спасибо и удачи.
 
Цитата
rasdmr написал:
Сначала отключаем прорисовку экрана, потом отключаем отслеживание событий, именно так, а не наоборот
Забавно, если это правда...
Теперь со следующими обновлениями и версиями нужно нужно быть готовым и ждать предписаний о строго определенном порядке совместного применения стандартных функций - сначала финансовые, только после них текстовые, после текстовых дата и время и только потом логические и т.д.  ...  ?  8-0  А выход только в приобретении нового железа?   :(  
 
Цитата
rasdmr написал:
Сначала отключаем прорисовку экрана, потом отключаем отслеживание событий, именно так, а не наоборот
В 6 сообщении я Вам писал чтобы Вы это сделали. Последовательность именно та которую Вы описывали выше (хотя не уверен, что последовательность влияет на скорость, возможно это и так). И вы писали, что закомментировали их специально. Не понимаю почему нужно было ждать ответа из-за бугра, чтобы вернуть всё как было :D
И к тому же не понятно, почему остальные макросы у Вас продолжали летать. Не может же быть, чтобы у них был тот же Intel G850, только немного лучше
Изменено: msi2102 - 17.06.2021 22:39:27
 
Цитата
rasdmr написал:
По утверждению британа возня с Select в макросах менее 1000 строк для 32бит и 5-10 тыс строк для 64бит при обычном процессоре Celeron 1,1Ггц и минимальном кэше 1 Мб никакого влияние на скорость выполнения макроса не оказывает.
Ну в британии много чего не оказывает. Про SELECT я писал прежде всего по тому, что портянку бессмысленных операций смотреть даже трудно. а не по тому что вдруг все залетает. Я конечно грешил на данные, вдруг что поменялось иии. но всегда искать надо корневые изменения, которые могут влиять на приложения.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх