Страницы: 1
RSS
Статус бар в макрос
 
Друзья, привет. Нужна Ваша помощь, есть код для расчёте математической модели, расчёт занимает от 10 до 30 минут, в зависимости от кол-во вводных данных. Через форум нашёл прогресс бар, но когда "вкорячил" свой код в данный статус бар появились "приключения"

Код расчёта:
Скрытый текст

Код Статус Бара
Скрытый текст

В оригинале было:
Скрытый текст

Но когда добавляю переменную вылетаеть ошибка:
"Wrong number of arguments or invalid property assigment"
Без данного аргумента статус бар работает, но считает оригинальный макрос в 4 раза дольше.

Помогите, что делать нет не понимаю, все работает, но нереально долго ....
Изменено: Даниэль - 02.10.2018 11:11:18
 
Даниэль, у Вас в коде расчета уже есть вывод в статусбар, 105 строка. Зачем прикручивать еще внешний класс?
И зачем этот вывод повторять в цикле lAllCnt раз?!

А лучше оптимизировать код, чтобы ускорить его на порядок, тогда и статусбар будет неактуален. Для этого нужен файл-пример и словесное описание алгоритма.
Изменено: Казанский - 02.10.2018 10:12:14
 
Там, откуда Вы взяли пример вывода в StatusBar я вроде неплохо расписал в каких случаях и как правильно выводить информацию. У Вас циклы Do, которые не имеют четкой конечной границы и поэтому статус-бар можно использовать только для показа, что что-то вообще делается. Но в процентах это сделать не получится, чтобы нормально показывало.
Почитайте более внимательно и с самого начала: Отобразить процесс выполнения кода

Чисто теоретически здесь:
Код
For lr = 1 To lAllCnt
        Application.StatusBar = "Выполнено: " & Int(100 * lr / lAllCnt) & "%" & String(CLng(lMaxQuad * lr / lAllCnt), ChrW(9632)) & String(lMaxQuad - CLng(lMaxQuad * lr / lAllCnt), ChrW(9633))
        DoEvents
    Next
            iSection = iSection + 1
        Loop
 
        iStoreRow = iStoreRow + 1
можно записать так:
Код
Application.StatusBar = "Выполнено: " & Int(100 * iSection / lAllCnt) & "%" & String(CLng(lMaxQuad * iSection / lAllCnt), ChrW(9632)) & String(lMaxQuad - CLng(lMaxQuad * iSection / lAllCnt), ChrW(9633))
        DoEvents
            iSection = iSection + 1
        Loop
 
        iStoreRow = iStoreRow + 1
но проблема в том, что мы не знаем значение lAllCnt и не узнаем, т.к. цикл Do не предусматривает наличие четких конечных границ.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Казанский написал:
А лучше оптимизировать код
Тут наверно фишка в том, что бы видеть ползунок, круто же когда знаешь сколько % осталось :D . Это же интересней чем использовать массивы. ;)
Изменено: Nordheim - 02.10.2018 10:28:41
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Казанский написал:  у Вас в коде расчета уже есть вывод в статусбар, 105 строка.
Забыл совсем про этот статус бар, он не корректно работает, он работает после каждого цикла, но не отображает весь процесс, просто пробегает внизу от начала до конца и стартует верхний цикл.
 
Дмитрий(The_Prist) Щербаков, код начал считать еще дольше =(
 
Цитата
Казанский написал:
А лучше оптимизировать код, чтобы ускорить его на порядок, тогда и статусбар будет неактуален. Для этого нужен файл-пример и словесное описание алгоритма
Сегодня вечером постараюсь сделать шаблон файла с описанием кода.
 
Цитата
Даниэль написал:
код начал считать еще дольше
как-то я сомневаюсь, что отображение статус-бара один раз в цикле вместо For lr = 1 To lAllCnt раз замедлило работу. Где-то Вы косячите даже не вдумываясь в смысл происходящего и того, что делаете сами.  
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Казанский написал:
А лучше оптимизировать код, чтобы ускорить его на порядок, тогда и статусбар будет неактуален. Для этого нужен файл-пример и словесное описание алгоритма.

Макрос должен делать:
Необходимо поочерёдно подставить номера магазинов, указанных в столбце A (в среднем расчёт идет на 450 магазинов) (начиная с ячейки А9) листа "Аналитика" в ячейку D1 листа "Параметры" и вывести данные из листа "Для макроса" в лист "Аналитика" в столбцы с указанием "Макрос" (в строке 8 ) начиная с 9 строки.
В качестве примера в строке 9 приведены ссылки на ячейки из которых нужно забрать данные.

Пример
Изменено: Даниэль - 04.10.2018 23:12:06
Страницы: 1
Наверх