Страницы: 1
RSS
Зависает окно userform, но макрос продолжает выполняться
 
Доброго дня всем
Есть некоторый макрос, который сравнивает 3 различных диапазона в двух книгах и если значения совпадают выполняет перенос значений ячеек из одной книги в другую. Но суть не в этом. Прикрутил я к макросу userform для удобства отображения хода выполнения задачи. Целый progressbar мне не нужен, поэтому процесс выполнения отображается по типу "выполнено Х/из всего У". Перед началом работы макрос отключает обновление экрана и авторасчёт формул. Но почему-то окошко userform и всё окно excel виснет через некоторое время после начала работы макроса и вся красота с отображением процесса работы не работает :cry: При этом макрос продолжает выполняться и через некоторое время корректно выполняет задачу и завершается с отвисанием окон. Работает всё это на excel 2007.
Маленькая гифка с моей userform

Что можно сделать что бы окна userform и excel не зависали и процесс работы продолжал показываться до завершения макроса?
Самое очевидное, как я понимаю, либо как-то облегчить макрос, либо апгрейд железа? Но может есть другие варианты и можно как-то где-то поковыряться в настройках чего-то? :)
Изменено: kenigfinn - 12.05.2022 12:17:21
 
kenigfinn, здравствуйте
Читайте статью ОТОБРАЗИТЬ ПРОЦЕСС ВЫПОЛНЕНИЯ

Я использую вывод прогресса в прогрессбар (в левом нижнем углу) — по 10%. Перед выводом нужно включить обновление экрана, вывести, потом сделать DoEvents и после этого вернуть обновление экрана
Пользуйтесь на здоровье  :)
Наверное, с формой, тоже что-то похожее нужно делать…
Изменено: Jack Famous - 12.05.2022 12:37:45
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, спасибо за ответ!
Видится мне, что с самим макросом у меня всё ок. Об этом говорит то, что вначале всё отображается корректно, а в коде макроса после 16 итерации следует точно такая же 17-ая (обычный цикл For...Next), и ничего в тексте макроса не меняется, что могло бы как-то объяснить подвисание. При этом виснет не всегда после 16, это зависит от того, по каким книгам сейчас работает макрос. В процессе выполнения книги, опять же, не меняются.

Цитата
потом сделать DoEvents
Обновляю userform  с помощью UserForm.Repaint

Цитата
Читайте статью  ОТОБРАЗИТЬ ПРОЦЕСС ВЫПОЛНЕНИЯ
Эту статью читал и выводить прогресс в statusbar пробовал, результат тот же, через некоторое время после начала работы макроса значения прогресса перестают обновляться.
Изменено: kenigfinn - 12.05.2022 13:04:55
 
Цитата
kenigfinn: через некоторое время после начала работы макроса значения прогресса перестают обновляться
значит не включаете обновление перед выводом и/или не делаете DoEvents. Мою процедуру попробуйте.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Попробуйте добавьте DoEvents до обновления формы и 2 раза DoEvents после обновления данных на форме. Что-то типа такого
Код
DoEvents
UserForm.Repaint
DoEvents
DoEvents
 
Jack Famous и New, Вы оба правы! DoEvents решает мои проблемы  :)
Спасибо Вам огромное!  :D
Страницы: 1
Наверх