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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2009, 13:58   #1
Jarik
Пользователь
 
Регистрация: 28.02.2008
Сообщений: 53
По умолчанию Макрос. (Не)модальные формы.

Добрый день.

Есть макрос, который выполняется длительное время.
Хочу реализовать окошко, которое показывает, какая часть макроса выполнилась (в процентах).

В качестве макроса, выполняющегося хоть сколько-то длительное время был написан следующий:

Код:
Sub DelRows()
    For i = Rows.Count To 1 Step -1
        Rows(i).delete
    Next i
End Sub
Далее было создана UserForm, допустим, с именем ProcessForm с TextBox с именем bar внутри. Эта форма и будет индикатором удаления.
Выставляю ShowModal False
Тогда путем нехитрых изменений наш макрос приобретает вид.

Код:
Sub DelRows()
    Dim pc As Integer ' хранит количество выполненных процентов
    nrows = Rows.Count
    ProcessForm.Show
    
    For i = nrows To 1 Step -1
        Rows(i).Delete
        pc = WorksheetFunction.RoundDown(((nrows - i + 1) / nrows) * 100, 0)
        If pc <> 0 Then ProcessForm.bar = WorksheetFunction.Rept("|", pc)
    Next i
    ProcessForm.Hide
End Sub
Однако индикатор не отображается, только в самом конце.

Буду рад помощи!
Спасибо!
Jarik вне форума Ответить с цитированием
Старый 07.07.2009, 14:55   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию ProgressBar

Цитата:

Код:
Sub DelRows()
    For i = Rows.Count To 1 Step -1
        Rows(i).delete


ProgressBar1.Value =100*(1-(Rows.Count -i)/Rows.Count  )' добавить этот код
    Next i
End Sub

Кидаешь на лист ProgressBar1 и форму создавать не надо,проверил все работает Фотоконтроль прилагаеться
Изображения
Тип файла: jpg 1.jpg (30.9 Кб, 163 просмотров)
Тип файла: jpg 2.jpg (31.8 Кб, 85 просмотров)
Тип файла: jpg 3.jpg (31.9 Кб, 84 просмотров)
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 07.07.2009 в 15:01.
doober вне форума Ответить с цитированием
Старый 07.07.2009, 15:04   #3
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Он не отображается, потому что слишком быстро все происходит и вы просто этого не видите.
Где-то был код для «прогресс-бар» от EducatedFool
После ProcessForm.Show нужно поставить оператор DoEvents. Также его нужно поставить после того, как вы обновили ваш «прогресс-бар».

И форму нужно не прятать, а выгружать:
Unload ProcessForm
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 07.07.2009, 15:16   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Прошу прощения. Продублировал
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 07.07.2009, 15:33   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А зачем извращаться с прогресс-баром?
Не проще ли удалить строки так:
Код:
Sub DelRows()
    Rows.Delete
End Sub
Доля секунды, и всё готово...

А если надо удалить не все строки, а лишь некоторые, то можно использовать макрос из этой темы:
http://www.programmersforum.ru/showp...42&postcount=2
Тоже работает достаточно быстро.

PS: Если так нужен прогрессбар, то пример есть здесь:
http://www.programmersforum.ru/showp...31&postcount=2
EducatedFool вне форума Ответить с цитированием
Старый 07.07.2009, 15:50   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Эсли удалять 100 или 200 строк,то не стоит городить огород
Но у него продолжительное время,значит много
я проверил на 1000 строк,приблизительно 4 сек,все отлично видно и не надо прерываний ставить
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 07.07.2009, 15:58   #7
Jarik
Пользователь
 
Регистрация: 28.02.2008
Сообщений: 53
По умолчанию

Всем спасибо, когда будет время (сейчас на работе), разберусь.
По поводу удаления строк - это просто пример, который был написан специально для того, чтобы смоделировать работу некоторого продолжительного макроса.
Естественно, макрос будет совершенно другим.

Еще раз всем спасибо.
Если будут вопрсы, вернусь.
Jarik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос постоянно обрабатывает события. При открытии другой книги макрос обрывается. Ples Microsoft Office Excel 8 17.12.2016 18:15
Заполнение поле формы автоматически из другой формы!! Магомед Microsoft Office Access 8 28.07.2009 13:49
Как сделать границы формы другого цвета,формы?? Дима я Общие вопросы Delphi 3 22.06.2009 07:24
Обращение из формы в dll к элементу главной формы (delphi) a_n_n_a Помощь студентам 3 10.05.2009 04:00
Модальные окна spamer Общие вопросы Delphi 4 01.03.2009 15:16