ProgressBar in VBA (с пометкой "срочно" :))
В общем суть вот в чем:
У меня есть файл - сводка прихода материалов за год, отдельный лист - это месяц, есть четыре листа - сводка прихода за квартал и лист прихода материалов за год. Макрос формирует сводку прихода за год последовательно беря каждый лист-месяц, в нем каждую позицию и переносит на лист сводки за год. Теперь сама суть ;)
Подскажите, как сделать что-то вроде прогресс-бара, при чем два: первый показывает сколько осталось обработать в конкретном месяце, и второй - сколько в целом (например - ИЮНЬ: обработано: 23%; ВСЕГО: 49%).
Один ньюанс, я все больше в свое время кодил на Делфях, и с вба знаком поскольку-постольку ;), т.е. я не имею представления как это вынести на экран монитора (на юзерформе что ли?) А сами циклы я постараюсь организовать
самостоятельно, но от помощи конечно же не откажусь 8)
Примечание: с формами я совсем не знаком, также с элементами типа кнопок, едитов, ну и т.п. Думаю, их свойства не совсем отличаются от делфовских и постараюсь с ними быстро разобраться :)
Заранее благодарен,
с уважением
День Добрый!!!
В общем суть вот в чем:
У меня есть файл - сводка прихода материалов за год, отдельный лист - это месяц, есть четыре листа - сводка прихода за квартал и лист прихода материалов за год. Макрос формирует сводку прихода за год последовательно беря каждый лист-месяц, в нем каждую позицию и переносит на лист сводки за год. Теперь сама суть ;)
Подскажите, как сделать что-то вроде прогресс-бара, при чем два: первый показывает сколько осталось обработать в конкретном месяце, и второй - сколько в целом (например - ИЮНЬ: обработано: 23%; ВСЕГО: 49%).
Один ньюанс, я все больше в свое время кодил на Делфях, и с вба знаком поскольку-постольку ;), т.е. я не имею представления как это вынести на экран монитора (на юзерформе что ли?) А сами циклы я постараюсь организовать
самостоятельно, но от помощи конечно же не откажусь 8)
Примечание: с формами я совсем не знаком, также с элементами типа кнопок, едитов, ну и т.п. Думаю, их свойства не совсем отличаются от делфовских и постараюсь с ними быстро разобраться :)
Заранее благодарен,
с уважением
А зачем тебе прогрессбар? В Экселе есть такая красивая штука, как диаграммы. С ними у тебя гораздо гибче все получится. И вообще с формами в твоей задаче нет смысла связываться. Берешь лист, называешь его, скажем, "Главный", и на нем всё управление и располагаешь (обычные текстовые поля - это просто ячейки, а если тебе надо какой-ибудь Listbox или Checkbox организовать, то в Экселе их можно прямо на лист помещать без проблем.).
Просто как правило люди (пользователи) меньше боятся того, с чем уже общались. Что-то менять в обычном Экселе им будет привычнее.
Посмотри, файл прилагаю.
Там все очень просто:
1. Файл - есть форма, импортируй его в свою Personal.xls (чтобы он всегда был доступен)
2. В модуле формы описана функция - Public ShowFormWait()
2.1 Через эту функцию будешь обновлять значения ProgressBar и подписей (описание функции внутри модуля).
2.2 А в теперь макросе пишем например так:
' показываем форму и задаем значения
FormWait.Show vbModeless
If FormWait.ShowFormWait((ii - 1) * stepProgbar, " Подготовка к импорту", " Сейчас обрабатывается " & Str(ii) & " файл из " & Str(UBound(fileToOpen)) & " файла(ов)") Then GoTo Exit_sub
........
........
далее, внутри макроса обновляем значение ProgressBar и одновременно проверяем не нажал пользователь кнопку "Прервать", если да то идем куда-нибудь (например к метке Exit_sub):
If FormWait.ShowFormWait((ii - 1) * stepProgbar + stepProgbar * 0.3, " Удаление ненужных строк", " Сейчас обрабатывается " & Str(ii) & " файл из " & Str(UBound(fileToOpen)) & " файла(ов)") Then GoTo Exit_sub
.......
.......
А в конце не забываем выгрузить форму:
Exit_sub:
' выгружаем форму ожидания
Call FormWait.ShowFormWait(100, "", "")
Unload FormWait
Exit Sub
Так что можешь добавить на форму еще один ProgressBar, еще одну переменную для него в функ. ShowFormWait и пользуйся.. :-)
Что-то там про лицензию говорит, и в Лог скидывает вот это:
"Строка 9: недопустимое имя свойства ShowModal в FormWait."
97-й Эксель.
Может, у адресата загрузится...
К слову сказать, у меня твоя форма не загружается.
Что-то там про лицензию говорит, и в Лог скидывает вот это:
"Строка 9: недопустимое имя свойства ShowModal в FormWait."
97-й Эксель.
Может, у адресата загрузится...
Да, все правильно. Вот из справки:
Note In Microsoft Office 97, if a UserForm is set to display as modeless, it causes a run-time error; Office 97 UserForms are always modal.
К сожалению ничего не попишешь. Делать для Office 97 форму ожидания типа - modal, это уже из разряда шуток :-)