Отображение индикатора выполнения с помощью пользовательской формы в Excel
Аннотация
Если у вас есть макрос Microsoft Visual Basic для приложений, который занимает много времени, может потребоваться дать пользователю указание на то, что он выполняется правильно. В этой статье описывается создание индикатора выполнения с помощью пользовательской формы в Microsoft Excel.
Дополнительная информация
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Инженеры службы поддержки Майкрософт могут объяснить функциональность отдельной процедуры. обязаны изменять примеры для реализации дополнительных возможностей или удовлетворения требований конкретных пользователей.
Создание формы пользователя
В следующем примере подпрограмма Visual Basic заполняет большой диапазон ячеек случайным числом. Индикатор показывает, что макрос выполняется правильно.
Откройте новую книгу в Excel.
В Microsoft Office Excel 2003 и более ранних версиях Excel щелкните "Сервис ", наведите указатель мыши на макрос и выберите редактор Visual Basic.
В Microsoft Office Excel 2007 щелкните Visual Basic в группе кода на вкладке "Разработчик ".
Примечание Чтобы отобразить вкладку " Разработчик" на ленте, выполните следующие действия.
- Запустите Excel 2007, нажмите кнопку Microsoft Office и выберите пункт " Параметры Excel".
- В диалоговом окне "Параметры Excel" нажмите кнопку "Популярные", а затем выберите вкладку "Показать разработчика" в флажке ленты .
В меню "Вставка" щелкните "Пользовательская форма".
Нарисуйте элемент управления Label на форме пользователя.
Измените следующие свойства элемента управления Label на следующие значения: | Свойство| Значение| |---------------|-----------------------------| | Заголовок| Теперь обновите. Подождите...| Примечание Если окно "Свойства " не отображается, щелкните " Окно свойств" в меню "Вид ".
Нарисуйте элемент управления Frame на пользовательской форме.
Измените следующие свойства элемента управления Frame на следующие значения: | Свойства | Значение| |---------|--------------------| | Name FrameProgress|
Нарисуйте элемент управления Label на элементе управления Frame.
Измените следующие свойства элемента управления Label на следующие значения: | Свойство| Значение| |----------|---------------------------| | Имя | LabelProgress| | BackColor |& H000000FF&| | SpecialEffect |fmSpecialEffectRaised|
Введите код макроса
Дважды щелкните форму пользователя, чтобы открыть окно " Код" для формы пользователя.
В модуле введите следующий код для UserForm_Activate события:
Private Sub UserForm_Activate() ' Set the width of the progress bar to 0. UserForm1.LabelProgress.Width = 0 ' Call the main subroutine. Call Main End Sub
В меню Вставка выберите Модуль.
В окне кода модуля введите следующий код:
Sub ShowUserForm() UserForm1.Show End Sub Sub Main() Dim Counter As Integer Dim RowMax As Integer, ColMax As Integer Dim r As Integer, c As Integer Dim PctDone As Single Application.ScreenUpdating = False ' Initialize variables. Counter = 1 RowMax = 100 ColMax = 25 ' Loop through cells. For r = 1 To RowMax For c = 1 To ColMax 'Put a random number in a cell Cells(r, c) = Int(Rnd * 1000) Counter = Counter + 1 Next c ' Update the percentage completed. PctDone = Counter / (RowMax * ColMax) ' Call subroutine that updates the progress bar. UpdateProgressBar PctDone Next r ' The task is finished, so unload the UserForm. Unload UserForm1 End Sub Sub UpdateProgressBar(PctDone As Single) With UserForm1 ' Update the Caption property of the Frame control. .FrameProgress.Caption = Format(PctDone, "0%") ' Widen the Label control. .LabelProgress.Width = PctDone * _ (.FrameProgress.Width - 10) End With ' The DoEvents allows the UserForm to update. DoEvents End Sub
Вернитесь в Excel.
В Excel 2003 и более ранних версиях Excel наведите указатель мыши на пункт "Макрос" в меню "Сервис" и выберите пункт "Макросы".
В Excel 2007 щелкните "Макросы " в группе " Код" на вкладке "Разработчик ".
В диалоговом окне "Макрос" выберите ShowUserForm и нажмите кнопку "Выполнить".
Появится диалоговое окно с красной индикатором выполнения. Индикатор выполнения увеличивается по мере заполнения ячеек на листе подпрограммой Main.
Подпрограмма ShowUserForm отображает форму пользователя. Процедура, присоединенная к событию Activate пользовательской формы, вызывает подпрограмму Main . Подпрограмма Main заполняет ячейки случайными числами. Кроме того, подпрограмма вызывает подпрограмму UpdateProgressBar , которая обновляет элемент управления Label в пользовательской форме.
Примечание При использовании этого метода макрос занимает немного больше времени, чтобы завершить свои задачи.