|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.04.2022, 02:30 | #1 |
Регистрация: 10.03.2017
Сообщений: 5
|
Progress bar или индикация выполнения макроса
Здравствуйте Ув.Профессионалы!
Хотелось бы попросить Вашей помощи в следующем вопросе. Столкнулся с необычной проблемой. У меня есть макрос в котором есть 6 циклов и каждый цикл разной длины и размерности. Суть моего макроса это сравнение двух разных книг и копирование всей информации из одной книги в другую при этом учитывает чтобы кол-во строк было равным, и поэтому в макросе много циклов. Сам макрос выполняется около 40 сек. Так вот возник вопрос как отобразить процесс выполнения макроса. Читал много разных идей но так и не нашёл нужный вариант. Т.е. мне не нужно создавать форму и делать в ней прогресбар для меня лучший вариант отображение в статус бар что упрощает вывод индикации. Ниже код который я использую для того чтобы видеть прогресс, но он работает если его вставить в один цикл, тогда понятно как связать его с макросом но у меня много разных циклов. Так вот вопрос: как привязать данный код к макросу с множеством циклов? И можно ли запустить индикацию так чтобы параллельно выполнялся макрос? Ну и получится что я буду видеть ход выполнения макроса. PS: Есть вариант где через промежутки кода вставить фиксированные значения - это не подходит т.к. длина циклов разная Пробовал привязать макрос через Timer т.e выполнение макроса в сек находил с помощью таймера а значит я могу точно знать необходимое кол-во итераций в макросе. Но как всё связать так и не получилось. ------------------------------------------------------------------------------------ 'Вариант отображения % и стрелками ->(1 стрелка = 10% выполнения) Sub StatusBar() Dim lr As Long, lp As Double Dim lAllCnt As Long 'кол-во итераций Dim s As String lAllCnt = 10000 For lr = 1 To lAllCnt lp = lr \ 100 'десятая часть всего массива 'формируем строку символов(от 1 до 10) s = String(lp \ 10, ChrW(10152)) & String(11 - lp \ 10, ChrW(8700)) Application.StatusBar = "Выполнено: " & lp & "% " & s: DoEvents DoEvents Next 'очищаем статус-бар от значений после выполнения Application.StatusBar = False End Sub ------------------------------------------------------------------------------------ |
20.04.2022, 19:34 | #2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Здравствуйте.
Внутри вашего большого цикла, раз в 1000 итераций, проверяем, прошли ли 0,2 секунды с момента предыдущего обновления прогрессбара, и обновляем прогрессбар Типа такого: Код:
Тем не менее, можно организовать что-то, что более-менее точно отображает процент: https://excelvba.ru/code/tools/ProgressIndicator
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 20.04.2022 в 19:36. |
22.04.2022, 04:15 | #3 |
Регистрация: 10.03.2017
Сообщений: 5
|
Спасибо
В общем тема сложная, спасибо всем за участие...временно решил проблему - вставил через промежутки часть кода, работает каряво ну хоть так... Всем спасибо.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Время выполнения макроса... | nikolai_P | Microsoft Office Excel | 9 | 03.04.2013 00:59 |
Задержка выполнения макроса. | dsharikoff | Microsoft Office Excel | 7 | 04.10.2011 22:22 |
Задержка выполнения макроса | MiheyS | Microsoft Office Word | 11 | 18.04.2011 00:16 |
Прекращение выполнения макроса | AesmaDiv | Microsoft Office Excel | 6 | 12.12.2010 18:30 |
Пауза выполнения макроса | artclon | Microsoft Office Excel | 3 | 09.02.2010 05:13 |