Como apresentar uma barra de progresso com um formulário de utilizador no Excel

Resumo

Se tiver uma macro Microsoft Visual Basic for Applications que demora muito tempo a terminar, pode dar ao utilizador uma indicação de que a macro está a evoluir corretamente. Este artigo descreve como criar uma barra de progresso com um formulário de utilizador no Microsoft Excel.

Mais Informações

A Microsoft fornece exemplos de programação apenas a título informativo, sem qualquer garantia expressa ou implícita, incluindo, sem limitações, as garantias implícitas de comercialização e/ou adequação a um fim específico. Este artigo pressupõe que o utilizador está familiarizado com a linguagem de programação demonstrada e as ferramentas utilizadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um procedimento específico. No entanto, não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às suas necessidades específicas.

Criar o Formulário de Utilizador

No exemplo seguinte, uma sub-rotina do Visual Basic preenchi um intervalo de células grande com um número aleatório. O indicador mostra-lhe que a macro está a ser executda corretamente.

  1. Abra um novo livro no Excel.

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

    No Microsoft Office Excel 2007, clique em Visual Basic no grupo Código no separador Programador .

    Nota Para apresentar o separador Programador no Ribbon, siga estes passos:

    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, em seguida, clique para selecionar a caixa de verificação Mostrar separador Programador no Faixa de Opções.
  3. No menu Inserir, clique em UserForm.

  4. Desenhe um Controlo de etiqueta no formulário de utilizador.

  5. Altere as seguintes propriedades do controlo Etiqueta para os seguintes valores: | Propriedade| Valor| |---------------|-----------------------------| | Legenda| Agora a atualizar. Aguarde... | Nota Se a janela Propriedades não estiver visível, clique em Janela de Propriedadesno menu Ver.

  6. Desenhe um controlo de Moldura no formulário de utilizador.

  7. Altere as seguintes propriedades do controlo Frame para os seguintes valores: | Propriedades | Valor| |---------|--------------------| | Name FrameProgress|

  8. Desenhe um controlo de Etiqueta no controlo Moldura.

  9. Altere as seguintes propriedades do controlo Etiqueta para os seguintes valores: | Propriedade| Valor| |----------|---------------------------| | Nome | LabelProgress| | CordoCundo |& H000000FF&| | EfeitoEspecial |fmSpecialEffectRaised|

Escreva o Código da Macro

  1. Faça duplo clique no formulário de utilizador para abrir a janela Código do formulário de utilizador.

  2. No módulo, escreva o seguinte código para o evento 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, escreva 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. Regresse ao Excel.

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

    No Excel 2007, clique em Macros no grupo Código no separador Programador .

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

É exibida uma caixa de diálogo com uma barra de progresso vermelha. A barra de progresso aumenta à medida que a sub-rotina principal preenche as células na mesma.

A sub-rotina ShowUserForm mostra o formulário de utilizador. O procedimento anexado ao evento Activate do formulário de utilizador chama a sub-rotina principal. A sub-rotina principal povoa células com números aleatórios. Além disso, a sub-rotina chama a sub-rotina BarraProgressa Atualizar que atualiza o controlo de Etiqueta no formulário de utilizador.

Nota Quando utiliza esta técnica, a macro demora um pouco mais a concluir as tarefas que pretende.