Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ProgressBar in VBA (с пометкой "срочно" :))

1.9K
09 апреля 2003 года
DKef
44 / / 11.03.2003
День Добрый!!!
В общем суть вот в чем:
У меня есть файл - сводка прихода материалов за год, отдельный лист - это месяц, есть четыре листа - сводка прихода за квартал и лист прихода материалов за год. Макрос формирует сводку прихода за год последовательно беря каждый лист-месяц, в нем каждую позицию и переносит на лист сводки за год. Теперь сама суть ;)
Подскажите, как сделать что-то вроде прогресс-бара, при чем два: первый показывает сколько осталось обработать в конкретном месяце, и второй - сколько в целом (например - ИЮНЬ: обработано: 23%; ВСЕГО: 49%).
Один ньюанс, я все больше в свое время кодил на Делфях, и с вба знаком поскольку-постольку ;), т.е. я не имею представления как это вынести на экран монитора (на юзерформе что ли?) А сами циклы я постараюсь организовать
самостоятельно, но от помощи конечно же не откажусь 8)
Примечание: с формами я совсем не знаком, также с элементами типа кнопок, едитов, ну и т.п. Думаю, их свойства не совсем отличаются от делфовских и постараюсь с ними быстро разобраться :)
Заранее благодарен,
с уважением
267
09 апреля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by DKef
День Добрый!!!
В общем суть вот в чем:
У меня есть файл - сводка прихода материалов за год, отдельный лист - это месяц, есть четыре листа - сводка прихода за квартал и лист прихода материалов за год. Макрос формирует сводку прихода за год последовательно беря каждый лист-месяц, в нем каждую позицию и переносит на лист сводки за год. Теперь сама суть ;)
Подскажите, как сделать что-то вроде прогресс-бара, при чем два: первый показывает сколько осталось обработать в конкретном месяце, и второй - сколько в целом (например - ИЮНЬ: обработано: 23%; ВСЕГО: 49%).
Один ньюанс, я все больше в свое время кодил на Делфях, и с вба знаком поскольку-постольку ;), т.е. я не имею представления как это вынести на экран монитора (на юзерформе что ли?) А сами циклы я постараюсь организовать
самостоятельно, но от помощи конечно же не откажусь 8)
Примечание: с формами я совсем не знаком, также с элементами типа кнопок, едитов, ну и т.п. Думаю, их свойства не совсем отличаются от делфовских и постараюсь с ними быстро разобраться :)
Заранее благодарен,
с уважением



А зачем тебе прогрессбар? В Экселе есть такая красивая штука, как диаграммы. С ними у тебя гораздо гибче все получится. И вообще с формами в твоей задаче нет смысла связываться. Берешь лист, называешь его, скажем, "Главный", и на нем всё управление и располагаешь (обычные текстовые поля - это просто ячейки, а если тебе надо какой-ибудь Listbox или Checkbox организовать, то в Экселе их можно прямо на лист помещать без проблем.).

Просто как правило люди (пользователи) меньше боятся того, с чем уже общались. Что-то менять в обычном Экселе им будет привычнее.

258
09 апреля 2003 года
SergeySV
1.5K / / 19.03.2003
Как раз не давно общался здесь по похожему поводу. В результате была сделана универсальная форма (FormWait), которая появляется поверх листа Excel и показывается значение ProgressBar и текст с описанием текущего действия. Вообщем штука универсальная (раз написал и забыл), использую ее теперь во всех своих больших макросах.

Посмотри, файл прилагаю.
Там все очень просто:
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 и пользуйся.. :-)
1.9K
09 апреля 2003 года
DKef
44 / / 11.03.2003
Спасибо, обязательно разберусь!
267
09 апреля 2003 года
Cutty Sark
1.2K / / 17.10.2002
К слову сказать, у меня твоя форма не загружается.
Что-то там про лицензию говорит, и в Лог скидывает вот это:
"Строка 9: недопустимое имя свойства ShowModal в FormWait."

97-й Эксель.
Может, у адресата загрузится...
258
09 апреля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Cutty Sark
К слову сказать, у меня твоя форма не загружается.
Что-то там про лицензию говорит, и в Лог скидывает вот это:
"Строка 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, это уже из разряда шуток :-)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог