Индикатор Прогресс в Excel VBA
Ниже мы рассмотрим программу в Excel VBA, который создает индикатор прогресса. Мы сохранили индикатор прогресса как можно более простым, но это выглядит профессионально. Вы готовы? UserForm мы собираемся создать выглядит следующим образом:
Для создания этого UserForm, выполните следующие действия.
-
Откройте редактор Visual Basic. Если проводник проекта не отображается, нажмите кнопку Просмотр, Project Explorer.
-
Нажмите кнопку Вставить, UserForm. Если панель инструментов не появляется автоматически, нажмите кнопку View, Toolbox. Экран должен быть установлен, как показано ниже.
Это UserForm состоит только из трех элементов управления. Контрольная рама и два элемента управления этикеткой.
-
Добавьте элемент управления кадрами. Вы можете сделать это, нажав на кадр из панели инструментов. Далее, вы можете перетащить элемент управления кадрами на UserForm. Вам нужно изменить некоторые свойства этого элемента управления кадрами. Щелкните правой кнопкой мыши на элементе управления кадров, а затем нажмите кнопку Свойства. Очищать поле Caption, установить высоту 24 и ширину до 204.
-
Добавьте первый контроль этикетки и поместите его в элемент управления Frame. Щелкните правой кнопкой мыши на элементе управления этикетки, а затем нажмите кнопку Свойства. Измените имя Бар, BackColor, чтобы выделить, очистить поле Caption, установите высоту 20 и ширину 10.
-
Добавьте второй контроль этикетки и поместите его над управлением кадрами.
Щелкните правой кнопкой мыши на элементе управления этикетки, а затем нажмите кнопку Свойства.
Изменение имени в текст и изменить заголовок на «0% Completed».
-
Измените заголовок пользовательской формы с индикатором прогресса.
После того, как это было закончено, результат должен быть согласован с изображением UserForm, показанным ранее.
-
Поместите командную кнопку на листе и добавить следующую строку кода, чтобы показать 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, чтобы показать прогресс в макро.
-
Откройте редактор Visual Basic.
-
В окне Project Explorer, щелкните правой кнопкой мыши на UserForm1, а затем нажмите кнопку Просмотр кода.
-
Выберите UserForm из выпадающего списка слева. Выберите Активировать с правого выпадающего списка.
-
Добавьте следующую строку кода:
Private Sub UserForm_Activate() code End Sub
Объяснение: этот подпункт требует другого вложенного имени код, который мы собираемся создать в минуту. Смущенный? Вы можете пройти через нашу функцию и к югу от главы более узнать о подлодке. Если вы находитесь в спешке, просто выполнить следующие шаги, и вы будете в порядке.
-
Поместите вспомогательный названный код в модуль (в редакторе 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.
-
Закройте редактор Visual Basic и нажмите кнопку команды на листе:
Результат:
Примечание: для этого макроса, мы использовали переменный я для измерения прогресса.
Так, например, в строке 11, 10% завершено. Это может быть различным для макроса. Методика передачи значения переменной pctCompl к прогрессу юга обновить UserForm остается тем же самым.