VBA для тех кто любит думать


ProgressBar в ваших программах - часть 2


3. Идея такова. Ширину третьей надписи "Label3" можно изменять программно. Поэтому для отображения ProgressBar'а надо вставить в код строки, изменяющие ширину этой надписи. К примеру, цикл в программе выполняется n раз. Тогда ширина надписи "Label3" будет определяться командой в теле цикла по формуле "Label3.Width = (scet / n) * 250", где "scet" - это счетчик цикла, а 250 - ширина надписи Label2.

После каждой такой команды надо вставлять инструкцию "Me.Repaint", чтобы перерисовать форму с учетом новых параметров третьей надписи, - автоматической перерисовки до полного отображения формы (которое произойдет, когда кончится обработка события "UserForm_Activate()"

и форма не будет выгружена) не происходит. Если форма с ProgressBar'ом должна долго находится на экране без изменений, то рекомендуется почаще использовать команду "Me.Repaint", так как без перерисовки внешний вид формы может быть легко испорчен окнами других приложений, когда пользователь решит воспользоваться ими во время работы макроса.

Итак, код для формы с ProgressBar'ом должен иметь такой вид ("n" - количество необходимых выполнений цикла):

 

Private Sub UserForm_Activate()

Me.Repaint

For t=1 to n

… … … … необходимые команды программы в цикле … … … …

Label3.Width = ((t / n) * 250)

Me.Repaint

Next t

Unload Me

End Sub

 

Разумеется, в нем возможны изменения и улучшения. Можно несколько раз использовать ProgressBar в одной форме, каждый раз обнуляя ширину третьей надписи. Можно поместить на одну форму несколько ProgressBar'ов, где один, например, показывает выполнение всего задания, а другой - его текущей части.

*       *       *




- Начало -  - Назад -  - Вперед -



Книжный магазин