Compartilhar via


Como exibir uma barra de progresso com um formulário de usuário no Excel

Resumo

Se você tiver uma macro do Microsoft Visual Basic for Applications que leva muito tempo para ser concluída, convém dar ao usuário uma indicação de que a macro está progredindo corretamente. Este artigo descreve como criar uma barra de progresso com um formulário de usuário no Microsoft Excel.

Informações adicionais

A Microsoft oferece exemplos de programação somente para ilustração, sem garantias expressas ou implícitas. Isso inclui, mas não está limitado a, as garantias implícitas de qualidade comercial ou conformidade para uma determinada finalidade. Este artigo supõe que você conhece a linguagem de programação que está sendo demonstrada e as ferramentas usadas nos processos de criação e depuração. Os engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento. Entretanto, eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos que atendam aos seus requisitos específicos.

Criar o formulário de usuário

No exemplo a seguir, uma sub-rotina do Visual Basic popula um grande intervalo de células com um número aleatório. O indicador mostra que a macro está sendo executada corretamente.

  1. Abra uma nova pasta de trabalho no Excel.

  2. No Microsoft Office Excel 2003 e em versões anteriores do Excel, clique em Ferramentas, aponte para Macro e clique em Editor do Visual Basic.

    No Microsoft Office Excel 2007, clique em Visual Basicno grupo Código na guia Desenvolvedor .

    Nota Para exibir a guia Desenvolvedor na Faixa de Opções, siga estas etapas:

    1. Inicie o Excel 2007, clique no Botão do Microsoft Office e, em seguida, clique em Opções do Excel.
    2. Na caixa de diálogo Opções do Excel , clique em Popular e clique para selecionar a guia Mostrar Desenvolvedor na caixa de seleção Faixa de Opções.
  3. No menu Inserir, clique em UserForm.

  4. Desenhe um controle Rótulo no formulário do usuário.

  5. Altere as seguintes propriedades do controle Rótulo para os seguintes valores: | Propriedade| Valor| |---------------|-----------------------------| | Legenda| Agora atualizando. Aguarde...| Nota Se a janela Propriedades não estiver visível, clique em Janela Propriedadesno menu Exibir.

  6. Desenhe um controle Frame no formulário do usuário.

  7. Altere as seguintes propriedades do controle Frame para os seguintes valores: | Propriedade | Valor| |---------|--------------------| | Nome FrameProgress|

  8. Desenhe um controle Label no controle Frame.

  9. Altere as seguintes propriedades do controle Rótulo para os seguintes valores: | Propriedade| Valor| |----------|---------------------------| | Nome | LabelProgress| | BackColor |& H000000FF&| | SpecialEffect |fmSpecialEffectRaised|

Digite o código da macro

  1. Clique duas vezes no formulário do usuário para abrir a janela Código do formulário do usuário.

  2. No módulo, digite o seguinte código para o UserForm_Activate evento:

    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. No menu Inserir, clique em Módulo.

  4. Na janela Código do módulo, digite o seguinte código:

    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. Retorne ao Excel.

  6. No Excel 2003 e em versões anteriores do Excel, aponte para Macrono menu Ferramentas e clique em Macros.

    No Excel 2007, clique em Macrosno grupo Código na guia Desenvolvedor .

  7. Na caixa de diálogo Macro , clique para selecionar ShowUserForm e clique em Executar.

Uma caixa de diálogo que tem uma barra de progresso vermelha é exibida. A barra de progresso aumenta à medida que a sub-rotina Principal preenche as células na planilha.

A sub-rotina ShowUserForm mostra o formulário do usuário. O procedimento anexado ao evento Activate do formulário do usuário chama a sub-rotina Main. A sub-rotina Principal popula células com números aleatórios. Além disso, a sub-rotina chama a sub-rotina UpdateProgressBar que atualiza o controle Rótulo no formulário do usuário.

Nota Quando você usa essa técnica, sua macro demora um pouco mais para concluir suas tarefas pretendida.