Отображение индикатора выполнения с помощью пользовательской формы в Excel

Аннотация

Если у вас есть макрос Microsoft Visual Basic для приложений, который занимает много времени, может потребоваться дать пользователю указание на то, что он выполняется правильно. В этой статье описывается создание индикатора выполнения с помощью пользовательской формы в Microsoft Excel.

Дополнительная информация

Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Инженеры службы поддержки Майкрософт могут объяснить функциональность отдельной процедуры. обязаны изменять примеры для реализации дополнительных возможностей или удовлетворения требований конкретных пользователей.

Создание формы пользователя

В следующем примере подпрограмма Visual Basic заполняет большой диапазон ячеек случайным числом. Индикатор показывает, что макрос выполняется правильно.

  1. Откройте новую книгу в Excel.

  2. В Microsoft Office Excel 2003 и более ранних версиях Excel щелкните "Сервис ", наведите указатель мыши на макрос и выберите редактор Visual Basic.

    В Microsoft Office Excel 2007 щелкните Visual Basic в группе кода на вкладке "Разработчик ".

    Примечание Чтобы отобразить вкладку " Разработчик" на ленте, выполните следующие действия.

    1. Запустите Excel 2007, нажмите кнопку Microsoft Office и выберите пункт " Параметры Excel".
    2. В диалоговом окне "Параметры Excel" нажмите кнопку "Популярные", а затем выберите вкладку "Показать разработчика" в флажке ленты .
  3. В меню "Вставка" щелкните "Пользовательская форма".

  4. Нарисуйте элемент управления Label на форме пользователя.

  5. Измените следующие свойства элемента управления Label на следующие значения: | Свойство| Значение| |---------------|-----------------------------| | Заголовок| Теперь обновите. Подождите...| Примечание Если окно "Свойства " не отображается, щелкните " Окно свойств" в меню "Вид ".

  6. Нарисуйте элемент управления Frame на пользовательской форме.

  7. Измените следующие свойства элемента управления Frame на следующие значения: | Свойства | Значение| |---------|--------------------| | Name FrameProgress|

  8. Нарисуйте элемент управления Label на элементе управления Frame.

  9. Измените следующие свойства элемента управления Label на следующие значения: | Свойство| Значение| |----------|---------------------------| | Имя | LabelProgress| | BackColor |& H000000FF&| | SpecialEffect |fmSpecialEffectRaised|

Введите код макроса

  1. Дважды щелкните форму пользователя, чтобы открыть окно " Код" для формы пользователя.

  2. В модуле введите следующий код для 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
    
    
  3. В меню Вставка выберите Модуль.

  4. В окне кода модуля введите следующий код:

    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
    
    
  5. Вернитесь в Excel.

  6. В Excel 2003 и более ранних версиях Excel наведите указатель мыши на пункт "Макрос" в меню "Сервис" и выберите пункт "Макросы".

    В Excel 2007 щелкните "Макросы " в группе " Код" на вкладке "Разработчик ".

  7. В диалоговом окне "Макрос" выберите ShowUserForm и нажмите кнопку "Выполнить".

Появится диалоговое окно с красной индикатором выполнения. Индикатор выполнения увеличивается по мере заполнения ячеек на листе подпрограммой Main.

Подпрограмма ShowUserForm отображает форму пользователя. Процедура, присоединенная к событию Activate пользовательской формы, вызывает подпрограмму Main . Подпрограмма Main заполняет ячейки случайными числами. Кроме того, подпрограмма вызывает подпрограмму UpdateProgressBar , которая обновляет элемент управления Label в пользовательской форме.

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