Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2022, 02:30   #1
Komilfo79
 
Регистрация: 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
------------------------------------------------------------------------------------
Komilfo79 вне форума Ответить с цитированием
Старый 20.04.2022, 19:34   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Здравствуйте.
Внутри вашего большого цикла, раз в 1000 итераций, проверяем, прошли ли 0,2 секунды с момента предыдущего обновления прогрессбара, и обновляем прогрессбар
Типа такого:
Код:
' ваш макрос
for i = 1 to 10000000

   if i mod 1000=0 then ' чтобы не очень часто проверка была
       if timer - lastTime>0.2 then lastTime=timer : Call ОбновитьПрогрессбар
   end if

' тут исходное содержимое вашего цикла

next i
Ну а процент выполнения сложно посчитать
Тем не менее, можно организовать что-то, что более-менее точно отображает процент:
https://excelvba.ru/code/tools/ProgressIndicator

Последний раз редактировалось EducatedFool; 20.04.2022 в 19:36.
EducatedFool вне форума Ответить с цитированием
Старый 22.04.2022, 04:15   #3
Komilfo79
 
Регистрация: 10.03.2017
Сообщений: 5
По умолчанию Спасибо

В общем тема сложная, спасибо всем за участие...временно решил проблему - вставил через промежутки часть кода, работает каряво ну хоть так... Всем спасибо.
Komilfo79 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Время выполнения макроса... 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