Você está na página 1de 4

Se tiver uma macro do Microsoft Visual Basic for Applications cuja conclusão seja muito demorada,

poderá pretender fornecer ao utilizador uma indicação de que a macro está a avançar

correctamente. Este artigo descreve como criar uma barra de progresso com um formulário de

utilizador no Microsoft Excel.


Mais Informação

A Microsoft fornece exemplos de programação apenas a título informativo, sem garantia

expressa ou implícita, incluindo, sem limitação, as garantias implícitas de comercialização e/ou

adequação a um fim específico. Este artigo pressupõe que o utilizador conhece a linguagem de

programação apresentada e as ferramentas utilizadas para criar e depurar procedimentos. Os

técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado

procedimento. No entanto, não modificarão estes exemplos para proporcionarem funcionalidades

adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador.

Criar o Formulário de Utilizador

No exemplo seguinte, uma subrotina de Visual Basic povoa um grande intervalo de células com

um número aleatório. O indicador mostra que a macro está a funcionar correctamente.

1. Abra um livro novo 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 Editor do Visual Basic.

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

Programador.

Nota Para visualizar o separador Programador no Friso, 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 clique para

seleccionar a caixa de verificação Mostrar separador Programador no Friso.

a.No menu Insert, clique em UserForm.

b.Desenhe um controlo Label no formulário de utilizador.

c.Altere as propriedades seguintes do controlo Label para os seguintes valores:

d. Propriedade Valor
e. --------------------------------------------
f. Caption A actualizar. Aguarde por favor...
Nota Se a janela Properties não estiver visível, clique em Properties Window no menu

View.

g.Desenhe um controlo Frame no formulário de utilizador.

h.Altere as propriedades seguintes do controlo Frame para os seguintes valores:

i.
j. Propriedade Valor
k. -----------------------------
l. Name FrameProgress

m.Desenhe um controlo Label no controlo Frame.

n.Altere as propriedades seguintes do controlo Label para os seguintes valores:

o. Propriedade Valor
p. -------------------------------------
q. Name LabelProgress
r. BackColor &H000000FF&
s. SpecialEffect fmSpecialEffectRaised

Escrever o Código da Macro

Faça duplo clique no formulário de utilizador para abrir a janela Code do formulário de

utilizador.
No módulo, introduza o código seguinte para o evento UserForm_Activate:

1. Private Sub UserForm_Activate()


2. ' Set the width of the progress bar to 0.
3. UserForm1.LabelProgress.Width = 0
4. ' Call the main subroutine.
5. Call Main
6. End Sub

7. No menu Insert, clique em Module.

8. Na janela Code do módulo, introduza o código seguinte:

9. Sub ShowUserForm()
10. UserForm1.Show
11.End Sub
12.Sub Main()
13. Dim Counter As Integer
14. Dim RowMax As Integer, ColMax As Integer
15. Dim r As Integer, c As Integer
16. Dim PctDone As Single
17. Application.ScreenUpdating = False
18. ' Initialize variables.
19. Counter = 1
20. RowMax = 100
21. ColMax = 25
22. ' Loop through cells.
23. For r = 1 To RowMax
24. For c = 1 To ColMax
25. 'Put a random number in a cell
26. Cells(r, c) = Int(Rnd * 1000)
27. Counter = Counter + 1
28. Next c
29. ' Update the percentage completed.
30. PctDone = Counter / (RowMax * ColMax)
31. ' Call subroutine that updates the progress bar.
32. UpdateProgressBar PctDone
33. Next r
34. ' The task is finished, so unload the UserForm.
35. Unload UserForm1
36.End Sub
37.Sub UpdateProgressBar(PctDone As Single)
38. With UserForm1
39. ' Update the Caption property of the Frame control.
40. .FrameProgress.Caption = Format(PctDone, "0%")
41. ' Widen the Label control.
42. .LabelProgress.Width = PctDone * _
43. (.FrameProgress.Width - 10)
44. End With
45. ' The DoEvents allows the UserForm to update.
46. DoEvents
47.End Sub

48. Regresse ao Excel.

49. No Excel 2003, e em versões anteriores do Excel, aponte para Macro no menu
Ferramentas e clique em Macros.
No Excel 2007, clique em Macros no grupo Código no separador Programador.

50. Na caixa de diálogo Macro, clique para seleccionar ShowUserForm e clique em


Executar.

É apresentada uma caixa de diálogo com uma barra de progresso vermelha. A barra de progresso

aumenta à medida que a subrotina Main povoa as células da folha de cálculo.

A subrotina ShowUserForm mostra o formulário de utilizador. O procedimento anexado ao

evento Activate do formulário de utilizador chama a subrotina Main. A subrotina Main povoa as

células com números aleatórios. Adicionalmente, a subrotina chama a subrotina

UpdateProgressBar que actualiza o controlo Label do formulário de utilizador.

Nota Quando utilizar esta técnica, a macro demora um pouco mais de tempo a concluir as

respectivas tarefas.

Você também pode gostar