Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.
Abra uma nova pasta de trabalho no Excel.
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:
- Inicie o Excel 2007, clique no Botão do Microsoft Office e, em seguida, clique em Opções do Excel.
- 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.
No menu Inserir, clique em UserForm.
Desenhe um controle Rótulo no formulário do usuário.
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.
Desenhe um controle Frame no formulário do usuário.
Altere as seguintes propriedades do controle Frame para os seguintes valores: | Propriedade | Valor| |---------|--------------------| | Nome FrameProgress|
Desenhe um controle Label no controle Frame.
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
Clique duas vezes no formulário do usuário para abrir a janela Código do formulário do usuário.
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
No menu Inserir, clique em Módulo.
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
Retorne ao Excel.
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 .
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.