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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2011, 17:11   #1
А)-(дрей
Пользователь
 
Аватар для А)-(дрей
 
Регистрация: 28.02.2011
Сообщений: 42
По умолчанию Цикл и прогресс-бар

Здравствуйте увожаемые форумчане! Подскажите пожалуйста как сделать - в примере приведен код: имеется цикл на выполнение i операций с заполнением множества строк - дело в том что не могу правильно пояснить прогресс-бару в строке кода {pi.StartNewAction 0, 100, "Заполнение данными", , , i} что поставить вместо i, т.к. цикл выполняется не построчно, а поформульно (т.е. заполняется колонки формулами последовательно одна за другой, а не строки одна за другой) и прогресс-бар не понимает такого заполнения - было бы правильно ИМХО как то озадачить прогресс-бар - на выполнение i-той операции... вот в этом и загвоздка, не могу сформулировать его корректную работу?!... Может кто знает как это осуществить?
Вложения
Тип файла: rar расчет.rar (69.6 Кб, 27 просмотров)
А)-(дрей вне форума Ответить с цитированием
Старый 14.03.2011, 17:22   #2
А)-(дрей
Пользователь
 
Аватар для А)-(дрей
 
Регистрация: 28.02.2011
Сообщений: 42
По умолчанию

кстати EducatedFool огромное спасибо за коды и направления мыслей
А)-(дрей вне форума Ответить с цитированием
Старый 15.03.2011, 19:34   #3
А)-(дрей
Пользователь
 
Аватар для А)-(дрей
 
Регистрация: 28.02.2011
Сообщений: 42
По умолчанию

Для наглядности выкладываю пример решения данной проблемы по "сложному" пути, а именно разделению поформульно на отдельные циклы с добавлением на каждую прогрессбара - результат: прогрессбар конечно заработал, но появляются отдельные проблемы - это мерцание прогрессбара (так как задержка заданная строкой кода убрана For n = 1 To 500: DoEvents: Next), еще одна сопутствующая проблема такого толкования кода - значительное увеличение продолжительности выполнения макроса "analiz"... трудно представить сколько займет времени использование параметра Data в циклах при увеличении количества строк начальных данных для расчета. Итог - решение для организации общего (одного) цикла для работы прогрессбара не найдено...
Вложения
Тип файла: rar расчет2.rar (71.4 Кб, 57 просмотров)
А)-(дрей вне форума Ответить с цитированием
Старый 15.03.2011, 20:42   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Код:
    '=====================================Объявление цикла==================================================
        For i = 1 To Data
    '==========================================Прогрессбар==================================================
    ' запуск прогресс-бара
    Dim pi As New ProgressIndicator
    pi.Show "Обработка данных": pi.ShowPercents = True
    pi.StartNewAction 0, 100, "Заполнение данными", , , i
    pi.SubAction , "Заполнение строки " & i
Ну зачем же создавать прогресс бар ВНУТРИ ЦИКЛА?
Это во много раз замедлит выполнение макроса...

Вам не прогресс-бар надо добавлять, а оптимизировать макрос (переделав его почти полностью)
Тогда он будет выполняться за доли секунды, и визуализация не потребуется.
(надо формировать результаты в массиве, и потом одной строкой кода переносить массив формул на лист)

Если так хочется прогресс-бар - то переставьте строки:
Код:
    Range("BZ3:BZ17").Select
    Selection.NumberFormat = "dd/mm/yy h:mm;@"
    '==========================================Прогрессбар==================================================
    ' запуск прогресс-бара
    Dim pi As New ProgressIndicator
    pi.Show "Обработка данных": pi.ShowPercents = True
    pi.StartNewAction 0, 100, "Заполнение данными", , , Data

    '=====================================Объявление цикла==================================================
    For i = 1 To Data
        pi.SubAction , "Заполнение строки " & i: DoEvents

        Cells(i + 1, 1) = CDate(Cells(i + 1, 1).Text)

        '====================================Расчет максимумов==================================================
        Cells(i + 1, 6) = i
Пример - в файле: http://excelvba.ru/XL_Files/Sample__...__22-45-16.zip

Последний раз редактировалось EducatedFool; 15.03.2011 в 20:45.
EducatedFool вне форума Ответить с цитированием
Старый 17.03.2011, 18:13   #5
А)-(дрей
Пользователь
 
Аватар для А)-(дрей
 
Регистрация: 28.02.2011
Сообщений: 42
По умолчанию

Спасибо Вам за ответ EducatedFool ) .. действительно помогло - то что нужно. Крутился - крутился рядом с этим решением а вот подставить конец запуска бара DoEvents не догодался. Я прошу не судить строго - ведь я искал миенно такого решения проблемы, а второе вложение - это "крик души"). Возможно также неуместной вообще эта затея в данном случае, но это наверное не совсем так.. я хотя и полный "новичок" в VBA программировании, но суть вобщем ловлю, просто я среде excel моим наработанным навыкам место не хватает - вот и начал "путь вперед". Про внутренние массивы я тоже подумал (ведь и мне понятно, что кодовое восприятие набора данных гараздо легче и быстрее обрабатывается в отличии от графического представления - согласен), я и намерен так поступить, но пока с "промежуточными данными", полезные для меня данные я хочу пока оставить визуализированными. Все это потому, что здесь выкладываю лишь маленькие кусочки одной так называеммой мной "программы" которую воплощаю в жизнь, а на этапе ее разработки данные постоянно мною меняются и трансформируются - визуально мне пока легче, потом все спрячу в массивы. А все таки про решение с циклом и баром отдельное спасибо - я дальше наверное уже соображу где его будет уместно применить и как его "навоять"
А)-(дрей вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"Независающий" прогресс-бар KuznetsovKV Общие вопросы Delphi 3 22.04.2010 00:02
список и прогресс бар Temka Общие вопросы Delphi 1 02.06.2009 12:20
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34