Ниже мы рассмотрим программу в Excel VBA, который создает индикатор прогресса. Мы сохранили индикатор прогресса как можно более простым, но это выглядит профессионально. Вы готовы? UserForm мы собираемся создать выглядит следующим образом:

Progress Indicator in Excel VBA

Для создания этого UserForm, выполните следующие действия.

  1. Откройте редактор Visual Basic. Если проводник проекта не отображается, нажмите кнопку Просмотр, Project Explorer.

  2. Нажмите кнопку Вставить, UserForm. Если панель инструментов не появляется автоматически, нажмите кнопку View, Toolbox. Экран должен быть установлен, как показано ниже.

Userform Screen Setup in Excel VBA

Это UserForm состоит только из трех элементов управления. Контрольная рама и два элемента управления этикеткой.

  1. Добавьте элемент управления кадрами. Вы можете сделать это, нажав на кадр из панели инструментов. Далее, вы можете перетащить элемент управления кадрами на UserForm. Вам нужно изменить некоторые свойства этого элемента управления кадрами. Щелкните правой кнопкой мыши на элементе управления кадров, а затем нажмите кнопку Свойства. Очищать поле Caption, установить высоту 24 и ширину до 204.

  2. Добавьте первый контроль этикетки и поместите его в элемент управления Frame. Щелкните правой кнопкой мыши на элементе управления этикетки, а затем нажмите кнопку Свойства. Измените имя Бар, BackColor, чтобы выделить, очистить поле Caption, установите высоту 20 и ширину 10.

  3. Добавьте второй контроль этикетки и поместите его над управлением кадрами.

Щелкните правой кнопкой мыши на элементе управления этикетки, а затем нажмите кнопку Свойства.

Изменение имени в текст и изменить заголовок на «0% Completed».

  1. Измените заголовок пользовательской формы с индикатором прогресса.

После того, как это было закончено, результат должен быть согласован с изображением UserForm, показанным ранее.

  1. Поместите командную кнопку на листе и добавить следующую строку кода, чтобы показать UserForm:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Если вы прошли через другие примеры UserForm на этом сайте, вы знаете, что это время для создания Sub UserForm_Initialize. Этот Sub запускается автоматически, если UserForm загружается. Таким образом, при использовании метода Show для UserForm, код будет автоматически выполняться. Вместо Sub UserForm_Initialize мы создаем Sub UserForm_Activate. Используя этот подпункт, Excel VBA может обновить UserForm, чтобы показать прогресс в макро.

  1. Откройте редактор Visual Basic.

  2. В окне Project Explorer, щелкните правой кнопкой мыши на UserForm1, а затем нажмите кнопку Просмотр кода.

  3. Выберите UserForm из выпадающего списка слева. Выберите Активировать с правого выпадающего списка.

  4. Добавьте следующую строку кода:

Private Sub UserForm_Activate()

code

End Sub

Объяснение: этот подпункт требует другого вложенного имени код, который мы собираемся создать в минуту. Смущенный? Вы можете пройти через нашу функцию и к югу от главы более узнать о подлодке. Если вы находитесь в спешке, просто выполнить следующие шаги, и вы будете в порядке.

  1. Поместите вспомогательный названный код в модуль (в редакторе Visual Basic, выберите Вставка, модуль). Это просто пример. Это место, чтобы добавить свой собственный код, когда вы хотите использовать этот индикатор прогресса для вашего собственного макроса. Код выглядит следующим образом.

Sub code()

Dim i As Integer, j As Integer, pctCompl As Single

Sheet1.Cells.Clear

For i = 1 To 100

For j = 1 To 1000

Cells(i, 1).Value = j

Next j

pctCompl = i

progress pctCompl

Next i

End Sub

Объяснение: во-первых, мы инициализируем некоторые переменные. Далее, мы очищаем sheet1.

Мы используем двойную петлю, чтобы показать значение от 1 до 1000 в первых 100 строках листа. Это будет держать Excel VBA занят на некоторое время и дает нам возможность увидеть прогресс макроса. Переменная pctCompl (аббревиатура percentageCompleted) измеряет прогресс макроса. Наконец, мы называем другой вложенное именем прогресс и передать значение переменной pctCompl для обновления UserForm. Таким образом, мы можем видеть прогресс в макро! 13. Добавьте еще к югу назвал прогресс. Код выглядит следующим образом:

Sub progress(pctCompl As Single)

UserForm1.Text.Caption = pctCompl & "% Completed"

UserForm1.Bar.Width = pctCompl * 2

DoEvents

End Sub

Объяснение: первая строка кода изменяет заголовок первого контроля метки. Вторая строка кода изменяет ширину второго элемента управления этикеткой. Добавить DoEvents для обновления UserForm.

  1. Закройте редактор Visual Basic и нажмите кнопку команды на листе:

Результат:

Progress Indicator Result

Примечание: для этого макроса, мы использовали переменный я для измерения прогресса.

Так, например, в строке 11, 10% завершено. Это может быть различным для макроса. Методика передачи значения переменной pctCompl к прогрессу юга обновить UserForm остается тем же самым.