Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Progress bar или индикация выполнения макроса - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Progress bar или индикация выполнения макроса
komilfo2285 Дата: Суббота, 16.04.2022, 15:39 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте Ув.Профессионалы!
Хотелось бы попросить Вашей помощи в следующем вопросе.

Столкнулся с необычной проблемой. У меня есть макрос в котором есть 6 циклов и каждый цикл разной длины и размерности. Суть моего макроса это сравнение двух разных книг и копирование всей информации из одной книги в другую при этом учитывает чтобы кол-во строк было равным, и поэтому в макросе много циклов. Сам макрос выполняется около 40 сек. Так вот возник вопрос как отобразить процесс выполнения макроса. Читал много разных идей но так и не нашёл нужный вариант. Т.е. мне не нужно создавать форму и делать в ней прогресбар для меня лучший вариант отображение в статус бар что упрощает вывод индикации. Ниже код который я использую для того чтобы видеть прогресс, но он работает если его вставить в один цикл, тогда понятно как связать его с макросом но у меня много разных циклов.

Так вот вопрос: как привязать данный код к макросу с множеством циклов? И можно ли запустить индикацию так чтобы параллельно выполнялся макрос? Ну и получится что я буду видеть ход выполнения макроса.

PS: Есть вариант где через промежутки кода вставить фиксированные значения - это не подходит т.к. длина циклов разная
Пробовал привязать макрос через Timer т.e выполнение макроса в сек находил с помощью таймера а значит я могу точно знать необходимое кол-во итераций в макросе. Но как всё связать так и не получилось.

[vba]
Код

'Вариант отображения % и стрелками ->(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
[/vba]


Сообщение отредактировал komilfo2285 - Воскресенье, 17.04.2022, 02:35
 
Ответить
СообщениеЗдравствуйте Ув.Профессионалы!
Хотелось бы попросить Вашей помощи в следующем вопросе.

Столкнулся с необычной проблемой. У меня есть макрос в котором есть 6 циклов и каждый цикл разной длины и размерности. Суть моего макроса это сравнение двух разных книг и копирование всей информации из одной книги в другую при этом учитывает чтобы кол-во строк было равным, и поэтому в макросе много циклов. Сам макрос выполняется около 40 сек. Так вот возник вопрос как отобразить процесс выполнения макроса. Читал много разных идей но так и не нашёл нужный вариант. Т.е. мне не нужно создавать форму и делать в ней прогресбар для меня лучший вариант отображение в статус бар что упрощает вывод индикации. Ниже код который я использую для того чтобы видеть прогресс, но он работает если его вставить в один цикл, тогда понятно как связать его с макросом но у меня много разных циклов.

Так вот вопрос: как привязать данный код к макросу с множеством циклов? И можно ли запустить индикацию так чтобы параллельно выполнялся макрос? Ну и получится что я буду видеть ход выполнения макроса.

PS: Есть вариант где через промежутки кода вставить фиксированные значения - это не подходит т.к. длина циклов разная
Пробовал привязать макрос через Timer т.e выполнение макроса в сек находил с помощью таймера а значит я могу точно знать необходимое кол-во итераций в макросе. Но как всё связать так и не получилось.

[vba]
Код

'Вариант отображения % и стрелками ->(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
[/vba]

Автор - komilfo2285
Дата добавления - 16.04.2022 в 15:39
_Igor_61 Дата: Воскресенье, 17.04.2022, 19:26 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
Есть вариант где через промежутки кода вставить фиксированные значения - это не подходит т.к. длина циклов разная
А что мешает начало и конец цикла помещать в переменные? И причем тут таймер? Он вообще-то отработанное время считает, а не кол-во итераций или ячеек...
 
Ответить
Сообщение
Есть вариант где через промежутки кода вставить фиксированные значения - это не подходит т.к. длина циклов разная
А что мешает начало и конец цикла помещать в переменные? И причем тут таймер? Он вообще-то отработанное время считает, а не кол-во итераций или ячеек...

Автор - _Igor_61
Дата добавления - 17.04.2022 в 19:26
bmv98rus Дата: Воскресенье, 17.04.2022, 20:22 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4115
Репутация: 769 ±
Замечаний: 0% ±

Excel 2013/2016
И можно ли запустить индикацию так чтобы параллельно выполнялся макрос?
нет. Многозадачность не поддерживается и нужно из каждого макроса изменять состояние индикатора.
Любой прогресс бар показывает относительно известной величины. Например известно количество этапов - их завершение можно отобразить. Если она не известна, то лучше использовать ,что-то что дает понять что процесс идет, но не акцентировать на том что осталось столько т. В противном случае некорректный указатель может только сбивать.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение
И можно ли запустить индикацию так чтобы параллельно выполнялся макрос?
нет. Многозадачность не поддерживается и нужно из каждого макроса изменять состояние индикатора.
Любой прогресс бар показывает относительно известной величины. Например известно количество этапов - их завершение можно отобразить. Если она не известна, то лучше использовать ,что-то что дает понять что процесс идет, но не акцентировать на том что осталось столько т. В противном случае некорректный указатель может только сбивать.

Автор - bmv98rus
Дата добавления - 17.04.2022 в 20:22
komilfo2285 Дата: Понедельник, 18.04.2022, 17:00 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

_Igor_61,
Таймер я использовал для того чтобы определить скорость макроса, разные ПК вычисляют макрос с разной скоростью, а значит для того чтобы шкала в 100% была верной я считал Timer время выполнения и присваивал значение в переменную "lAllCnt" а зная время - его можно конвертировать в итерации, таким образом шкала имеет правильный вид.
 
Ответить
Сообщение_Igor_61,
Таймер я использовал для того чтобы определить скорость макроса, разные ПК вычисляют макрос с разной скоростью, а значит для того чтобы шкала в 100% была верной я считал Timer время выполнения и присваивал значение в переменную "lAllCnt" а зная время - его можно конвертировать в итерации, таким образом шкала имеет правильный вид.

Автор - komilfo2285
Дата добавления - 18.04.2022 в 17:00
_Boroda_ Дата: Вторник, 19.04.2022, 09:16 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Кирилл, посмотрите вот здесь, возможно, поможет
https://excelvba.ru/code/tools/ProgressIndicator


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеКирилл, посмотрите вот здесь, возможно, поможет
https://excelvba.ru/code/tools/ProgressIndicator

Автор - _Boroda_
Дата добавления - 19.04.2022 в 09:16
komilfo2285 Дата: Пятница, 22.04.2022, 04:14 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

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

Автор - komilfo2285
Дата добавления - 22.04.2022 в 04:14
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!