Prévia do material em texto
11111111111 l llf H
Maicris Fernandes
esenvolvendo
Aplicações Poderosas com
xcel e VBA
• Acesse o código das planilhas
• Gere e execute códigos VBA em suas aplicações
• Conheça os objetos: Application, \VorkBook.
WorkSheet e Range
• Aproveite todo o potencial dos (;serforms e crie
sistemas profissionais O
~~-
'/~\r--..:. fitl•f•ft.\ Books'
! .
' '
l
~
1
t
1'
1
1
1
1
"
'
\
L
Desenvolvendo Aplicações
Poderosas com Excel e VBfi
1
' i
' l
,\
1
1
' · 1
''
t
Sumário
'\
Prefácio XIII
1 - O Ambiente VBA 1
2 - Acessando o Código pela Planilha 9
Criando um Botão na Planilha ••••••• ••• •••••.• •••• •••••••••••••••••••. ••••••••. 13
Criando um Botão na Barra de Ferramentas •••••••••••••••••••.•••••••••••.• 14
3 - Linguagem de Programação 19
Sub-rotinas .......................... .... .. ....... ................................. 21
Criação de uma Nova Sub-rotina ••••.••••••.•.•••.••••••••••••••.••••••••••••• 22
Constantes ........... . ...... . .. .......... ......................................... 23
Variáveis •••.••••.••..••••••••••••••••••• ••• •••.•••. ••••• •• .•••• ••. ••• •• ••.•••••••. 24
Variáveis Estáticas ... . ....... . ...... . ......................... ! •••••••••••••• 25
Operadores •••••••••.•••••••••••••••••••••••••••••• •• •••••••••••••••••••••••••••••• 2 6
Vetores ••• ••••• •••• ••••.•••.••. •••••• .•••••••••••••••••• •••.. ••••..••.•••••••.•• ••. 27
Condicionais •• •••••••••••••••..••.•••.•••• •••••••••••••••••••.•••••.•••.•..••••••• 28
Laços ••••• ••••••••••••••••••.•••••••••.••• •••• ••••••.••.••.••••••••••••••••••••••••• 30
Função lnputBox •••••..•.•.••.•••••••.••••••••••••••••••.•••.••.•• •••• ••••• •.••••• 33
Função MsgBox •••••••••••.•...••.••. •••• •• .••••••• •••.•.• •••• •••••.•• •••••••••••. 34
Funções Internas .•••.••••••••••••••• ••••..•...••..•..•••.••• ••• •.•....• •••••••.•• 37
Funções ••••••••• •••••• •••••••.• ••••• ••••• •••••• ••••••••••.••••••••.••••••••.••• •.. • 42
4 - Objeto Application 45
Propriedade DisplayAlerts ••••••••• • ~ •••••••••••••••••• ••••.•••••.•• ••••••••••••••• 47
Propriedade DisplayCommentlndicator ••••••••. •••••••••••••••••••••••••••••.. 47
Propriedade DisplayFormulaBar ••••••••• •• ••••••••••••••.• •••••.••.. •••••••• ••• 48
Propriedade DisplayFullScreen ••••.•• •• •••••••••••. ••••••••••••••.•••••• ~ ••••••• 48
Propriedade EnableAnimations •• •••• ••••••• •••••• ••• ••••••• •••• ••••••.••••.••.• 49
Propriedade EnableAutoComplete •••••••••• •••• ••• ••••••••••.•••• ••••••••.••••• 49
Propriedade EnableSound •• ••• •• •••••••••••••••• ••••• •••••••.•••••••••••••••••.• 49
Método OnKey ••••.•.••••••••••••••• •••••••••••••••••• ••••••••••••••••.•••• ••••••. 49
Método Quit . ...... ............................................... .................... 51
5 - Objeto WorkBook 53
Propriedade FullName ••••••• •••• •••••••••••••••••• •• ••••••••••••• •••••••••.••••. 55
Propriedade Path ••••••••••••••••••••••••.•••••••••••••• ~ ••.•••••••• ••.•••.• •••••• 56
Propriedade Saved . ......................................... . . ................ .. .. 56
Propriedade HasPassword •••••••••••••••• ~ •••.••...••••••••••••••.••••.•..••..•. 56
Método Activa te .•••••••.••••. . •••. ••••• •• •••.• ••••.•••••••••••••••••••••••••• •• · .. 56
Método AddToFavorites ••••• ••••••••.•••••••••••••.••••••••••••••••••••••.••.••• 56
Método Close ..................................................•........... . ...... 56
Método PrintOut .............................. .. . ............ . ....... . ............ 57
Método Save •• ~ .•••••••••••••.••••.••••. •..••.•••..••..•••••••..•••.•..•••• ••.•••. 57
Eventos de um Workbook ••.••••••••••••••• ~· •••••••••••••••••• ~ ••.•••.••• ••••.• • 58
Evento Activate •••••••.••••.•••••••••••.••••••••••.••••.••.•••••••••••••••••• • 59
Evento BeforeClose •••••• •••••.••••••••••••••••••••••••••••••••••••••.••••.•• 59
Evento BeforePrint ••••••••.•.••...••...•.••...•••••••••.•• ••.••.••.••.••..•.. 60
Evento Deactivate ••••••••••••••••••••••••••••••••••••••••••• •.••.•••••.•••.• 60
Evento NewSheet •••• · •••••.•••.•••..•••.••••.•.•. •••••••••••••••••••••• ••• •••• 61
Evento Open .••••. •••••••••••••••••••••••••.•.•.••••••••.•••.•••••• •••• •••••.• 61
Evento SheetActivate ..•.•• . ••.••.•••....•••••••...•...••••••••••..••.••..•.• 61
Evento SheetBeforeDoubleClick .. ....... .. .... ...... .. . .................... 62
Evento SheetBeforeRightClick ........ ........... ........................... 62
Evento SheetCalculate .......... ....... ... . ....... ..... .... . .... .... . .. . ...... 62
Evento SheetChange .•.•...•••••.••.••..•••..••..••••••••.•.••..••.••••..••.. 62
Evento SheetActivate ............................................... ... . .. .-•.• 62
Evento SheetSelectionChange ...................... ~ ......... .... . ....... · .. 62
6 - Objeto WorkSheet 63
Propriedade Cod~Name •••••• •.••••.•••••••.••.•.••••.•.•••..•••••.•••••••••••••• 65
Propriedade Name •••••••••••••.•••.•••••••••.•• • · ••..••••••••••••• ••• ••••••••••••• 65
Propriedade ScrollArea ................... . . .. ..................... ~ ........ ..... 65
Propriedade Visible ...•• .......••••.•.................•.. ••...••.•..•...•••••..•.. 66
Método Activa te ................................................ · .................. 66
Método Copy .................. ...................................... .............. 66
Método Detete
•••••••••• • •••••••••••••••••••••••••••••• • •••••••••••••••••••••••••• 66
Método Move .. · ........•.......................................................... 66
Método Select
•••••••••••••••••••••••••••••••••••••••••••••••••• • •••••••••••••••••
Eventos de um Worksheet
••••••••••••••••••••••••••••••••••••••••••••••••••••••
67
67
Evento Activate ............................................................... 6 7
D
Evento BeforeDoubleClick ••••••••.•••••••••••••••••••••••••••••••••• · •••••••. 6 7
Evento Bef oreRightClick ............................ ~ ....................... 68
Evento Calcula te •••••••••••••.••••••••••.••••••••.•••••••••.••••••••••••••••••• 69
Evento Chang e •...••.•••••.•••••••••••••••••••••••••••••••.••••••••••••••..••• 70
Evento Deactivate ••••••••••••.••••••••••••••••.••••••••••••••...••••••••• _ ••. 71
Evento SelectionChange ••••••••.•••••.•••••••...••••••••.•••.••••••••.•.••.• 71
7 - Objeto Range 7 3
Representação de um Objeto Range ......................•................... 75
Propriedade Cells ..••.•••••.•..••.•••.••.•...•..•..•••••••••••••••••••••••••••••.. 7 6
Propriedades Column e Row ••••••••••••••••.• •• ••. •• .•••••••••••••• •••••••••••• 76
Propriedades Columns e Rows ..................... · ............................. 76
Propriedade Address ..•••••.•••.••...••...•..•.•...••••...•..•....•..••.••.•••••• 77
Propriedades ColumnWidth e RowHeight ..................................... 77
Propriedade Fórmula ...•...•..•••••.•••••.•••••.•••...••••••.••...•....•••..••••• 77
Propriedade HasFórmula .••.•••...••••••••••.••••.••••••••.••••••••••••••...•••. 77
Propriedade HorizontalAlignment .............................................. 78
Propriedade Locked •...•.•....•••...••..•..•.••..•••• •....•..•....•••••..••• ••• .. 78
~opriedade Value ..••..•..•............•......••••.•...•..•.....................• 78
Método AddComment ....••.........•• · .•....•.....••••..••.••.•••.•••..••••. ••••• 79
Método AutoFi l ter •••..••.•.••••••••.••.••......•..•..•..•.••...• · ..••••••••....••• 79
Método AutoFit ..•••..••• .. .•.•• •..•.•...••••••• .•••..•••• .••••.••.••••• ••••••••.• 79
Método Border Around •..•.......••.••..•.•... : .•.••..•.•••..•.•••.•••...••..•.•• 79
Método Clear ........ . ............................................................. 80
Método Copy .•••...•••..•..•••.••.•.••.•..••.•..••.••.•..•••.••..•••••••.•.••••••• 80
. Método Delete ••••••.• · •••. •.. ..••...•...•..•.••. •.•..•• ••.• ••• ....•• .• ••..•...•... 80
Método FillDown, Fillleft, FillRight, FillUp ................................... 81
Método Find .•••••..•••••••••••...••• ••••.••.• · · • • • • ~ • • • · • • • • • • • • • • • • • .•••..••.•••• 81
Métodos FindNext e FindPrevious ........................................ ..... 81
Método I nsert ... ..... ............... . · · · · · · · · · · · · · · · · · · · · · · · · · · · · · • · · · · · · · · · · · · ... 82
Método Merge
Método Select
•••• .••••..•••••..•••••.•••••••••••••.••••..••••••••••• 82 .............
• • • • • • • • • • • • • • • • . • • • • • • • • • • • • . • • • • • • • • • . • • • • • • • . • • • • • • . • • • • • • • • • • • • • 82
Me, todo Sort ...... · · · · • · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 82 ....................
Coleção Borders .....•. ...•........... · · · · · · · · · · · · · • · · · · · · · · · · · • · · · · · · · · · · · · · · · · · · 83
Propriedades Colar e Colorlndex •.. · · · · · · · · · · · · · · · · · · •· · · · · · · · · · · · · · · · · · · · · · · · · 83
Propriedades LineStyle e Weight ...... · · · · · · · · · · •. · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 83
O Objeto Font .. ~ ................. · · · · · · · · · · · · · · · · · · • · · · · · · · · · · · · · · · • · · · · · · • · · · • · · 84
O Objeto Interior ••••••.•••••••••••••••••••••••••••••••.•••••..•••.••••••••••••••. 84
Propriedades Colore Colorlndex ........................................... 84
Propriedade Pa ttern .•••••••••••••••.••••••..•••••••••••••.•••••••••••••.••••. 84
Propriedades PatternColor e PatternColorlndex .......................... 84
8 - UserForms 87
Carregando um Formulário ..................................................... 90
Propriedades de um UserForm ................................................. 91
Propriedade Name ••.•••••. ••••••••••••••••••••.••••••••.• .•••••••.••••••••••• 91
Propriedade BackColor ••••••••••••••••.•••••••••••.•••••••••••••••••••••••••• 91
Propriedade BorderColor ••.••••.•••••••••••••.•.••••••••.•••••••••••••••.••• 91
Propriedade BorderStyle ••••.••.•••.••.•••••.•••••.•••••••.••••.••••••.••.•.•. 91
Propriedade Caption •••.•.•••••.••.••....••••••••••••••••.••. •••.•.••..•..•.• 91
Propriedade Enabled •••••..••••••••••••.••.•• ~ •••.••.•••• •• ••.•..•••••••••••• 92
Propriedade Font ••.•••••.••.••..••.•.•.••••.••••.•••.••••.•••••.•••••••••..•. 92
Propriedade ForeColor •••.••••••.••••••.••••••••.•.••••••.•••.•••..•.•.••.•.• 92
Propriedade Height •••••••••••••••..•••.•••••.••••••..•••.•••••.••••.•.••.••. 92
Propriedade Left ••••••.••.•••.•.•••••••.••••••.•••.•••••••.••••••••••••••••••• 92
Propriedade Mouselcon ••.••..•••..•.••.•••••.•••. •.• •.••..••.•..•••.••.•.•.. 92
Propriedade MousePointer ............................ ...................... 92
Propriedade Picture ••..••.••..•..•••••.•••..•..••.•••••••.•.•.••••••••••••••• 92
Propriedade PictureAlignment .............................................. 92
Propriedade PictureSizeMode ......... .... ... ........... ....... ............. 93
Propriedade StartupPosition ................................................ 93
Propriedade Top ...•••••.••.••••..•.••.••.••••.••••••••••..•. ••••••••••••••••• 9 3
Propriedade Width •.••.••••••..••.••••••••••.. •• •.••••..• .••••••••••• ~ •••.••• 9 3
Propriedade Zoom ............................................................. 93
Métodos de um UserForm ••••••• ••.•••••••••••••••••••••••••.••••••••.•.•••••••• 9 3
Método Hide •••••••••.••.••.•••••••.•.•..••.•.••.•.•.•••.•...••••••••..••.•.•. 93
Método Show ..............•.......•....•......•...•.........•..••....•...•.... 9 3
Método PrintForm •••..•••••..•.•..•••.••.••.•.•••.•••••••.••••••.•.••••••.•.. 9 3
Eventos em um UserForm ....................... .. ........•..................... 93
Evento Activate ....... ........................................................ 94
Evento Click ......................................... .......................... 94
E vento DoubleClick ...................... ............ . ........... . ............ 94
Evento Deactivate ...... .. .......................•........................... 94
Evento lnitialize .................. ............................................ 94
d
--
Evento KeyDown ••••••••••••••••••••••••••••••••••••••.••••••••••••••••••••••• 94
Evento KeyUp .................................................................. 94
Evento KeyPress •.•.•••••••••••••••••••••••••••••••••••••••••••••• •• •••••••••• 94
Evento MouseDown ••••••••••••••••••••••••••••••••••••••••••••••••••••••••.. 94
Evento MouseUp ••••••••••••••••.••••.••••••••••••••••.•• ••••••••••••••••••••• 95
Evento MouseMove •••••••••••.•••••••••..•••• : •.•••••••••••••••••••••••••.•• 95
Evento QueryClose •••••••••.•.•••••••.•.••••••••••••••••••.••••••••....•••••• 95
Evento Resize •••••••••••••••••.•••.•••.•••••••••••••••••••••.•••••••••••.•••.. 9 5
Evento Termina te •••....•••..•••.....•••........••.......•..•....••••••.•.... 95
Evento Zoom ••••••••••••••••••••.••.•••.•••••.••••••••.••••..••••••••••••••••• 95
Controles de Seleção ••.••••••••••••••••••••••.••••••••••••••••••••••••••••••.••• 95
Selecionar Objeto •••••••••••••••••••••.•••••••••••••••••••••••••••••••••••••• 95
Controles de lnterfaceamento ....................... ........................... 95
Rótulo (Label) ••••.••.••••••...••••...•...••••.•.••••••.•••••..•••••..•••.•.... 95
Caixas de Texto (TextBox) .................................................. 96
Propriedade Name •••••...••••..•••.•••••••••••••....•.•••••••.••••..••••••••. 96
Propriedade Enabled •••...•••••.•••....••.•.•.•.•.••....•...••••••••.••••••.. 96
Propriedade Locked ..•••...•.••.•..•••....•.•.••...•.•••••••••..•...•.....••• 96
Propriedade Maxlenght .•...•..•••...•.••.•.•..•••••••......•••••••.....•••• 96
Propriedade PasswordChar .................................................. 96
Propriedade Sellenght ...••.••••••••••••••....•••••••••••••••••..•.•••••••••• 97
Propriedade SelStart .•...•.•.••••••••..•.•.•..•••••... .•• •••..•...•••••••••••. ·97
Propriedade SelText ..••.••.•••.•••...•....•• •••••.•.....••.....•••..•.•••..•• 97
Propriedade Text ••••••••••.••••••••.••..•...•••••••••..••••••...••••..•••.•.• 97
Método SetFocus •.•..••••••.•••.•.••••.•••••••...•••••••••.••..••• •••••••.••• 97
Evento Change •••••••••..••..•••••.••••••••••••• !' ••••••••••••••••••••••••••••• 97
Evento Enter •••••••••..••••••.••.•••.••••••••••.•.•••••..•••••..••••••••.•••.• 97
Evento Exit ••..•....•...••..........•.......•.......•...••••......•.•••.....••. 97
Botão de Comando (CommandButton) .................................... 97
Propriedade Name •••••••••.•••••••••••••• ••••.•••••••.••••••••.•••••••••••••• 98
Propriedade Caption •••.••••.•.•..•• • • • • • • • • • • • • • • • • • · ••••.•••••.•••••••..••• 98
Propriedade Def aul t ............... ....... ·. · · · · · · · · · · · · . · .................... 9 8
Exemplo Usando Controles de lnterf aceamento ............................. 98
Controles de Opção •••••••••••.••••. • • • · • • • • • • • • • • · • • • · • • • • • • • · · • · • · • • • · • · • .••• 103
Caixa de Seleção (CheckBox) , , , . , . , . , , , , , , , ·, · ·,,,,,,,,,,, ... ,,,, ........ 103
Propriedade Name ••••••••••••• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • · • • • • • • • • • • • • •
P(opriedade Value •••••••••••• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
103
103
s
Botão de Opção ( OptionButton) . • • • • • • • • • • • . • • • • • • • .. • • • • • • • • • • • • • • • • • • • • • 1 04
Caixa de Combinação (ComboBox) ...................................... 104
Propriedade Name . ~ •••••••••••••••••••••.•••••••••••••• ~ . . . . •• • • • • • • • • • • • • • 1 04
Propriedade List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Propriedade ListCount ........................................•............
Propriedade Listlndex
·····················································
Propriedade S tyle •••••••••••••••.•••
········································
Método Addltem
····························································
Método Removei tem ...................................................... .
104
105
105
105
105
Método Clear ................ ...... ·.......................................... 105
Evento DropButtonClick . • . . • • . • • . . • • • . . . . . • . . • • . . • • . • • • • • • • • • . . • • • • . • • • • • • 105
Caixa de Listagem ( ListBox) . .. • .. • .. • .. .. .. .. .. • . .. .. .. • .. • • .. .. .. .. .. .. 106
Propriedade Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 06
Propriedade MultiSelect ................................................... 106
Propriedade Selected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 06
Exemplo (Continuação) ........................................................ 106
9 - Design de Userforms
Proporcionalidade e Disposição
113
115
Formatar/ Alinhar .............................................................. 116
Formatar / Criar Mesmo Tamanho .......................................... 118
Formatar / Dimensionar para Caber .................. ...................... 119
Formatar / Dimensionar à Grade ............................................ 120
Formatar / Espaçamento Horizontal • . . . . • • • . • • • • • • . . . • . . . • . . • . . • • . . . . • . . • • • 120
Formatar / Espaçamento Vertical • . • • . . • . . • • . . • • . . . . . . . • • • . • • . • • • • . • • • • • • . • . . 120
Formatar/ Centralizar no Formulário ....................................... 121
Formatar / Organizar Botões • • • • • . • • • • . • • . • • • . . • . . • • • • • . • • • . • • . . . • . . • • . . . • • • • 121
Preparação de uma lnterf ace .•••..•..•••.. .••..••..•••••••• , .•........•...••• 122
Palavras Finais do Autor 127
-
Prefácio
O Microsoft Excel é um dos softwares de maior sucesso dentro de
empresas de todos os segmentos do mercado, devido ao fato de
suas funcionalidades abrangerem muitas áreas. Suas planilhas ele-
trônicas permitem os mais variados tipos de controles, com acesso a
uma gama bem vasta de fórmulas.
Mas, quais são as vantagens de trabalharmos com o Excel avan-
çado? Além de um maior aproveitamento de toda a potência desse
magnifico software, ele pode ser utilizado também como ferramen-
ta de autoria. Atualmente, as_grandes empresas não querem gastar
na compra de ferramentas que gerem software, como algum software
-----~---· . . ,
de linguagem de programação. Alem disso, sempre existe. a preocu:
pação de compatibilidade de sistemas. Assim, podemos utilizar o
~êelpara-criar softwares de controle muito bem elaborados e que
terão total compatibilidade com os sistemas já existentes. Para tan-
to, vamos utilizar a programação VBA existente nas versões do
Microsoft Excel.
O VBA (Visual Basic for Applications) é uma variação do ambi-
ente de programação VB, adaptado para os softwares da Microsoft.
Dentre os programas que utilizam esse recurso, podemos citar com
destaque o Access, o Visio, o próprio Excel, entre outros. O ambien-
te de programação VBA, assim como o VB, tem por base a lingua-
gem de programação Basic, que é de fácil estruturação e bem mais
flexível que a maioria das linguagens comerciais. Assim, permite
uma assimilação mais fácil de conceitos e uma maior liberdade no
trato com os códigos.
No Microsoft Excel podem ser elaboradas planilhas com alto
teor de programação, gerando os mais variados tipos de aplicações,
como cadastro de informações, sistemas de dados, entre outros, ou
até mesmo pequenas automações dentro das próprias planilhas. Para
tanto, o software conta com uma gama de objetos próprios, desti-
nados às aplicações de planilhas eletrônicas. Também temos ferra-
mentas para a criação de interfaces personalizadas, visando uma
melhor comunicação com o usuário.
i,
1
11
!
1
1.
!
1
1
i'
1,
I!
' ' 1
Este livro visa dar a você a possibilidade de criar planilhas com
alto teor de programação, auxiliando na criação das aplicações an-
teriormente citadas, e todo tipo de aplicação cabível ao Microsoft
Excel que você necessitar. Para tanto, este livro está dividido em
algumas partes: ambiente de programação VBA, linguagem de pro-
gramação Basic, interfâceamento "ambiente de editoração eletrô-
nica" versus "ambiente de programação" e objetos específicos do
Microsoft Excel.
Desejo a você, caro leitor, ótimos momentos de aprendizagem
e programação. Espero que, com o conteúdo aqui apresentado, pos-
sa utilizar de forma mais proveitosa essa maravilhosa ferramenta,
proporcionando-lhe maior sucesso profissional, assim como maior
satisfação pessoal.
Boa leitura!
Pré-requisitos para o Livro
Considero como pré-requisito para este livro o conhecimento básico
do software Microsoft Excel. O conteúdo apresentado em Desenvol-
vendo Aplicações Poderosas com Excel e VBA pode ser adaptado
para todas as versões do software, necessitando, talvez, de algum
trabalho de ajuste.
Softwarczs
O único software necessário para a utilização dos códigos desenvolvidos
neste livro é o Microsoft Excel.
- -------·--,
E interessante, também, instalar o Help referente à lingua-
gem de programação VBA, através da instalação personalizada do
Microsoft Office. Esse .Help. é, interessante como uma referência
rápida a algu11s comandos e cohceitos.
Um Passeio pelo Livro
Este livro está dividido em nove capítulos para um aprendizado mais
didático e fácil. A seguir, um breve resumo sobre cada um deles.
Capítulo 1
Fala sobre o ambiente VBA. Este capitulo é fundamental para quem
está acostumado apenas com a interface de planilha do Microsoft
Excel. Quem já conhece este ambiente, ou já programa com o
software Visual Basic, pode dar uma passada um pouco mais rápida
por este capítulo.
Capítulo Z
Acessando o Código pela Planilha mostra especificamente como
unir planilha e código. Aqui, você aprenderá como executar os
códigos criados no ambiente VBA através do ambiente de planilha
do Excel.
I'
Capftalo 3
Este capitulo é fundamental para os objetivos deste livro. Aqui, va-
mos trabalhar com todos os comandos e conceitos da programação
Basic. o bom entendimento deste capitulo vai designar o seu sucesso
no prosseguimento da leitura do livro.
Capítulo 4
· A partir deste capitulo, iniciamos a seqüência de capítulos descriti-
vos dos objetos do Microsoft Excel. O primeiro é o objeto de maior
hierarquia: Applfcation. Esse objeto representa o próprio Excel e
tem algumas funções importantes a serem vistas.
Capítulo 5
Na seqüência, vêm os objetos Workbooks. Esses objetos representam
as pastas de trabalho com todas as suas planilhas~ Em termos hierárqui-
cos, o objeto Application é composto pelos vários objetos Workbooks.
Capítulo 6
Este capítulo trata dos objetos Wor~sheet. Esses objetos represen·
tam as várias planilhas contidas dentro de um Workbook. Aqui, te-
remos várias funções importantes, principalmente na parte de even-
tos em uma aplicação.
Capítulo 7
O último objeto explanado é o objeto Range. Esse objeto represen-
ta conjuntos de células e é responsável por uma grande quantidade
do trabalho pesado nas planilhas do Excel.
Capítulo 8
Neste capitulo, começamos a trabalhar com formulários personali-
zados: os UserForms. Taisformulários permitem um ótimo
interf aceamento entre planilha e ambiente de programação.
Capítulo 9
Finalizando, este capítulo vai ensinar você a criar um bom design
P~ra seus formulários e mostrar algumas técnicas interessantes para
cnar uma boa interface entre planilha e ambiente de programação.
1
O Ambiente VBA .
4 Desenvolvendo Aplicações Poderosas com Excel e.YBA
Em 1, temos o menu e a barra de ferramentas. Pela barra de
ferramentas podemos executar a maioria dos comandos que neces-
sitarmos durante a fase de composição do código. Assim, vamos
analisar os seus itens:
~
~
Fig. 2 - Barra de ferramentas
i ~ : . . • . . .
. .
Permite alternar para o modo de planilha, sem
fechar o editor do Visual Basic.
Permite inserir novos elementos . dentro do am-
biente de programação. São eles: UserForm,
Módulo, Módulo de Classe e Procedimento.
Salva a planilha Excel, com as alterações feitas
no código.
1 M,·,-~ .. ~ J Recortar, Copiar e Colar. Possuem as mesmas
funções conhecidas do ambiente Windows. ·
Permite localizar determinadas palavras dentro
do código escrito.
Desfazer e Refazer. Possuem as mesmas fun-
ções conhecidas do ambiente Windows.
f ~ :· :,i : a) Executar, Parar e Redefinir. Estes comandos es-
peciais do ambiente VBA controlam a execução
de um bloco de códigos ou de um userform.
1 ~ 1 Ativa e desativa o modo de criação.
l~I Ativa a janela Project Explorer.
1 ~I Ativa a janela Propriedades.
I WI Ativa o Pesquisador de Objeto. Lista todos os
objetos disponíveis no ambiente ·para trabalhar
com a codificação no Microsoft Excel.
G
-
1
-
O Ambiente · VBA
Falar do ambiente de programação VBA é fugir momentaneamente
da estrutura de células do Excel para analisar elementos específicos
de montagem de códigos. O acesso ao ambiente VBA se faz por
meio do caminho Ferramentas I Macro I Editor do Visual Basic.
Vamos dar uma olhada e identificar alguns elementos na ima-
gem que segue:
.!.l
E!:;("::r,;!'t!-''!l@Ç!H.?!J 1
1-,- .:.l Af~ 1,._...;-..1
-l
3
6
Fig. 1 -Ambiente de Programação VBA
-
O Ambiente VBA 5
Ativa ou desativa a caixa de ferramentas para a
criàção de userf orms.
Aciona a documentação sobre o Microsoft Visual .
Basic, quando instalada junto com o Microsoft
Office.
I Ln:1;. c~i1I A barra de ferramentas inclui uma informação
adicional quando estamos trabalhando com os
códigos, a qual informa qual a coluna e qual a
linha nas quais o cursor está posicionado.
O único item de menu que nos traz novas funcionalidades é o
menu Formatar. Este item será bastante usado na composição e
organização de userforms e será visto mais adiante.
Na seqüência, temos, em 2, a janela Project Explorer.
g .. VBAProject (Pastai)
EJ .. ·ê] Microsoft Excel Objetos
\ ; .... ~ EstaPasta_de_traba
l \ ..... lifil Plan 1. (Planl)
l \ ..... 9!1 Plan2 (Plan2)
] L .... ifil Plan3 (Plan3)
g ... ~ Formulários
L ... ~ UserForml
Fig. 3 • Janela Project Explorer
A janela Project Explorer exibe todos os elementos principais
contidos dentro da pasta de trabalho Excel. Ela é composta de pro-
jetos VBA ativos, ou seja, todas as pastas de trabalho Excel abertas
no momento. Cada pasta é dividida em Microsoft Excel Objetos,
Formulários e Módulos (quando houver). A pasta de trabalho e suas
6 Desenvolvendo Aplicações Poderosas com Excel e VBA
planilhas são os objetos mostrados em Microsoft Excel Objetos, que
também poderão ser codificados com VBA. Formulários vai conter
os userforms criados para a aplicação, e Módulos conterá todos os
módulos que possuem códigos públicos feitos pelo programador ou
criados pelo Microsoft Excel na composição de macros.
A janela Project Explorer pode ser ativada por meio da bar-
ra de f P.rramentas, como visto anteriormente, ou pelo atalho de
teclado Ctrl + R.
Em 3, temos a janela Propriedades.
Propriedades • Plan 1 . · ' · ·· · , Ei
Planl Worksheet •
Álf abéti~o -1 · Cat~~~;i;·; d:r~
(Name) -:-.s,. ...... Planl
DisplayPageBreak False
--- ,
DisplayRigh~T ~Lef ralse _ 1
EnableAutofilter !False 1
EnableCalculation: T rue : i
EnableOutlining False ____ _ ;
EnablePivotTable False l
.. . ··-· · · ··--•
EnableSelection 'O • xlNoRestricti,
- -· ..
Name ~anl
··-·- ·-- --
ScrollArea 1
StandardWidth ___ .Ia,4~ ..
Visible : -1 - xlSheetVisib
Fig. 4 - Janela Propriedades
A janela Propriedades exibe todas as configurações que po-
dem ser feitas nos objetos (planilhas, userforms, entre outros) do
ambiente de programação em tempo de projeto.
Ela pode ser acessada pela barra de ferramentas, como visto
anteriormente, ou pela tecla aceleradora F4 do teclado.
4, 5 e 6 compõem a janela de Código. Dentro dessa janela,
aparecem todas as codificações feitas para os objetos Microsoft
Excel.
-
O Ambiente VBA 7
Em 4, temos o objeto que está sendo codificado. Em 5,
temos o evento ou função do objeto que está sendo codificado. Em
6, t7mos realmente o local de digitação dos códigos VBA. Este
?mbH~~te f ~z reco~hecimento de palavras-chave de programação,
1dent1f1ca~ao colonda de códigos, listagem de propriedades, méto-
dos de obJetos declarados, entre outras funcionalidades.
~oi.xls - Planl (Código) '1.:",··~ ·~.':,: ·····.'r··· ,. ,, .... .. , .. -oA" ~, ... ; • ., • • • , • • • ,~.ar • • ,., .... " \"~ -,. l!lr::1&"2
.......... ,., ... , . • . :"'·ç-""'"" -?·"'!J,. .. , ..... \ • .:..I':->~"':. l!!J~
~- jwoa k•l~et ..:J jselectionChange
, Privatc Sub Workshect_SelectionChange(ByVal Target As Range)
'Pinta o interior do intervalo selecionado de vermelho
Targeq.Intcrior.Color • RGB(2SS, O, O)
.(
' '
• t
End Sub
Fig. 5 - Janela de Códigos
•
....
Na Figura 5, o objeto que está sendo codificado é o objeto
Worksheet (planilha). Está sendo detectado o evento
SelectionChange (um intervalo de células foi selecionado). O código
faz com que, ao selecionarmos um intervalo de células, estas te-
nham seu interior pintado de vermelho.
A abertura da janela de código dependerá dos objetos com os
quais estamos trabalhando. Para codificarmos Planilhas, Pastas de
Trabalho e Módulos, simplesmente damos duplo clique sobre estes na
janela Project Explorer e seus códigos aparecerão. No caso dos
userforms, como veremos adiante, o duplo clique exibirá a interface
do formulário com seus objetos e teremos que dar duplo clique
nesses objetos para fazer a codificação.
2
Acessando o Código
pela · Planilha·
- z -
Acessando o Código
. pela Planilha
Um bom começo para trabalharmos com códigos VBA dentro do
Excel é analisar os códigos gerados pelo próprio Excel quando está
sendo criada alguma macro. Uma macro executa uma seqüência de
comandos previamente gravados pelo usuário quantas vezes ele de-
sejar, visando uma maior automação dentro de uma planilha. Siga
as próximas instruções:
Abra uma nova pasta de trabalho no Excel e grave uma macro
clicando em Ferramentas I Macro I Gravar Nova Macro. A seguin-
te janela aparecerá:
M_ome da macro:
Leda de atalho: 8_rmazenar macro em:
Ctrl+r, jEsta pasta de trabalho . ·- _ .:.)
.
Descrição: · : · : · · -e: ~ .. ··1·,i:· ~\'.., ... 1~-v~~--
. ,Macro grav~ em-29/0~/2002 por Maicris ~er~~s . . ,~
:,·,;.-r..::~·. ·I~ · ·.:·:,~-f_'\;;;,··:. . ...,, , '•' : ~·-- · ·"";~ ~..:~·:-""':: ...... r~;· ~ T~·-t, , .
. . ' .. :
·' .· ' 1. OK ~- ·; e 1 - 1 . . . ancear .
. . • .. "':. .
Fig. 6 - Janela Gravar Macro
A informação essencial dessa janela é o nome da macro, o qual
será o acesso para a sua execução. Uma tecla de atalho pode ser
interessante caso queiramos executar a macro rapidamente pelo
teclado, sem criar um botão específico. Coloque Pintar para o nome
da macro e pressione Ctrl + SMft + P para o atalho.Pressione OK e
verifique que vai aparecer a barra de ferramentas Parar Gravação.
:1
,!
l
1
1Z Desenvolvendo Aplicações Poderosas com Excel e VBA
Fig. 7 - Barra de ferramentas Parar Gravação
Nesse momento, o Excel está gravando tudo o que você esti-
ver fazendo, portanto, não faça nada além do que lhe for especifi-
cado. Um simples clique em uma célula pode alterar o funcionamen-
to da macro que está sendo criada. Procure a ferramenta de preen-
chimento (o balde de tinta) e pinte a célula ativa de vermelho.
Detalhe: Não clique em célula alguma. Você está gravando a
macro. Se você clicar em uma célula, quando for repetir o processo
pela macro, a célula que será pintada é a que você clicou na gera-
ção. Para que isso não ocorra, simplesmente pinte a célula que esti- .
ver ativa. Quando o processo for repetido, a célula que estiver sele-
cionada é a que será pintada.
Após pintar a célula, clique no botão Parar da barra de ferra-
mentas Parar Gravação. Pronto, sua macro está gravada. Faça o
seguinte teste: selecione uma célula qualquer e pressione Ctrl +
Shift . + P (o atalho anteriormente definido), ou clique em Ferra-
mentas f Macro f Macros, selecione a macro Pintar e clique em
Executar. A célula selecionada foi pintada de vermelho. Não é facil?
Vamos dar uma olhada no que o Excel fez para que essa macro
fosse criada. No mesmo caminho anterior, Ferramentas f Macro f
Macros, selecione a macro Pintar e clique em Editar. Automatica-
mente o ambiente de programação VBA será aberto:
tJtl?T'Q,V,:PT13fT'!O::'.it1'fWfdni"'U.te:4°'.&P&~1t,i!':rr~.tMJ,~~~·i,u..,.~~~ .. .1:'.,,·~r..,;,~'!.'t .·;~i· .. '.f
/ ~ tca- ["4;' tnwl' ~ Qolu• E;ioewt f«,MWI .. ~ .ja,w A)Wdo . ' fOO ·c1 . g -; l~-. P. ~ .~ · ,-;7-.-~; -;·al ~~ ij ~ -}~ 1 ·w i . . -·-·· .. ----·--- ·- - ·J -·-·-·-· -
Fig. B - Código gerado pela macro Pintar
Acessando o Código pela Planilha 13
Como você pôde perceber, apareceu um novo módulo na pasta
Módulos, chamado Módulo1. Ele foi criado pelo Excel com o propósi-
to de armazenar o bloco de código que vai executar a ação de pintar
a célula, conforme gravamos anteriormente. Tal código foi criado em
um módulo por esse objeto possuir escopo público na aplicação, ou
seja, todos os outros objetos reconhecem as funções e sub-rotinas
escritas dentro de um módulo. Assim, sua macro pode ser executada
em qualquer planilha da pasta de trabalho em que foi gravada.
Não se preocupe com o código aqui gerado. Mais tarde, farei
uma descrição completa da linguagem de programação e de suas
particularidades. Uma coisa que pode ser de muito interesse após o
aprendizado da programação é a análise dos códigos gerados pelo
próprio Excel, a fim de poder aprender como o Excel faz para exe-
cutar algumas ações internas.
Criando um Botão na Planilha
Como já vimos, podemos executar uma macro pelas teclas de atalho·
e pelo menu Ferramentas. Uma outra maneira é criar um botão na
planilha que pode ser "linkado" com a macro e poderá executá-la.
Para tanto, devemos exibir a barra de ferramentas Formulário.
Clique em Exibir I Barra de Ferramentas I Formulários. A seguinte
barra surgirá:
Q@.fo@xl
... _Aa ~bl :
. .
. · rXY~ •.: 1 .
l,_J -~ ·l
. . . .. . : j
.·p .. ·_ @ . !
. =eB .
·!illl 1$1
'. .. . l
.. ,· · . .
1
. •• lil - A .. ,
.. - ~ . ·,.
:. ' \ ',
:, .. • · -~---.:.:
·: ~ r-.= 1 lÉ.EJ, ·. ._ (
. . .
"fSf:::::: Qii.l · .. : i .'''" '-, ~ ··.·.
r: ·:_;:.:~: .) ',· .:/. '
Fig. 9 _ Barra de ferramentas Formulário
14 Desenvolvendo Aplicações Poderosas com Excel e VBA
Tal barra nos oferece recursos de formulários, tais como: cai-
xas de combinação, rótulos, entre outros. O que nos interessa nesse
momento são os botões. Na Figura 9, localizamos o botão na segun-
da coluna da barra, sendo o segundo item da coluna. Clique nele e
desenhe um botão de tamanho apropriado em sua pla;1ilha.
A janela Atribuir Macro apàrecerá. Para atribuir uma macro
ao botão criado, selecione a macro Pintar e observe como fica a
janela antes de clicar no botão OK:
Nome da macro:
!Pintar
Pintar
~ .
' OK ' . · I
. Cancelar 1 ~ . , ;r
.. ·,
;;,
1
• E_ditcr ·: j
;'.: ;::: ------
·., .. : :~ · : . Gra•-·=:t.· ~ · .,
~·· · • • V 4.1 , • ,
' ., .• --------
~:\. {·~: .
: ~· . . ' .
t. :~;: :~ : .. ~ . . . ·.
. . ·.
~" .
. .. · ..
. :-· .· .
:· --'~~f.'ii~ii.'.·~"::,-1~'" .. --.·-,;,. ' -' -~ .: ;~_ .. ,. 'C.·..;,· .,-• . ~ • • ,-:.,;-• . ,.!:::.l :.v : ·:. , . ; . ' . ,
M~crcis e~ :·.· '. /rO?as as pastas de trabalho abertas iJ ... , · · · .·- .. · · .. .
: Descrição . ' , · · .:·:· · · ~ :·::· ·. · · · ... ' . ~ '~ ·, · · · · ; . : , .. .
.'· .
Macro gravada em 29/07/2002 por Maicris Fernandes
Fig. 10 • Janela Atribuir Macro
Clique na planilha e pronto! Já temos um botão qL·e faz ligação
direta com a codificação VBA gerada pela macro. Cc mo veremos . j
mais adiante, ao criarmos um botão, podemos vincl lá-lo direta-
mente a uma função criada por nós mesmos.
Criando om Botão na Barra dei Ferramentas
Um~ outra forma de execução rápida de uma macr,> é criar um
botao na barra de ferramentas. Para isso, clicamos em Exibir 1
Barras de Fer~am~nta~ 1 Personalizar. Surgirá a janela Personali·
zar, que possu1 tres gu1as:
.;
.,
l
J
Acessando o Código pela Planilha 1 5
";. Barras de f.err ~mentas ) · Co~andos J ; Ó~ões J · · : : ~
. . l . . • • -
e_arras de ferramentas: · ·'· :·
11 ...
Fig. 11 - Guias da janela Personalizar
Na primeira guia, Barras de Ferramentas, podemos criar uma
barra de ferramentas personalizada para armazenar atalhos para
todas as nossas macros. Vejamos a janela:
·.- [~~-~-~ .. ~-~J~~~~~~~~~~J ] Comandos J · («ões 1 ·· : · ·
e_arras de ferramentas:
Padrão · · ·
;-· r;; Formatação
r Área de transferência
r Atualizar
r Auditoria
~ f;; Barra de menus da planiha
. r Barra de menus de gráfico
!. r Caixa de ferram. de controle
'. . r Dados externos
: r Defnições de 30
· . r Definições de sombra
. roesenho
r FiglJ'a
· . r Formulários
.. r Gráfico
· ~ · ?··· . ; . • .. . •
~ U.J ,• . ~ ...
' • .- · • • r
-· . . - . - ·-· ·-
.. . ., . . ... "'.' . ·•. •.;
~ova ...
Renomear, ..
Exdulr
Reg_efinir .. .
' . .... Ane"t,_at ...
·.·
---
Fechar
Fig. 12 - Guia Barras de Ferramentas
Para · criarmos uma nova barra de ferramentas, clicamos no
botão Nova ... , localizado no lado esquerdo da janela. Digite o nome
da barra de ferramentas, por exemplo Minhas Macros, e clique em
OK. Você verá sua nova barra vazia, com o tamanho de uma única
ferramenta, como mostra a figura a seguir:
Fig. 13 - Barra de ferramentas Minhas Macros
1,
.
1
,\
' 1
1,
' \
16 Desenvolvendo Aplicações Poderosas com Excel e VBA
Agora, devemos colocar nossa macro como um botão den~r~
da barra de ferramentas Minhas Macros. Para tanto, devemos ut1l1-
zar a guia Comandos. Vejamos a respectiva janela:
, -1··1 ... e. .... ,., ,,.,,,4.IJ na Personalizar . · ' . · · · 0 • '. • • •
~ .. ~ . . '' 1 ·.
. .
' -
. f?l l". - '
~ ~ ·~
'
- 1 . Fechar 1
Fig. 14 - Guia Comandos
Observe que na categoria Macros temos o comando Personali-
zar Botão. Este é o link que liga a barra de ferramentas a uma
macro. Clique no botão, arraste-o para dentro de sua barra de
ferra mentas até que apareça um demarcador de lugar e solte-o.
Nesse momento, sua barra de ferramentas deve estar assim:
1 .
Fig. 15 - Barra Minhas Macros com botão personalizado
Ainda com a janela Personalizar aberta, clique com o botão
direito do mouse sobre o botão criado em sua barra de ferramentas
e, no menu que surgirá, escolha a opção Atribuir macro ... , localizado
no fim do menu. A janela que irá surgir já é nossa conhecidado tópico
anterior. Basta selecionar a macro desejada e clicar em OK.
1
l
1
1
l j
!
Acessando o Código pela Planilha 17
Algumas outras configurações podem ser feitas. Clique nova-
mente com o botão direito sobre o botão e altere a opção Nome.
Esse nome é o que vai ser exibido como ajuda quando você parar o
mouse sobre o botão da barra de ferramentas. Também podemos
clicar na opção Alterar imagem do botão e escolher uma nova ima-
gem ou, até mesmo, editá-la na opção Editar imagem de botão.
Com isso, a cada macro criada, poderemos acrescê-la à nova
barra e, mais à frente, vincular os botões aos nossos códigos.
Minhas Macros 13
. @ e , _ H [!]
Fig. 16 - Barra Minhas Macros
'I: 5
3
Linguagem de
Programa~ão
- 3 -
Linguagem de
Programação
Agora que já demos algumas prévias a respeito do Excel, podemos
entrar finalmente na programação. Como já foi mencionado, o am-
biente de programação VBA utiliza a linguagem de programação
Basic. Todas as linguagens de programação trabalham sobre as. mes-
mas estruturas, variando a forma como elas são trabalhadas e os
comandos utilizados.
O básico de uma linguagem é trabalhar com os seguintes ele-
mentos: constantes, variáveis, condicionais, laços, funções e sub-
rotinas. Neste capitulo, veremos cada um deles detalhadamente,
voltados para a linguagem de programação Basic.
Sub-rotinas
As sub-rotinas são espaços nomeados utilizados para executar blocos
de códigos. Normalmente, identificamos uma sub-rotina pela se-
guinte estrutura:
Sub Pintar ( )
'Pintar Macro
• Macro gravada em 30/07/2002 por Maicris Fernandes
With Selection. Interior
. Colorindex = 6
.Pattern = xlSolid
End With
End Sub
1
1
' !
1
1
., ~;~.---------~·~--~--------------------..........
1
1
1 '
11 1
1
1 •
1
1
' '
1
!
.
1
1
Ll__
1
J
1
1
l
zz Desenvolvendo Aplicações Poderosas com Excel e VBA
Percebam que a sub-rotina começa pelo demarcador Sub · se-
guido pelo nome, abre e fecha parênteses, e termina no demarc~dor
End Sub. Com isso, o bloco de códigos que será executado pela
macro Pintar fica entre esses demarcadores.
Podemos identificar alguns outros elementos como, por exem-
plo, os comentários. Um código deve ser montado da forma mais
legível possível para que, mais à frente, quando houver a necessida-
de de correções ou expansão do código, este esteja fácil de ser
interpretado. Assim, a inclusão de comentários é uma forma muito
eficiente de deixar as coisas mais legíveis dentro de um código.
Um comentário é caracterizado pelo símbolo de apóstrofo no
início da linha comentada. Esse símbolo é um substituto do comando
Rem, que é uma abreviação de remember (esse comando pode ser
utilizado no lugar do apóstrofo). Dentro de um código no ambiente
VBA, as cores dão destaque a elementos especiais e, no caso dos
comentários, todos são exibidos na cor verde.
Mais à frente, estão os comandos que farão as funções da
macro. Um detalhe importante a ser notado em termos de organi-
zação é a edentação. Perceba que as instruções que estão sob o
efeito da cláusula With estão tabuladas um pouco mais à direita no
código. Isso é para mostrar que esses comandos estão dentro dos
demarcadores With e End With, assim como todo o código está
tabulado em relação aos demarcadores Sub e End Sub. Conforme
formos trabalhando com novas estruturas de programação, mostra·
rei eficientes formas de edentar os códigos para uma maior
legibilidade.
Criacão de oma Nova Sob-rotina
.a
Para criarmos uma nova sub-rotina, sem termos que gravar uma
nova macro, devemos entrar no ambiente do Visual Basic for
Applications. Para isso, devemos clicar no menu Ferramentas 1
Macros f Editor do Visual Basic, ou pressionar o atalho de teclado
Alt + F11.
Dentro do ambiente VBA, uma sub-rotina pode ser escrita em
vários locais. Ela pode ser um código dentro de uma planilha, um
código público escrito em um módulo (o que referencia uma macro
para a aplicação) ou pode ser um código escrito dentro de um
userform, como veremos mais adiante. Como estamos querendo
•
Linguagem de Programação · 23 ·
trabalhar, por enquanto, com códigos que podem ser vistos e execu-
tados por toda a aplicação, vamos utilizar os módulos.
Caso você ainda não tenha criado nenhuma macro, não deve
existir nenhum módulo à vista; assim, teremos que inserir um. Para
colocarmos um novo módulo em nossa aplicação, clicamos em Inse-
rir I Módulo ou em seu respectivo atalho na barra de ferra mentas,
como já mencionado no capitulo 1. Com isso, um novo módulo apa-
rece na tela, com o nome de Módulo1. O nome de um módulo pode
ser modificado na janela Propriedades, modificando a propriedade
Name.
Perceba que um módulo não tem interface gráfica, apenas a
interface texto para a inserção de códigos. Para criarmos uma sub-
rotina dentro desse módulo, podemos digitar direto o demarcador Sub,
seguido pelo nome e ( ), ou clicar em Inserir I Procedimento, digitar o
nome da sub e clicar em OK (por enquanto, não se preocupe com os
outros elementos dessa janela). Pelo segundo método, a palavra Public
é incluida antes do demarcador Sub, o que, para nós, é redundante.
Para organização, você pode fazer o seguinte: pressionar duas
vezes Enter, voltar para cima uma vez com a seta do teclado e
selecionar a tecla Tab. Com isso, o seu ambiente VBA está edentado
e pronto para receber novas codificações.
Constantfls
As constantes são palavras que representam valores ou textos que
podem ser usados em outros locais da aplicação. Uma constante
pode representar, por exemplo, o nome da sua aplicação. Digamos
que o nome de sua aplicação fosse Macros. Assim, poderiamas criar
uma constante com esse valor para exibirmos em todas as caixas de
mensagens que fossem aparecer. Vejamos um exemplo (depois, adi-
cione essa macro à barra Minhas Macros):
Const NomeApp = ·Macros"
Sub Mensagem ( )
. MsgBox "Esta é uma mensagem de teste", vbOKOnly, NomeApp
End Sub
Para declararmos a constante NomeApp, utilizamos o coman-
do Const. Com isso, NomeApp não pode mais ser modificada e
conterá o valor "Macros" até o fim da aplicação.
,~---------
-
,rr--
Z4 Desenvolvendo Aplicações Poderosas com Excel e VBA
No código que utilizamos como exemplo, MsgBox é uma fun-
ção que exibe uma mensagem padrão Windows na tela. Um estudo
mais aprofundado sobre essa função será feito mais à frente. Por
enquanto, podemos falar que, e~tre aspas, .está a mensagem que
vai aparecer. No final, temos o t1tulo da ca1xa de mensagem, que
foi definido como a constante que declaramos anteriormente. Per-
ceba que a constante foi declarada dentro de um módulo, fora da
sub, ou seja, na seção Declarations do módulo.
O parâmetro do meio na função msgbox indica quais botões
vão aparecer na caixa de mensagens. Aqui, temos mais uma aplica-
ção das constantes. vbOkOnly é uma constante que referencia O .
valor O, indicando que aparecerá apenas o botão OK na caixa de
mensagens. É muito mais fácil lembrar da palavra vbOkOnly do que
lembrar do valor O.
Variáveis
As variáveis têm função similar às constantes mas, como o próprio
nome diz, elas podem ter seus valores alterados durante a execução
da aplicação.
Tecnicamente falando, as variáveis são espaços reservados na
memória do computador que servem para armazenar inf armações
para uso posterior. Existem alguns tipos de variáveis, cada um ser-
vindo para um determinado tipo de dados e ocupando um espaço
diferente de memória.
Os tipos de variáveis suportados no VBA são:
:> String - As variáveis do tipo string são também cha-
madas de alfanuméricas, pois podem receber quais-
quer tipos de dados no formato texto. Sempre que
declaramos· uma variável como string, só podemos
carregá-lacom um texto colocado entre parênte-
ses. O tamanho máximo de uma string é de 65.4_00
bytes.
Byte - Aceita números inteiros, que variem de O a
255, ocupando 1 byte de memória. Ideal para conta-
dores de baixa durabilidade e laços simples.
lnteger - Aceita números inteiros, que variem de
-32. 768 a 32. 767, ocupando 2 bytes de memória.
<
Linguagem de Programação 25
:> Long - Aceita valores inteiros longos, que variam de
-2.147.483.648 a 2.147.483.647 e ocupem 4 bytes
de memória.
Single - Também chamado de precisão simples, traba-
lha com números reais, variando, aproximadamente,
de -3.4E38 a 3.4E38 e ocupando 4 bytes de memória.
Double - Também conhecido como dupla precisão,
trabalha com números reais, variando, aproximada-
mente, de -1.8E308 a 4. 9E324 e ocupando 8 bytes de
memória.
Date - Trabalha com datas e horas, variando de 1 / 1 /
100 a 31 /12/9999 e ocupando 8 bytes de memória.
Boolean - Trabalha com os valores booleanos True e
False, ocupando 2 bytes de memória.
Variant - Pode assumir qualquer tipo de variável, ocu-
pando 16 bytes quando armazena números e 22 bytes
quando armazena uma string.
A declaração de variáveis se dá pela cláusula Dim e não é
obrigatória. Quando não declaramos uma variável, estamos usando
um espaço na memória do tipo variant, ou seja, podemos estar
gasta.ndo muito mais memória do que precisamos. Por isso, mes-
mo não sendo obrigatória, a declaração de variáveis é uma boa
prática de programação. Vejamos alguns exemplos de declarações
de va'riáveis:
Dim Nome As String
Dim Idade As Byte
Dim DatadeNascimento As Date, Dim Casado As Boolean, Dim NumeroFilhos
as Byte
Dim Numl, Num2, Num3 as Integer
Como vimos anteriormente, podemos economizar linhas de-
clarando todas as variáveis separadas por virgulas. Além disso, vari-
áveis do mesmo tipo podem ser declaradas sequencialmente, cha-
mando a cláusula As apenas uma vez.
Variáveis Estáticas
Existe um tipo especial de variável chamada estática. As variáveis
comuns, quando são declaradas dentro de uma sub, são zeradas
1
,, 1 1
,\ ,
:I ,
,i 1
1 i
:1
\
' \
. ~
... .,
26 Desenvolvendo Aplicações Poderosas com Excel e VBA
após O término da execução do bloco e códigos contido~ nela. As
variáveis estáticas conservam o seu valor para uso postenor e, por
isso, são bastante usadas como contadores.
Vamos ver um exemplo prático:
Insira dentro de um módulo no ambiente VBA a seguinte sub:
Public Sub Contar( )
'Declaração de variáveis
Di~ Contador As Byte
'Código a ser executado
Contador= Contador+ 1
MsgBox Contador
End Sub
Após digitá-la, crie um botão na planilha (capitulo 2) e atribua
a macro Contar a ele. Vá clicando várias vezes no botão. A caixa de
mensagem que aparece está mostrando o valor 1. O que acontece é
que, quando entramos na sub, criamos uma variável do tipo byte,
que tem valor inicial O. Adicionamos 1 a essa variável e exibimos a
caixa de mensagem. Quando acaba a sub, o valor da variável volta a
ser zerado.
Para construirmos um contador de entradas na sub, devemos
substituir a declaração da variável por:
Static Contador a s Byte
Faça a substituição e execute os cliques novamente no botão.
O resultado, agora, é uma seqüência de números que vai aumentan-
do a cada clique. O que acontece é que, quando saímos da sub,
devido à variável ser estática, ela não tem o seu valor zerado e
podemos utilizá-lo posteriormente na mesma sub.
Operadores
Dentro da programação Basic, temos alguns símbolos especiais que
executam operações entre valores ou variáveis. Esses operadores
podem ser de três tipos: aritméticos, comparativos ou lógicos.
Os operadores aritméticos são:
, 1
p
!
\
J
Linguagem de Programação 27
:> +, ·,. /, *, "' · Operações básicas matemáticas. Res-
P:Ct1Vamente: soma, subtração, divisão, multiplica-
çao e exponenciação.
8: : Concatenação. Une duas strings em uma única
string.
:> MOD - Operador que retorna o resto de uma divisão.
Os operadores comparativos são:
:> = igual a.
:> > maior do que.
:> < menor do que.
:> >= maior ou igual a.
:> < = menor ou igual a.
:> < > diferente.
Os operadores lógicos são:
:> And - Faz um E lógico.
~ Or - Faz um Ou lógico.
:> Not - Faz uma negação lógica.
Tenha bastante cuidado ao utilizar esses operadores lógicos
para não incorrer em erros. Opções como Sexo = "Masculino" And
Sexo = "Feminino" incorrem em um erro lógico, pois ninguém pode
ter sexo masculino e feminino. Assim, deveria ser utilizado o opera-
dor lógico Or.
Vetores
Vetores são variáveis que podem armazenar múltiplos· valores, como
se fosse uma lista. Por exemplo, se quiséssemos armazenar o valor
do saldo de todos os meses de um ano, poderíamos criar um vetor
de doze elementos, um para cada mês. Vejamos:
Dim Saldo(! to 12} As Currency
Saldo(!}= 1.000
Saldo( 2 ) = 1. 500
Saldo (12) = 900
ZI Desenvolvendo Aplicações Poderosas com Excel e VBA
Uma vez declarado um vetor com a sua quantidade de elemen-
tos, ele não pode ser redimensionado. Para que_ possamos fazer isso,
devemos declará-lo sem especificar a sua quant1dade de elementos e
redimensioná-lo de acordo com a necessidade com a cláusula Redim:
Dim ValorAnual() as Currency
Redim Valor.Anual ( 1999 to 2002)
Valor.Anual(1999) = 1.000
Valor.Anual(2000) = 2 . 000
Valor.Anual (2001) = 600
Valor.Anual(2002) = 2.500
A cláusula Redim vai redimensionar o vetor, zerando todo o
seu conteúdo. Caso deseje redimensionar o vetor sem perda de
)
conteúdo, utilize a cláusula Redim Preserve.
Os vetores poderão ser muito úteis no manejo de informações
que tenham o mesmo escopo, mas com múltiplos agentes.
Condicionais
Condicionais são o motor de qualquer linguagem de programação,
pois, através dessas estruturas, podemos fazer análise de valores e
variáveis e tomar decisões dentro dos blocos de códigos.
'!li
1
1
Passamos a vida tomando decisões. O pensamento lógico nos
obriga a trabalhar dessa forma para descartarmos as possibilidades
que não nos são favoráveis. Por exemplo, digamos que estamos v
dirigindo em uma via e nos deparamos com um semáforo. Nossa
decisão tem três caminhos: caso o sinal esteja verde, passamos; se- .
estiver amarelo, reduzimos; caso esteja vermelho, paramos o vei-
culo e esperamos autorização para prosseguir. No computador, é a
mesma coisa, só que com comandos especificas.
A primeira condicional que veremos é a cláusula lf. Vejamos
sua estrutura mais simples:
If <<condição= true>> Then
<<Comandos>>
End If
<<Condição = true>> é uma análise de valor ou variável que
retorne verdadeiro e <<comandos>> são códigos que serão execu·
tados caso a condição seja aceita.
Linguagem de Programação
Vejamos um exemplo para clarear essa idéia:
FUblic Sub PodeDirigir()
Dim Idade As Byte
Idade= InputBox("Por favor, digite a sua idade.")
If Idade>= 18 Then
MsgBox "Você pode dirigir! ! J··
End If
End Sub
29
lnputBox é uma função que solicita uma digitação do usuário.
Ela será vista com mais detalhes à frente. Quando digitamos uma
idade maior ou igual a 18, recebemos a mensagem "Você pode diri-
gir". Entretanto, quando digitamos um valor menor que 18, nada
acontece. Isto se deve pelo motivo de, no primeiro caso, Idade >= 18
retornar o valor booleano True, ou seja, a condição ser verdadeira.
Mas não parece que falta alguma coisa? Então, vamos incluir
uma cláusula Else, que significa Senão:
Idade= InputBox("Por favor, digite a sua idade ." )
If Idade>= 18 Then
MsgBox_ "Você pode dirigir!!! •
Else
MsgBox "Você não pode dirigir!!!"
End If
Else é uma cláusula que executa blocos de códigos caso a con-
dição incorrer como False.
E, se tivermos mais que uma opção, o que faremos? Uma
formaprática de implementar esse tipo de situação é utilizar um
novo lf, que pode ser acoplado à cláusula Else. Vejamos:
Idade= InputBox("Por favor, digite a sua idade . •)
If Idade>= 18 And Idade<= 80 Then
MsgBox •você pode dirigir!!!"
Elseif Idade< 18 Then
MsgBox •você não pode dirigir!!!"
Elseif Idade> 80 Then
MsgBox "Tenho que analisar o seu estado de saúde!!!"
End If
Um detalhe importante a ser notado é a edentação do código,
que o torna mais legível na hora da análise e correção.
30 Desenvolvendo Aplicações Poderosas com Excel e VBA
Existe mais um tipo de condicional, chamada Case. Observa-
remos a seguir sua estrutura:
Select Case <<Variável>>
Case <<valor>>
<<Comandos>>
Case <<valor>> ·
<<Comandos>>
Case Else
<<Comandos>>
End Select
<<Variável>> é o objetó que entrará em análise. <<valor>>
são os valores que estão sendo analisados para o objeto.
Para ficar mais claro, observe o exemplo:
Public Sub QuantFilhos ( )
Dim NFilhos As Byte
NFilhos = InputBox ( "Quantos filhos você tem?")
Select Case NFilhos
Case O
MsgBox "Está na hora de providenciar ... •
Case 1
MsgBox "Um é pouco ... "
Case 2
MsgBox "Dois é bom ... "
Case 3
MsgBox "Três é demais!!!"
Case Else
MsgBox "Belo time de futebol ... "
End Select
End Sub
Case Else vai atuar sempre que o valor analisado não satisfizer
nenhuma das cláusulas Case analisadas. Com Select Case as possibi-
lidades podem estender-se facilmente, o que é ideal para análise de
uma grande lista de valores.
Lacos
.a
Laços são as estruturas de programação mais importantes depois
1 das condicionais. São estruturas de repetição, que podem executar
1
l
1
.
!
•'
-
,>
Linguagem de Programação 31
um bloco de comandos várias vezes, de acordo com a vontade do
programador ou análise do comportamento da aplicação.
Utilizar bem os laços é possuir uma ferramenta importante na
composição de códigos, além de ajudar muito a evitar a redundância.
O primeiro tipo de laço que veremos é o laço For. Vejamos a
sua estrutura:
For <<variável>> = rnin to rnax
<<Comandos>>
Next <<variável>>
<<variável>> vai conter os valores delimitados por mine max,
e pode ser utilizada dentro dos códigos contidos em <<Comandos>>
na hora que for desejada.
Vamos ao exemplo:
Public Sub Soma ()
Dirn i As Byte, Di rn Num, Soma As Integer
For i = 1 To 3
Num= InputBox("Por favor, digite um dos números " )
Sorna= Soma+ Num
Next i
MsgBox "A soma dos números é" & Soma
End Sub
Perceba que a solicitação e a soma serão repetidas para i igual
a 1, 2 e 3. Um detalhe novo é a concatenação da mensagem da
msgbox com o valor calculado. Isso é muito comum. Utilizando esse
recurso, podemos melhorar o nosso código incluindo o uso da variá-
vel i na inputbox:
For i = 1 To 3
Num= InputBox ( "Por favor , digite o " & i & • 11 número " )
Soma= Soma+ Num
Next i
MsgBox "A soma dos 3 números é• & Soma
Nesse exemplo, as mensagens da inputbox variam de acordo
com o valor assumido por i, ou seja, "Digite o 1 º número", "Digite
o 2º número" e "Digite o 3º número". Utilize a variável do laço For
à vontade dentro do seu código.
l
l
31 Desenvolvendo Aplicações Poderosas com Excel e VBA
Existe um argumento complementar no laço For, chamado Step.
Step é o incremento a ser utilizado para uma variável. Por exemplo, se
tivermos uma variável n indo de 1 a 10, com step = 2, n assumirá
1, 3, 5, 7, 9. Assim, o exemplo anterior seria facilmente convertido para
gerar a solicitação dos número do último para o primeiro. Vejamos:
For i = 3 To 1 Step -1
Num = InputBox ( "Por favor, digite o • & i & • 11 número•)
Soma= Soma+ Num
Next i
MsgBox "A soma dos 3 números é• & Soma
Detalhe: A única forma de gerar um laço For invertido é utili-
zar um step negativo. De outra forma, receberemos uma mensa-
gem de erro.
Seguindo a seqüência dos laços, vamos trabalhar com o Do. Ele
pode ter duas sintaxes: Do While, que podemos traduzir por Faça
Enquanto, e Do Until, que podemos traduzir como Faça Até. Veja-
mos a sua estrutura:
Do While/Until <<condição>>
<<comandos>>
Loop
Com esse tipo de estrutura, podemos expandir o exemplo de
soma de números anterior para um número infinito de somas, até
que o usuário nos informe que não vai mais digitar valores.
Public Sub Soma()
Dim Parar As Boolean, Num As Integer, Soma As Integer, i As Byte
Do Until Parar
i = i + 1
Num = InputBox ("Por favor, digite o • & i & "11 número" &
Chr(13) &
Loop
• O para encerrar• )
If Num = O Then
Parar = True
Else
Soma= Soma+ Num
End If
MsgBox "A soma dos• & i - 1 & • números é• & Soma
End Sub
<
--
Linguagem de Programação 33
Aqui, nosso artificio foi uma variável de controle chamada
Parar. Como foi declarada como boolean, seu valor inicial é False. O
toop utilizado foi Do Until (Faça Até), que só encerra quando a
variável retornar True. Também foi utilizada uma variável i como
contador para que possamos usá-la na mensagem da inputbox e na
mensagem final para contar quantos números foram somados.
Um detalhe interessante foi o uso de Chr(13) na mensagem.
Chr é uma função que retorna um caractere de acordo com o seu
código. No caso do código 13, este significa o Carrier Return, ou
seja, "pulada de linha". Assim, na mensagem da inputbox, temos o
texto que indica o valor para parar o loop na próxima linha.
fun~ão lnputBox
Até este momento, temos trabalhado bastante com essa função
para receber entradas do usuário. lnputBox é uma caixa padrão do
Windows que tem alguns argumentos especiais a mais do que a
simples mensagem que temos utilizado até agora. Vejamos a sua
sintaxe:
. InputBox (Prompt, [Title], [Default], [XPos], [YPos], [HelpFile],
[Context]) As String
O único argumento da função que não está entre colchetes é a
mensagem do Prompt, pois é o único argumento obrigatório; os
outros são opcionais, por isso até agora não os mencionamos. Va- .
mos conferir cada um individualmente:
:> Prompt - É a mensagem a ser exibida ao usuário quando
executada a inputbox.
Title - É o titulo da caixa de mensagem, situado na
barra azul.
Default - É um valor que já aparece preenchido na
inputbox como valor padrão.
XPos YPos - É a posição em que a caixa de mensagem
, - I
situa-se na tela. O padrao e no centro.
HelpFile, Context • Utilizados para designar um arqui-
vo e um contexto de ajuda para a caixa de mensagem.
' 1,
34 Desenvolvendo Aplicações Poderosas com Excel e VBA
Vamos a um exemplo:
( "Q 1 a sua cidade?", "Cadastro de clientes•, Resposta= InputBox ua
"Curitiba", 100, 100)
~. Cadastro de clientes .. · ·
~ Qual a sua cidade? · ' ' L • , 1 • · , • '. • :· • • . : · : ~· , • -: o K -. · I
· .: . · . . ·. ~-. ·:: . · · :- · Cancelar 1
.. · . . ~ . . .. . . . . . . . '
,,,, . . . . ~
•' ....
. '.
.. . . ,. ,
...
·' - . .. . . ·.,
Fig. 17 - Exemplo de lnputBox
Fun~êío MsgBox
MsgBox é a forma mais fácil e rápida de se comunicar com o
usuário. Além disso, ela também pode receber entradas através de
cliques em seus botões que, por sinal, é um recurso que ainda não
usamos.
Observemos sua sintaxe:
,, MsgBox {Prompt, [Buttons], [Title], [HelpFile], [Context]) As
VbMsgBoxResult
:> Prompt - É a mensagem a ser exibida na caixa de
mensagem.
:> Buttons - Aqui, temos a grande porção de configuração
de uma MsgBox. A configuração "Buttons" pode ser divi-
dida em botões, comunicação visual e botões padrão.
Quanto aos botões, temos as seguintes constantes:
:> vbOkOnly - Exibe apenas o botão OK.
:> vbOkCancel - Exibe os botões OK e Cancelar.
-
---
Linguagem de Programação 35
~ vbAbortRetrylgnore - Exibe os botões Anular,Repe-
tir e Ignorar.
~ vbYesNoCancel - Exibe os botões Sim, Não e Cancelar.
~ vbYesNo · Exibe os botões Sim e Não.
~ vbRetryCancel - Exibe os botões Repetir e Cancelar.
M. oflE el .~ .,. · ~.J., _.~ , . ,,,...., . 1 ., ~ ICIOS IC · · , · "" >" • · · · · " ~
Exemplo de Botões utiizando Caixa de mensagens Msç8ox ·,~ Exemplo de Botões utilizando C~ de mensagens MsgBox
Microsoft Excel · ': ·. ,-, . ~',1-, . ,.-.-. • '. :õ i· EI Microsoft Excel · ~ -. ·· .. r; . ç, 13
· Exemplo de Botões utilizando Caixa de mensagens MsgBox .
' 1 í-.. 8nufãr·-··11 . ' flepetir -1.: !gnoia, . 1 : '
.!_ Exemplo de Botões utiliÍando Caixa de mensageN MsgBox
\ · . ·. ,. .
·;· . '!f .... ·--S,iiit! Não j · Cancelar l .
Mic1osofl Excel : · . · · · . ·::,. '. -· '.•:.: -;,.\ _:_ · .. :' li Mic101ofl Excel · · : · ·· +> ·,- Ei
; Exemplo de Botões utilizando Caixa de mensagens MsgBox :/Exemplo de Botões utmando Caoca de mensagens MsgBox
. ' . - .
. .. .. l r---·------~,
l i / '' · l.: .. . 6. ~P.f::l_r.._ __ ..)' . Cancelar .
' . .· . ·: . ..
Fig. 18 - Exemplo de botões em uma MsgBox
Como vamos adicionar outras constantes no argumento Buttons
da MsgBox, devemos unir as constantes pelo operador lógico Or.
Precisamos tomar bastante cuidado para não colocarmos constantes
do mesmo tipo juntas, como, por exemplo, duas constantes de con-
figuração de botões.
Quanto à comunicação visual, temos as seguintes constantes:
~ vbCritical · Exibe o icone de mensagem critica.
:> vbQuestion · Exibe o icone de alerta.
:> vbExclamation · Exibe o icone de mensagem de alerta.
:> vblnformation - Exibe o icone de mensagem de infor-
mação.
l .
l
!
1
1
'
36 Desenvolvendo Aplicações Poderosas com Excel e VBA
Microsoft Excel 13
•' ..
: '
"-··· ' Ir- "OKº'·--11 l· ............................. )
•'
., • !1 • l /"~
'• \ :) .. :· .:.. :~
• ,
• \ : f
Mic,osofl Excel 13
' ~ • "j ( , <: '., •,, [c::ºc:JI , / ' : ;j
Mic1osofl Excel Et
Microsoft Excel · ··· EI
' .
t;KD ~ ~ É xemplo-~e.ª otões de Co!rurM~~ão Visual :·
J . •·· .· • ..• ····•· , i[::q[:JI . L , . , i
~~J- .; .. i, , ~: • •.,. . • . ' ~.
Fig. 19 - Exemplo de Comunkação Visual em uma MsgBox
Quanto ao botão padrão, temos as seguintes constantes:
= vbDefaultButton1 - Toma o primeiro botão como padrão.
= vbDefaultButton2 - Toma o segundo botão como padrão.
= vbDefaultButton3 - Toma o terceiro botão como padrão.
= vbDefaultButton4 • Torna o quarto botão como padrão.
O botão padrão deixa com o foco o botão escolhido. Você pode
estar estranhando a existência de vbDefaultButton4, sendo que,
até agora, trabalhamos com no máximo três botões. A explicação se
dá por podermos adicionar um botão de ajuda, colocando a constan-
te vbMsgBoxHelpButton junto às constantes de configurações.
Os outros parâmetros da função já foram vistos na função
lnputBox e possuem as mesmas funções.
O retorno de uma função MsgBox é do tipo VbMsgBoxResult e
pode ser também analisado. A enumeração VbMsgBoxResult é com-
posta por:
Enurn VbMsgBoxResult
vbOK = 1
vbCancel = 2
vbAbort = 3
vbRetry = 4
vbignore =. 5
vbYes = 6
vbNo = 7
End Enum
r:r::d
Linguagem de Programação 3 7
:_.-;;.--
vamos pegar um exemplo para deixar mais claro como pode-
mos utilizar uma msgbox para recebermos respostas do usuário.
public sub Mensagem()
oim Resp As VbMsgBoxResult
Resp = MsgBox ("Que botão você vai clicar?" , vbYesNoCancel Or
vbQUestion)
If Resp = vbYes Then
MsgBox "Você clicou em Sim! ! ! 11
Elseif Resp = vbNo Then
MsgBox "Você clicou em Não!!!"
Else
MsgBox "Você clicou em Cancelar! ! ! •
End If
End Sub
Detalhe: Declarei a variável Resp como vbMsgBoxResult ape-
nas para enfatizar as respostas, o que não é necessário. Entretanto,
se você fizer como o meu exemplo, quando for analisar o resultado
de Resp, vai receber uma ajuda interativa do VB com todas as
constantes enumeradas.
f uncões Internas
.a
As funções internas são funções que servem para auxiliar em cálcu-
los e outras necessidades comuns no trato de variáveis e valores
numéricos e alfanuméricos.
Vejamos as principais funções numéricas:
= Abs - Encontra o valor absoluto de um número.
= Atn - Encontra o arco tangente.
= Cos - Encontra o cosseno.
= Exp - Eleva a constante matemática "e" (2,718 aprox)
a uma potência dada.
= Fix - Retorna a parte inteira de um número.
:> Hex - Retorna o valor hexadecimal equivalente.
= lnt - Encontra o valor inteiro de um número.
3 8 Desenvolvendo Aplicações Poderosas com Excel e VBA
:> Log . Encontra o loga.rit_mo na base 1 O de um número.
:> Rnd _ Gera um número aleatório.
:> Sgn - Retorna o sinal de um número.
:> Sin - Retorna o seno.
:> Sqr - Retorna a raiz quadrada de um número.
:> Tan - Retorna a tangente.
Vamos elaborar um exemplo que utiliza algumas das funções
numéricas. Esse exemplo retorna o resultado de uma conta de divi-
são e calcula o seu resto sem usar o operador MOD ( que seria a
forma mais correta). Vamos a ele:
Public Sub Div()
) Dim Dividendo, Divisor, Resultado, Resto As Integer
Dividendo = InputBox( "Por favor, informe o valor do dividendo")
Divisor= InputBox{"Por favor, informe o valor do divisor")
Resultado= Int{Dividendo / Divisor)
Resto= Dividendo - Divisor* Resultado
MsgBox •o resultado da divisão " & Dividendo & • /" & Divisor &
"=" & Resultado
MsgBox •o resto da divisão • & Dividendo & "/" & Divisor & • =" & Resto
End Sub
Esse exemplo é uma pequena amostra do que podemos fazer
com as funções numéricas da programação Basic.
Vejamos as principais funções alfanuméricas:
:> Ase - Retorna o código do caractere correspondente à
primeira letra na cadeia. ·
lnStr - Retorna a posição da primeira ocorrência de
uma cadeia dentro de outra.
lnStrRev - Retorna a posição da última ocorrência de
uma cadeia dentro de outra.
LCase - Converte a cadeia de caracteres em minúscula.
Left - Encontra ou remove um número especifico de
caracteres do inicio de uma cadeia.
. uagem de Programação 3 9
~~-------------------__::....:._
:) Len · Fornece o comprimento de uma cadeia de
caracteres.
LTrim - Remove os espaços do inicio de uma cadeia de
caracteres.
~ Mid · Encontra ou remove caracteres de uma cadeia.
~ Right · Encontra ou remove um número especifico de
caracteres do fim de uma cadeia.
RTrim - Remove os espaços do fim de uma cadeia de
caracteres.
Str · Retorna a cadeia de caracteres equivalente ao
número.
String - Retorna a repetição de uma cadeia de
caracteres idênticos.
~ StrReverse · Inverte uma cadeia de caracteres.
l
1
1
' 1
j '\
1 1
'ti
1
1 I'
1
1 !
1 1
1 \
l 1
1
1 1
l
1
.\
I;
~
= Trim - Remove os espaços do início e do fim de uma 1 ' •
cadeia de caracteres. 1 1 j
= UCase · Converte uma cadeia de caracteres para 1
1 1
maiúscula. 1
Na maioria dessas funções, o uso é feito inserindo a cadeia
diretamente dentro dos parênteses da função, como, por exem-
plo, para transformar "teste" em maiúscula, fazemos
UCase("teste"). Entretanto, nem todas as funções possuem esse
funcionamento simples, necessitando de uma explicação mais de-
talhada. Vamos vê-las agora.
= lnStr - Sua sintaxe é lnStr(<<inicio>>,<<cadeia1 >>,
<<cadeia2>>), onde o retorno da função será a posi-
ção em que houver a primeira ocorrência da < <ca-
deia2> > dentro de <<cadeia1 >>, a partir de <<ini-
cio>>. Caso não encontre a cadeia, retorna -1.
Mid • Sua sintaxe é Mid(<<cadeia>>, <<inicio>>,
<<comprimento>>), onde o retorno da função é uma
cadeia encontrada em <<cadeia>> a partir de <<ini-
cio>> e tamanho de <<comprimento>> caracteres.
String. Sua sintaxe é String(<<caractere>>, <<n ve-
zes>>), onde o retorno da função é umacadeia < < n
vezes>> repetindo <<caractere>>.
1
i
1
\
1
l
40 Desenvolvendo Aplicações Poderosas com Excel e VBA
No exemplo que segue, é so!icitada a d!g~tação de alguma
palavra e, através do uso das funçoes alfa~umencas, conver1:emos
essa cadeia para a primeira letra em ma1uscula e as dema1s em
minúscula.
Public Sub Mm()
oim Entrada, PrimeiraLetra, OutrasLetras, Saida As String
Dim NLetras As Byte
Entrada = InputBox (•Por favor, digite alguma palavra 11 )
NLetras = Len(Entrada)
PrimeiraLetra = Mid(Entrada, 1, 1)
OutrasLetras = Mid(Entrada, 2, NLetras - 1)
Saida = UCase(PrimeiraLetra) & LCase(OutrasLetras)
MsgBox "A palavra convertida é 11 & Saida
End Sub
Nesse exemplo, utilizando a função Mid, separamos a primei-
ra letra e a convertemos para maiúscula. Separamos as outras letras
pegando a partir do 2° caractere o tamanho da cadeia -1, já que
tiramos a primeira letra e a convertemos em minúscula. Por fim,
concatenamos as duas cadeias e as exibimos ao usuário.
No próximo exemplo, temos a validação da digitação de um
email. Este é um exemplo bem completo e, por isso, um pouco mais
extenso.
Public Sub Email ()
Dim Email, Domínio, Desc, Nac As String
Dim Posini, PosFim, Tamanho As Byte
Email= InputBox("Por favor, digite o seu email")
•verificando a posição do arroba pelo início e pelo fim da
'cadeia
Posrni = InStr(l, Email, •@•)
PosFim = InStrRev(Email, •@•)
Tamanho = Len ( Emai 1)
'verificando a existência do@, e se não está no início do
'email
'também verificando se existe apenas um @
If Posini < 2 Or Posini <> PosFim Then
MsgBox "Formato de email não válido•
Else
'capturando o que está depois do@, ou seja, o domínio do
· 'email
•
em de Programação 4 1 ~
!
oominio = Mid(Ernail, Posini + 1, Tamanho - Posini)
posini = InStr(l, Domínio, •.•)
posFim = InStrRev(Dominio , •.•)
Tamanho = Len (Domínio}
If Posini < 2 Then
MsgBox "Formato de email não válido•
Elseif Posini = PosFim Then
Else
'deve haver apenas duas ou três letras depois do
•único ponto
Nac = Mid(Dominio, Posini + 1, Tamanho - Posini)
If Len(Nac) = 2 Or Len(Nac) = 3 Then
MsgBox ·Este é um formato de email válido•
Else
MsgBox •Formato de email -não válido•
End If
'deve ter um gov, com ou algo·parecido entre os
'dois pontos
Desc = Mid(Dominio, Posini + 1, Tamanho - PosFim + 1)
.,.,. .. ·· ~Nac, = Mid ( Dominio, PosFim + 1, Tamanho - PosFim)
/ '' If Len (Desc) = 3 And Len (Nac) = 2 Then
/ MsgBox "Este é um formato de email válido•
Else • t
MsgBox •Formato de email não válido•
End If
End If
'
, End If
End Sub ·
Vejamos as principais funções de Data/Hora:
:> Date - Retorná a data do relógio do sistema.
:> DataAdd - Adiciona um intervalo especifico a uma data.
:> DateDiff - Subtrai um intervalo especifico de uma data.
:> Day - Informa qual dia uma cadeia representa.
:> Hour - lnf orma quantas horas uma cadeia representa.
:> Minute - Informa quantos minutos uma cadeia representa.
:> Month - Informa qual mês uma cadeia representa.
:> Now - Retorna data e horário correntes.
:> Second . Informa quantos segundos uma cadeia
representa.
:> Time . Retorna o horário do relógio do sistema.
' .'
'
'
'
1
i
1
1
l
1
j 1
t\l
. 'I
' 1
1 \' ' l
' 1
1 i\ i lj
\ 1\
., li
1 1
1 i;
1 \
1 :
1 '
: 1 '.
' .
4Z Desenvolvendo Aplicações Poderosas com Excel e VBA
:, weekday - Informa qual dia da semana uma cadeia
representa.
:> Year - Informa qual ano uma cadeia representa.
Vejamos um exemplo da função DateDiff:
Public Sub Idade ()
Dim DN As Date, Idade As Double
DN = InputBox("Por favor, qual a sua data de nascimento?")
Idade = DateDiff ( "YYYY", DN, Date)
MsgBox "Sua idade é" & Idade
End Sub
O primeiro argumento dessa função é o tipo de retorno da
função. São eles:
:> yyyy - Ano.
!) q - Bimestre.
!) m - Mês. BIBLt<: ~ '~C.11\ F,.. ~··· 1 .~·, !) y - Dia do ano. . ' . . .
. t--··c· : 1
·.J , '
. '
!) d - Dia. F,;, (. :' ... ,.
!) w- Fim de semana. [)f." '' . ' :. '\14,, ú c ;..A (: :·., : ;,,,~
!) ww - Semana do ano.
'
'
,··
!) h - Hora.
' ·~
.~ ... --
•'JO!e,,._ __ .. - ·
!) n - Minuto.
!) s - Segundo.
Além dessas funções, existem muitas outras.As que foram apre-
sentadas aqui são as mais comuns. Conforme houver necessidade,
recomendo que consulte a ajuda do Visual Basic for Applications,
contida na instalação completa do Microsoft Office.
funcões
.a
Assim como as macros do Excel são vistas como sub-rotinas pelo
ambiente de programação do VBA, as funções são vistas como
f unctions dentro dos códigos.
---
r -
m d .. e-:..:..P_ro-=-g:..,_ra_m_a_:,ç_ao ______________ _:4....:3:_ ~
A grande diferença entre uma função e uma sub-rotina é que a
ão pode retor~a~ um valor. Alé!11 disso, podemos acessar as funções
funÇ criarmos no cóchgo VBA a traves do editor de funções do Microsoft
que el Vejamos um exemplo. Da mesma forma que estávamos fazendo
fXC as· macros, insira o seguinte código dentro de um módulo.
corn
pu1,1ic FUnction Tensao (Resistencia As Integer, Corrente As Integer)
AS 1nteger
Tensao = Resistencia * Corrente
snd Function
Perceba as diferenças: incluimos atributos a serem passados
pela função e esta retorna um valor inteiro, calculado dentro dela.
Em qualquer ponto do código podemos chamar a função, como as
que vimos anteriormente. Por exemplo:
MsgBox Tensa o ( 1 O , 1 O )
Vai retornar o valor 100. Para acessarmos essa função doam-
biente de planilha do Excel, clique em Inserir I Função. Observe que
a categoria Definida pelo Usuário aparece.
Cola fu - ...... .,. 1;..,., -.. , i'';..•, .,.: •• ,,, . _ ,. •• ~ ,,,_ -·~, '·!"< ü , -·:~-~· ~~ r nçao .... -.-..•,12''_-.'i/!,~'.!(-·:. ~-.,, ... t . .,._;-.,.., .. --~·-.... · . .... .. "' " ... , .. ,a:.:11
··~ateQOria da função:
Todas
· Financera
Data e hora
M&emática e trigonométrica
Estatística
Procura e referência
Banco de dados
: Texto
:: LÓQiea
Informa ões
··. ·: , :
:-. : ' . .. .
l§J°: ·_~:. ·.: . : :<' •' ..
V
~ ..
r~
1
tio me da função:
. ' -: . ~ .
• 1 • ' • ; : • ·: • ·~· • ~ •• ,:, • .. ")! • •
. .. . . , '. .. , .. :.1 ·:· OK
...
,._ 1
' ·: :1
' 1
' .< '!.. .
1 ~ ~-; Cancelar · ! ·
Fig. 20 - Função definida pelo usuário
t h 1 :,
1 1
1
1
1
1
l
1
1
'
ti
1
1
1 !
1
,1 '
" 1
li 1
11
11
1
1
1
l1
:!
~
l-i, 1
\1 I! '
1
,1
1
1
t .
1
1 1
li
\1
1,
'I 1,
1!
1
44 Desenvolvendo Aplicações Poderosas com Excel e VBA
Escolhendo a nossa função Tensao, temos com ela o mesmo
tratamento que uma função do próprio Excel.
Com isso, encerramos o estudo da linguagem de programação
Basic para o ambiente VBA. Este é o primeiro passo para a criação
de aplicações mais potentes dentro do Excel. Tudo o que veremos
daqui para frente vai depender dos conceitos apresentados neste
capitulo. Portanto, sugiro que você conheça bem esse conteúdo an-
tes de seguir adiante no livro.
Nos próximos capitulas, vamos estudar alguns objetos especi-
ficas do Microsoft Excel. São eles: Application, WorkBooks,
WorkSheets e Range. Com esses objetos, poderemos atuar de uma
forma mais consistente dentro das planilhas eletrônicas.
,,r·.
4
Objeto fipplication
~ ..
..
1
1 1
\
- 4 -
Objeto fipplication
o objeto Application representa o próprio Excel e seus objetos deri-
vados. Através dele, podemos configurar o Excel em termos de
visualização, execuções e outras funcionalidades.
O objeto Application possui uma gama muito grande de pro-
priedades e métodos e aqui veremosos principais.
Propriedade DisplayAlerts
Habilita ou desabilita a exibição de mensagens de aviso como res-
posta de várias ações no Excel. True habilita as mensagens e False
as desabilita. Vamos a um exemplo:
Sub ExcluirPlanilha { )
Application.DisplayAlerts = False
Application. Worksheets ( "plan2 ") . Delete
MsgBox "A planilha foi excluída sem mensagem alguma . . . "
Application.DisplayAlerts = True
Application.Worksheets("plan3") .Delete
MsgBox "A planilha foi excluída com uma mensagem de aviso ... •
End Sub
Detalhe: Só funciona para exclusão de planilhas via código.
Propriedade DisplayCommentlndicator
Controla a exibição de comentários dentro das células de uma planilha.
Aqui, temos um exemplo com as três possibilidades.
·,,
-!
li
i
f 1
t 1 1
t l
1 1
n ~ i
48 Desenvolvendo Aplicações Poderosas com Excel e VBA
Public Sub Comentario()
Planl.Range("al") .AddComment "Este é um comentário de exemplos"
Application.DisplayCommentindicator = xlCommentAndindicator
MsgBox "Exibindo comentário e indicador"
Planl.Range("al") . ClearComments
Planl.Range("al") .AddComment "Este é um comentário de exemplos•
Application.DisplayCommentindicator = xlCommentindicatorOnly
MsgBox "Exibindo somente o indicador"
Planl.Range("al").ClearComments
Planl.Range("aP) .AddComment "Este é um comentário de exemplos•
Application.DisplayCommentindicator = xlNoindicator
MsgBox "Não exibe nem comentário, nem indicador, • +
•mas ele existe"
Planl . Range("al").ClearComments
End Sub
Propriedade DisplayFormulaBar
Exibe ou oculta a barra de fórmulas do Excel.
Public Sub BarraFormula()
Application . DisplayFormulaBar = False
MsgBox "A barra de fórmulas foi desabilitada"
Application.DisplayFormulaBar = True
MsgBox "A barra de fórmulas foi habilitada"
End Sub
Propriedade DisplayFullScreen
Exibe o Excel em tela cheia, diferente de maximizar a aplicação.
Public Sub TelaCheia()
Application.DisplayFullScreen = True
MsgBox "A tela está no modo FullScreen•
Application.DisplayFullScre~n = False
MsgBox "A tela voltou ao modo normal"
End Sub
<
--
~:._A...:..p..:....pl_ic_a~ti_on~---------------~4~9
propriedade EnablczRnlmations
Essa propriedade ativa animação quand . . ,
colunas de u · 0 msenmos ou exclu1mos li-
nhas ou ma Plamlha. Podemos ter os seguintes valores:
Application.EnableAnimations = True
Application . EnableAnimations = False
Propriedade EnablczfiutoComplete
Habilit~ ou desabilita o recurso de AutoComplementar em textos 'á
conhec1dos. J
Application.EnableAutoCornplete = True
Application.EnableAutoCornplete = False
Propriedade EnableSound
Habilita ou desabilita a emissão do beep dentro do Excel.
Application . EnableSound = True
Application . EnableSound = False
Mvtodo OnKczy
O método OnKey é o responsável pela atribuição de teclas de atalho
para procedimentos especificas. Esse método é sempre acionado
para designar teclas de atalho no momento de criação de uma macro,
quando configuramos essa opção.
Sua sintaxe é:
Application.OnKey(Tecla, Prodecirnento)
Tecla é uma string que mostra uma tecla ou combinação de
teclas que servirão de atalho para um determinado procedimento Sub.
Vejamos um exemplo. O atalho de teclado Ctrl + A exibe ~. c~ixa
de diálogo Abrir dentro de uma pasta de trabalho. Vamos desab1hta-la:
Application . OnKey ""a", " "
1 .,,
: i
\ ri
i 1
'fl
1 •I l '1
!I
1 'j
' 1
t
{ 1
1 1
1 '
1 i
' 1
1 :
• 1
l !
1
~ 1
50 Desenvolvena·. Aplicações Poderosas com Excel e VBA
-------------
Para fazer com que o atalho voh . ., à sua função normal, faze-
mos o seguinte:
Application .OnKey •Aa•
O argumento Key pode assumir qualquer L'lmbinação de te-
clas. Para tanto, designamos as letras como atalho direto e temos
teclas especiais para designar combinações ou outrã: teclas não-
diretas.
Vejamos a lista de teclas especiais para o Microsoft E>.':el. As
teclas combinadas com Shift, Ctrl e Alt usam os seguintes pref·<os:
~ .' • t Tecla . . Código . . . ·,
Shift + (sinal de mais)
Ctrl " ( ci ramflexo)
Alt % (sinal de porcentagem)
Backspace (retomo) {BACKSPACE} ou {BS}
Break (interrupção) {BREAK}
Caps Lock (letras maiúsculas) {CAPSLOCK}
Clear (limpar) {CLEAR}
Delete ou Del (apagar) {DELETE} ou {DEL}
Do'M'l Arrow (seta para baixo) {DOWN}
End (final) {END}
Enter (teclado numérico) {ENTER}
Enter ( entrar) - (til)
Esc (sair) {ESCAPE} ou {ESC}
Help (ajuda) {HELP}
Home (ponto inicial) {HOME}
lns (inserir) {INSERT}
Left Arrow (seta para esquerda) {LEFT}
Num Lock (bloqueio numérico) {NLWtLOCK}
Page Down (página abaixo) {PGDN}
Page Up (página acima) {PGUP}
Return (retorno) {RETURN}
Right Arrow (seta para direita) {RIGHT}
Scroll Lock (bloqueio de rolagem) {SCROLLLOCK}
Tab (guia/tabulação) {TAB}
Up Arro-.·, (seta para cima) {UP}
F1 a F15 {F1} a {F15}
·-
;.t
Objeto Application 51
Esse método encerra o Microsoft Excel e dá os procedimentos co-
muns antes da finalização, com uma caixa de mensagem pergun-
tando se o usuário deseja salvar a aplicação. Sua sintaxe:
Application.Quit
-,
1
1
1 '
t
1 1 ,
• li
i
1
1 !,
1:
' ' !.
l
r. , ..
5
Objeto WorkBook
1
'
1
1
' 1 l 1
1 '
• '!
1 ·1
1 '
1
1 li
1 '
• 1
,;
; 1
' 1
i 1
J '
1 !
1
1:
1'
. I:
1
1
li
: !i
li
!I
li
p
--
1
\
- 5 •
Objeto WorkBook
Um objeto Workbook representa uma pasta de trabalho aberta.
Cada objeto Workbook é armazenado em uma coleção
Workbooks, que faz parte das coleções do objeto Application,
visto anteriormente.
Como um objeto Workbook representa uma pasta de traba-
lho, podemos acessá-lo como um indice da coleção Workbooks da
seguinte maneira: Workbooks( 1) ou pelo nome do arquivo
Workbooks("nome do arquivo").
Para perceber a diferença entre o objeto Application e o ob-
jeto Workbook, monte o seguinte código:
Public Sub Dif ()
MsgBoxApplication .Narne
MsgBox Workbooks(l) .Narne
End Sub
Perceba que o nome retornado pelo objeto Application é do
Microsoft Excel, que é a aplicação que está rodando, enquanto o
nome retornado pelo objeto Workbook é, caso você ainda não tenha
salvo a aplicação, Pasta 1.
Propriedade follName
Retorna o Path e o Name do objeto. Digamos que uma pasta cha-
mada Teste.xls fosse salva em C:\Meus Documentos,
Workbooks(l) .FullNarne
retornaria "C:\Meus Documentos\Teste.xls".
1 1
...
• _.._ • .. e. .. - - - •
..,
56 Desenvolvendo Aplicações Poderosas com Excet e VBA
Propriedade Path
Retorna O caminho onde está salva a pasta de trabalho desejada.
Workbooks(l).Path
retornaria ttc:\meus documentos", caso estivesse salva nesse
caminho.
Propriedade Saved
Indica se a pasta de trabalho já está salva ou não. Se essa proprieda-
de retornar True, é porque a pasta já foi salva.
Propriedade HasPassword
Verifica se a pasta de trabalho possui uma senha de acesso. Em caso
positivo, seu retorno é True.
Método flctlvate
Esse método torna uma pasta de trabalho ativa. Exemplo:
Workbooks(l) .Activate
Método flddTof avorites
Adiciona um atalho para a pasta de trabalho no menu Favoritos do
Windows.
Método Close
O método Close fecha a pasta de trabalho desejada. Close tem al·
guns parâmetros que, se omitidos, vão garantir que o funcionamento
da ação seja padrão Windows. O método vai verificar se a proprieda·
de Saved do objeto Workbook é True. Se for, fechará a pasta; caso
contrário, perguntará ao usuário se deseja salvar a pasta de trabalho.
Workbooks(l).Close
d
Objeto WorkBook 57
Mcítodo PrlntOat
imprime toda a pasta de trabalho desejada ou parte dela, se for
especificado.Sua sintaxe: '
workbooks(l) .PrintOut(From, To, Copies, Preview, ActivePrinter,
printToFile, Collate)
Serão impressas as páginas que estiverem no intervalo de From
até To, com um número total de cópias Copies. Se Preview for
ajustado para True, você obterá o recurso de visualização antes da
impressão. ActivePrinter designa o nome da impressora ativa, en-
quanto que PrintToFile solicita o nome de um arquivo para ser base
da impressão. Collate marcado como True intercala múltiplas cópias.
Mcítodo Save
Salva quaisquer mudanças na pasta de trabalho. No exemplo que
segue, vou dar uma amostra de coisas simples que podemos fazer
com o objeto Workbook. Esse é um procedimento que faz uma
análise de alguns detalhes da pasta de trabalho ativa e nos dá algu-
mas informações sobre ela e suas planilhas.
Public Sub Analise()
Dim WB As Workbook
Dim WS As Worksheet
Dim Quant As Byte
Dim Planilhas() As String
Dim Nome, Mensagem As String
Set WB = ActiveWorkbook
Nome = WB. Name
Quant = WB.Sheets.Count
ReDim Planilhas(! To Quant)
For i = 1 To Quant
Planilhas(i) = WB.Sheets(i) .Name
Next i
Mensagem = • Essa pasta de trabalho chama-se " & Nome & Chr ( 13 )
Mensagem= Mensagem & "Nela existem" & Quant & " planilhas" & Chr(13)
Mensagem= Mensagem & •seus nomes são:"
For i = 1 To Quant
Mensagem= Mensagem & Chr(13) & Planilhas(i)
Next i
MsgBoxMensagem, vbExclamation, ·Análise"
End Sub
58 Desenvolvendo Aplicações Poderosas com Excel e VBA
Eventos de om Workbook
Pela primeira vez mencionamos a palavra .Evento ~este livro. Um
evento é algo que acontece com um determmado obJeto e que pode
ser tratado. ou seja, de acordo com o evento que ocorrer, podemos
executar um bloco de códigos ou procedimento.
o objeto Workbook tem uma série de eventos que podem ser
tratados. Em termos de código, um evento nada mais é do que uma
sub. Para que possamos acessar os eventos de um Workbook dentro do
ambiente VBA, você deve dar um duplo clique em
EstaPasta_de_Trabalho, que está no Project Explorer, Logo acima das
planilhas. Assim, vai aparecer uma janela de código parecida com a do
módulo. Clicando na caixa de combinação situada no canto superior
esquerdo da janela (na qual está aparecendo a opção Geral), podere-
mos encontrar o objeto Workbook. Clicando nela, vamos receber:
~ Pastal - EstaPasla_de_trabalho (Código) .'· .. ', ··· :~~ ~ ·_-: .. -. ':'; ~ ... ··:,· . .' ' . l!!llill3
jwo1kbook ..:J . J 01,en
Private Sub Vorkbook Open()
,, 1 - .
.
,.
,.
, '
·,
. :;
·"\
·.
·'·
End Sub
flg. 21 - Eventos de um objeto Workbook
!r Àa abl ~
'\L] ~ -'
'1- '·- .
~ :,-.... -, .
:rP· @ ~
ifim ~ :
1··
i] ·.
...
\.
t .• ,
• ..
'-.·
;i'
•.'
< I{
,::
~ ,.
,.,
••'· r
·-.·
·~
.,.
•
Perceba que, na caixa de combinção da direita aparece o nome
do evento que está sendo codificado. Abrindo essa ~aixa você pode
ver o n d ' orne e todos os eventos que o objeto Workbook pode sofrer.
~ ··
Objeto WorkBook 59
Vamos dar uma olhada nos principais eventos de um objeto
workbook e o que eles podem fazer. .
Evcinto flctlvat,
Ocorre sempre que a pasta de trabalho se torna ativa. Isso pode
ocorrer de duas maneiras: após a pasta de trabalho ser aberta ou
após alternarmos a pasta de trabalho com outra pasta através do
menu Janela, ou da barra de tarefas (caso você esteja trabalhando
com o Office 2000).
Para testar, inclua o seguinte código no evento Activate, da
pasta de trabalho, e tente alternar a janela ou reabrir o arquivo.
Private Sub Workbook_Activate(}
Dim Nome As String
Nome= ThisWorkbook .Name
MsgBox ·A pasta de trabalho• & Nome & _
• acaba de tornar-se ativa"
End Sub
Evento BeforeClose
Ocorre antes que a pasta de trabalho seja fechada. O evento
BeforeClose possui um argumento: Cancel As Boolean. Este argu-
mento serve para cancelarmos o evento caso achemos necessário.
Para fazermos isso, simplesmente dizemos que Cancel = True.
Para testar, podemos elaborar a nossa própria mensagem de
saída da pasta de trabalho. Na pasta de trabalho, crie o código que
segue e salve-a com um nome qualquer. Feche-a e veja a mensa-
gem. Em seguida, reabra o arquivo, faça algumas alterações de
texto e torne a fechar. Isso pode ser bem interessante.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim WS As Workbook
Dim Resp As vbMsgBoxResult
Set ws = Thisworkbook
If WS.Saved = False Then
i !
1
: 1
1 '
1 1 !!
1 •.I
j 11
1 1
1 .1
1 ,,
1 1
; 1
J
1
.1
. !
!
. 1
1
'. 1
1
! 1
1 '
1 :
• 1
1 1
1
1
1
1
.1
I'
11
11
; /1 ! '
. 11
1,
/'
' l!
1
1
1
60 Desenvolvendo Aplicações Poderosas com Ex l ~
ws . saved = True
Resp = MsgBox(•Gostaria de salvar as alterações• &
• nesta pasta de trabalho?•, vbYesNoCancel O ·-
Else
. 1 1 · r vbQuest1on, •sa var Persona izada• )
If resp = vbYes Then
ws . save
MsgBox • Até mais•, vbExclamation
Elseif resp = vbCancel Then
Cancel = True
End If
MsgBox ·Até mais", vbExclamation
End If
End Sub
Evento BeforePrlnt
Esse evento ocorre antes de uma planilha ou parte dela ser impres-
sa. Ele também possui um argumento Cancel como boolean, caso
deseje cancelar o evento.
Vejamos um exemplo:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim Resp As VbMsgBoxResult
Resp = MsgBox(•Tem certeza que deseja continuar com• &
• esse processo de impressão?", vbQuestion + vbYesNo)
If Resp = vbNo Then
Cancel = True
End If
End Sub
Evento Deactivate
Esse evento é o oposto do Activate. Ocorre sempre que a planilha é
dasativada. Como exemplo, podemos colocar uma mensagem antes
de fechar a pasta de trabalho:
Private SubWorkbook_Deactivate()
MsgBox ·A planilha está sendo desativada", vbinformation
End Sub
..
,
1
>
Objeto WorkBook 61
Evento NewSheet
ocorre quando uma nova planilha é criada ou inserida dentro de uma
pasta de trabalho.
Esse evento tem como argumento uma variável Sh, do tipo
Object, que vai ser uma referência para a planilha criada e pode ser
utilizada dentro do código como um elemento Worksheet.
No evento que segue, colocamos em uma mensagem o nome
da planilha que está sendo criada, movemos esta para o final da lista
de planilhas e solicitamos que o usuário digite um novo nome.
Private Sub Workbook_NewSheet (ByVal Sh As Object)
Dim Resp As String
MsgBox •o nome da nova planilha é• & Sh.Name
Sh.Move, after:=ThisWorkbook.Worksheets _
(ThisWorkbook.Worksheets.Count)
Resp = InputBox( ·Qual o novo nome da planilha a ser criada?•)
Sh.Name = Resp
End Sub
Evento Open
Ocorre quando a pasta de trabalho é aberta. Esse é o evento padrão
de Workbook, ou seja, quando selecionamos o objeto em sua janela
de códigos, é esse evento que se torna ativo. Vejamos um simples
exemplo:
Private SubWorkbook_Open()
MsgBox ·A pasta de trabalho• & ThisWorkbook.Name & _
• acaba de ser aberta.•, vbExclamation
End Sub
Para poder ver o exemplo citado em funcionamento, você deve
salvar a pasta de trabalho, fechá-la e tornar a abri-la.
Evento SheetActivate
Ocorre quando qualquer uma das planilhas contidas na coleção
Worksheets da pasta de trabalho for ativada. Esse evento também
•
'. i
' 1
1 '
• 1
1 1
1 1
1
1
1
• 1
Desenvolvendo Aplicações Poderosas com ExceL 1
~'=--z______ ~ .J
possui o argumento Sh, ~u~ representa a planilha que acaba de ser ~
ativada. Mais um exemp 0 • ~
k sheetActivate (ByVal Sh As Object)
Private Sub workb00 -
• lanilha • & Sh.Name & -
MsgBox AdP er ativada.", vbinformation
11 acaba e s
End Sub
Os outros eventos são relaciona~~s . às plani,lh~s e serãovistos
no próximo capitulo com o escopo umtano da propna planilha, mas
que pode ser expandido facilmente para o escopo global. Vejamos
quais são eles:
Evcznto Sh'2cztBczforczDooblczClick
ocorre no momento em que é dado duplo clique em alguma planilha,
antes da ação padrão de duplo clique.
Evcznto ShczcztBczforfZRightClick
Acontece no momento em que o botão direito é clicado em alguma
planilha, antes da ação padrão de clique com o botão direito.
Evento ShecitCalcolate
Ocorre após qualquer uma das planilhas ser recalculada ou qualquer
mudança de dados ser feita em algum gráfico.
Evcznto Sh'2cztChangv
Dá-se quando é executado algum tipo de alteração em qualquer
célula das planilhas.
Evcznto ShtttActivate
Sucede-se quando uma planilha é desativada.
Evcznto ShvcztSelvctlonChangc,
Ocorre quando muda l - , . a se eçao de celulas em qualquer plamlha.
,,·
.I
6
Objeto WorkSheet .
..f
~
• 1
: 1
' i
!
!
! 1
1
!
1
' .
1
1
~ 1
1 i
I'
1
1
'
: 1
' 1'
: :: 1
p
'
- 6 -
Objeto WorkSheet
O objeto Worksheet representa uma planilha especificada da cole-
ção Worksheets. Existem várias propriedades e métodos que são
aplicados aos objetos Worksheets. Vejamos alguns deles:
Propriwade CodeName
Retorna o nome de código de uma planilha, que substitui a declaração
Worksheets(index). Podemos usar:
Planl.Cells(l, 1) .Value = 10
ao invés de:
Worksheets(l) .Cells(l, 1) .Value = 10
Proprhzdade Name
Name vai retornar o nome de uma planilha. Além de retornar, essa
propriedade pode ser usada para trocar o nome de uma planilha. O
único cuidado a ser tomado aqui é o limite de 32 caracteres para o
nome da planilha, além de não poder usar alguns caracteres especi-
ais, tais como ": ", "/ ", "?" e "*".
Propriedade Scrollfirea
Esta propriedade limita a área de rolagem e atuação de uma planilha.
Por exemplo:
ActiveSheet.ScrollArea = ftAl:020•
nos permite trabalhar apenas no intervalo delimitado.
1
I'
'.
f
·-,·
r,
: .
(,
..
..
..
1
1
1
1
.!
Í ,,
!I ,,
7
66 Desenvolvendo Aplicações Poderosas com Excel e VBA
Propriedade Visible
Controla a visibilidade de uma planilha. Podemos usar três valores:
xlSheetHidden, que vai deixar a planilha oculta; xlSheetVisible
que vai deixá-la visível novamente; e xlSheetVeryHidden, que só
vai permitir tornar uma planilha visivel por código, ou seja, o usuá-
rio não poderá solicitar a exibição da planilha especifica.
Mcítodo flctivate
O método Activate torna uma planilha da coleção Worksheets ati-
va. Vejamos sua sintaxe:
Worksheets(l) .Activate
No exemplo acima, a primeira Worksheet da lista de planilhas
será ativada.
Método Copy
O método Copy serve para criar uma cópia fiel de uma determinada
planilha, em uma posição especifica na coleção Worksheets. Veja-
mos a sua sintaxe:
ActiveSheet.CopyAfter : =Worksheets(Worksheets.count)
No exemplo acima, criamos uma cópia fiel da planilha ativa
como- a última da coleção Worksheets.
Método Delete
O método Delete exclui uma planilha da coleção Worksheets. No exemplo
abaixo, excluimos a última planilha de uma pasta de trabalho:
Worksheets(worksheets.count).Delete
Método Move
Move uma planilha. Sua sintaxe é equivalente ao método Copy, an·
teriormente citado.
i
;
-
, L··--·· ·r
~
, .. , se ·rst
Objeto WorkSheet 67
Mcítodo Select
o método Select seleciona uma planilha. A vantagem desse método
sobre o Activate é que ele serve para selecionar várias planilhas ao
mesmo tempo (poderia ser com o propósito de excluí-las).
Eventos de um Worksheet
A maioria dos eventos de um Workbook, como foi visto, afetam
globalmente uma aplicação. Os eventos relacionados a um objeto
Worksheet afetam apenas a planilha onde o evento ocorre. Vamos
à lista:
Evento flctivate
Ocorre quando uma planilha é ativada. Vejamos um exemplo:
Private Sub Worksheet_Activate()
MsgBox "A planilha" & Me.Name & _
- acaba de ser ativada .• , vbExclamation
End Sub
Observe o uso da cláusula Me. Ela representa o objeto que
está em análise, nesse caso, a planilha que sofre o evento. Através
da cláusula Me, temos acesso a todas as propriedades e métodos da
planilha.
Evento BeforeDoobleClick
Acontece quando há um duplo clique na planilha, antes que a ação
padrão seja executada.
Esse evento possui dois argumentos: o argumento Cancel,
já estudado em outros eventos, que proporciona a possibilidade
de cancelá-lo. O outro parâmetro é Target, do tipo Range. Atra-
vés desse argumento, podemos saber qual célula recebeu o du-
plo clique e dar os devidos tratamentos ao evento. Vejamos um
exemplo:
Private SubWorksheet BeforeDoubleClick(ByVal Target
- -As Range, Cancel As Boolean)
r:nr;
--- - ...)
1 '.
:,
' ' l
,;;
t
•!
,,
,,
,· 1 ,.
1
68 Desenvolvendo Aplicações Poderosas com Excel e VBA
Dim Resp As Byte
MsgBox • A célula que recebeu o duplo clique é • & Target .Address
Resp = InputBox( •oigite o número da cor para pintar a célula:•)
Target.Interior.Colorindex = Resp
Cancel = True
End Sub
No exemplo anterior, trocamos a cor da célula que sofreu o
evento de duplo clique e, através de cancel = true, evitamos que
a ação padrão ocorra, a qual seria colocar a célula em modo de
edição.
Evcznto BczforczRlghtCllck
Esse evento ocorre quando há um duplo clique na planilha. Assim
como o evento BeforeDoubleClick, BeforeRightClick tem os dois
argumentos, Target e Cancel, usados para detectar a célula clicada
e cancelar o evento, respectivamente.
Vamos a um exemplo para complementar a idéia.
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range,_
Cancel As Boolean)
On Errar GoTo Trat
Trat:
Dim Resp As String
Resp = InputBox(•Qual o padrão que você gostaria• &
•ae adicionar a essa célula?")
Target.Interior . Pattern = Resp
Cancel = True
End Sub
Nesse exemplo, trocamos o padrão de preenchimento de uma
célula que recebe o clique com o botão direito, de acordo com a
vontade do usuário. Na Figura 22, vemos todos os valores passiveis.
Um detalhe interessante é o uso de On Error, que faz um
tratamento caso algum erro ocorra. Em resposta ao erro, On Error
faz um desvio da aplicação para a rotina Trat, que evita o erro e
cancela o evento.
4
,,,
. i.11 íllllllll ..................................................................................................................... ___..~--..
1
.1
.,
'?' Objeto WorkSheet
J ~ arquivo· · ~ditar , E~blr . · [nserlr:.: Eorm
n~:-~ r.1 1 ~ -··[1· ~;·,1:· Jt :~ ! . l A;i~t'·-· "'~" -,-,,.~ .... ,.. r~]rto·" ·:~/11. N ..
. ·\ ,.. ,. ..~~i·-~'-· ,' - ,.··,-~ -.: ~.-,1 : •
D7
flg. 22 • Padrões a serem utilizados nas células
Evento Calcolate
69
Ocorre toda vez que um cálculo é executado em uma planilha, alte-
rando valores. Por exemplo, quando montamos uma fórmula e esta
executa um cálculo, alteramos os valores das células que são refe-
rências para fórmulas (a planilha não está em módulo de cálculo
automático) e pressionamos F9, fazendo o recálculo da planilha,
entre outros.
A seguir, temos um exemplo do uso do evento Calculate. An-
tes de implementar o código, crie a planilha que segue. Na coluna D,
existe uma fórmula que calcula os valores de entrada, menos os
valores de saida. Na célula 014, existe uma fórmula de soma das
células que estão acima dela, perfazendo o saldo anual.
70 Desenvolvendo ApHcações Poderosas com Excel e VBA
lª11:C!IM~~tl;11r&Jl:Tõn~di'I'~-
j~ B,rqulvo ,ditar E~ibir- Inserir E,ormatar Ferramentas tlados J,anela Aj!lda
1 D ~ -r.i l ~ ~ ~ 1 J'o ~~<1 11() .. C"·I~ 1: f. Ai:; z .
j A~i~_:_
..,. ___ . ~ .....
· I N s.l;::;-== mi~ ~ I ,10 I % ººº
C7 ··1 •l 2300
A 8 e . D E
1 Mês Ent1 ,1d,1s S,1id,1s Saldo
--
2 Janeiro R$ 2.000,00 R$ 1.500,00 R$ 500,00
------
3 Feve1eiro R$ 1.500,00 R$ 1.700,00 R$ (200,00)
4 Ma1ço R$ 2.200,00 R$ 2.000,00 R$ 200,00
5 Ab1il R$ 3.200,00 R$ 1.000,00 R$ 2.200,00
6 M,1io R$ 4.000,00 R$ 3.000,00 R$ 1.000,00
7 Junho R$ 1.200,00 R$ 2.300,00 R$ (1.100,00)
- -
8 Julho R$ 3.600,00 R$ 2.400,00 R$ 1.200,00
---
9 A<1osto R$ 3.200,00 R$ 1.100,00 R$ 2.100,00
- -
10 Setemb10 R$ 1.500,00 R$ 2.000 ,00 R$ (500,00)
-·
11 Outub10 R$ 2.400,00 R$ 1.350,00 R$ 1.050,00
----
12 Novemb10 R$ 2.200,00 R$ 2.500,00 R$ (300,00)
---·
13 Oezemb10 R$ 3.000,00 R$ 3.750,00 R$ (750 ,00;
---··
14 .
_J - .... \__ ---:
R$ 5.400 ,00 ,_
-- -
15 ,_
16
'
--
. -
- - -
- -
Fig. 23 - Planilha usada no exemplo do evento Calculate
Private SubWorksheet_Calculate()
Dirn Valor As Integer
Valor = Me. Range ( "dl4 •) . Value
If Valor< O Then
MsgBox • seu balanço anual está negativo•, vbCritical
Else
MsgBox "Seu balanço anual está positivo•, vbinforrnation
End If
End Sub
Evento Change
Ocorre quando uma das células da planilha teve o seu conteúdo alte-
rado pelo usuário ou por um agente externo. Vejamos um exemplo:
Private Sub Worksheet_Change (ByVal Target As Range)
On Errar GoTo Trat
:l
Objeto WorkSheet 7 1
Trat:
MsgBox · A célula que teve o seu conteúdo alterado foi• & _
Target.Address , vbinforrnation
MsgBox "O novo valor de• & Target.Address & •é• & -
Target.Value, vbinformation
Exit Sub
MsgBox •você deve ter alterado mais de uma célula ao• & -
• mesmo tempo•, vbCritical
End Sub
Perceba que, se você selecionar um conjunto de células e apa-
gar o seu conteúdo, Target. Value retorna um erro, pois só funciona
dessa forma quando temos apenas uma célula no Range seleciona-
do. Assim, somos desviados para a rotina de tratamento de erro,
que informa o que aconteceu.
Evento Deactivate
Este é o evento oposto ao evento Activate. É acionado quando
desativamos a planilha.
1 Evento SelectionChange
Este evento é o evento padrão de uma Worksheet. Ele ocorre toda
vez que um Range de células dentro de uma planilha é selecionado.
Através do parâmetro de retorno Target, temos acesso a todas as
células selecionadas no intervalo e podemos dar o tratamento que
desejarmos. Vamos a um exemplo:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "0 Range de células selecionado é• & Target.Address
If Target . Count = 1 Then
MsgBox •Nesse Range existe 1 célula"
Else
MsgBox "Nesse Range existem • & Target.Count & • células•
End If
End Sub
Esses são os sete eventos da coleção Worksheets, que são os
mais usados em uma pasta de trabalho. Lembremos que podemos
estendê-los ao objeto Workbook de forma global, pois tal objeto possui
os mesmos eventos detectados para qualquer planilha da aplicação.
7
Objeto Range
. 1
>
- 7 -
Objvto Range
O objeto Range é quem faz o trabalho pesado dentro do Excel. Esse
objeto representa uma célula, uma coluna, uma linha, um conjunto
de células, até todas as células de uma planilha; por isso, é tão
genérico e funcional.
No capitulo anterior, muitos eventos da coleção Worksheets
retornavam um argumento target do tipo Range, que tem o mesmo
valor do objeto tange que está sendo apresentado aqui.
Rczprczscznta~ão dez um Objeto Range
Um objeto Range pode ser representado de diversas formas. Pode ser:
Uma célula:
Range ( "Al")
Um intervalo de células:
Range ( "Bl: D4 •)
Uma intersecção de intervalos:
Range ( "Bl: D4 C2: E6 •)
Uma união de intervalos:
Range(·Bl:D4, C2:E6·)
Um objeto Range também pode ser representado pelas células
limites que o compõem, na seguinte sintaxe:
Range(celll, cell2)
Por exemplo, Range("A1:B2") é equivalente a
Range(Cells( 1, 1 ), Cells(2, 2)).
'
'
' 1
:1
' ~
·,
.
'' i
76 Desenvolvendo Aplicações Poderosas com Excel e VBA
Finalmente, também pode ser representado por um conjunto
de linhas ou colunas:
Range(Columns(l), Columns(3))
Propriedade Cells
A propriedade Cells é uma representante de todas as células de
dentro do Range. Através dela, podemos obter informações especi-
ficas a respeito de cada célula ou do conjunto como um todo.
Propriedades Colamn e Row
As propriedades Column e Row indicam a coluna e a linha, respecti-
vamente, que formam a base de um Range, ou seja, relativas à
célula do canto superior esquerdo.
Para testar, coloque o seguinte código no evento
SelectionChange de uma planilha:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "A célula base do Range está na coluna " & _
Target.Colwnn" e na linha" & Target.Row
End Sub
Propriedades Colamns e Rows
Essas duas propriedades agem como coleções, que armazenam
as informações de colunas e linhas de um Range. Vejamos um
exemplo:
Private SubWorksheet_SelectionChange(ByVal Target As Range)
Msgbox "Neste Range existem" & Target.Columns.Count & " coluna(s)"
Msgbox "Neste Range existem" & Target.Rows.Count & " linha(s) •
End Sub
"
--
· ·"' . . ~ ~
Objeto Range 77
propriedade flddress
Esta propriedade retorna o endereço de células do objeto Range em
questão.
Private SubWorksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Address(RowAbsolute:=False, _
ColumnAbsolute:=False)
End Sub
Nesse exemplo, poderíamos omitir os parâmetros RowAbsolute
e ColumnAbsolute; o resultado seria o mesmo endereço, mas em
referência absoluta (com os símbolos de $, indicando o travamento
de linhas e colunas).
Propriedades ColumnWidth e RowHeight
Essas propriedades medem e definem largura de uma coluna e altu-
ra de uma linha, respectivamente. Quando várias colunas ou linhas
estão selecionadas e têm tamanhos diferentes, essas propriedades
retornam o valor Null.
A largura de uma coluna é medida em quantidade de caracteres
"O" para o tipo de fonte, enquanto que a altura de uma linha é
medida em pontos.
Propriedade Fórmula
Esta propriedade retorna ou determina qual a fórmula contida em
uma célula do Range.
Propriedade ttasf órmula
Retorna True, se existe uma fórmula em uma célula do Range, ou
False, caso não exista.
' .
L
e
78 Desenvolvendo Aplicações Poderosas com Excel e VBA
Propriczdadcz ttorlzontalAlignmcznt
Retorna ou define o alinhamento horizontal das células contidas no
Range selecionado. As constantes podem ser:
:> xlHAlignRight - Alinhamento à direita.
:> xlHAlignleft - Alinhamento à esquerda.
:> xlHAlignJustify - Alinhamento justificado.
:> xlHAlignDistributed - Alinhamento distribuído.
:> xlHAlignCenter - Alinhamento centralizado.
:> xlHAlignGeneral - Alinhamento padrão.
:> xlHAlignFill - Preenche todo o Range horizontalmente
com o conteúdo da célula.
xlHAlignCenterAcrossSelection - Alinha horizontal-
mente por sobre umà -ieleção.
Propriczdadcz Lockczd
Trava ou destrava as células do Range, sendo equivalente à guia
Proteção, em Formatar I Células, no item Travada.
Propriczdadcz Valacz
Retorna ou define o valor de uma determinada célula do Range.
Exemplo:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Celula As Range, i As Integer
For Each Celula In Target
i = i + 1
Celula.Value = i
Next
End Sub
Aqui, cada célula selecionada será preenchida com o seu index
(posição) no Range.
, i Objeto Range
M4itodo flddComment
\
\
\
79
Esse método adiciona um texto de comentário a uma célula do Range.
private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim R As Range
Set R = Range(Cells(Target.Row, Target.Column), _
Cells(Target.Row, Target.Column))
R.AddComment"Esta é a primeira célula do Range"
End Sub
Método fiotof ilter
O método AutoFilter habilita o recurso de autofiltro do Excel nas
células que envolvem o Range.
Método fiotof it
O método Autofit ajusta colunas ou linhas para uma melhor disposi-
ção do texto dentro das células.
Método Bordczrfiroond
Esse método acrescenta uma borda ao Range especificado. Veja-
mos a sua sintaxe:
Range.BorderAround(LineStyle, Weight, Colorindex, Color)
Onde LineStyle pode ser uma das seguintes constantes:
:> xllineStyleNone - Sem estilo.
:> xlDouble - ---------------
:> x1Dot - .............. .
:> xlDash - --------------·
:> xlContinuous · ------
:> xlDash Dot - -. -. -. -. -. ·. · . -
r
'
80
1
1
. 1
Desenvolvendo Apl;cações Poderosas com Excel e VBA
xlDashDotDot - -.. -. . - .. -. . -..
xlSlantDashDot - O mesmo que x1Dash0or, mas en-
trelaçado.
E Weight pode ser uma das seguintes constantes:
:> xlHairline - Intensidade muito fina .
:> xlThin - Intensidade fina.
:> · xlMedium - Intensidade mediana.
:> xlThick - Intensidade forte.
1.
Colorlndex e Color são as constantes de cores, onde Colorindex
é definida por um valor do lndex da cor da paleta e Color é definida
como um valor de uma função RGB.
1
1 Uma função RGB trabalha com três parâmetros, que indicam
a quantidade de vermelho, verde e azul na composição de uma cor,
variando de O a 255. Um exemplo poderia ser a cor vermelha:
RGB(255, O, O),.
Apenas um componente de cor deve ser definido para o méto-
do BorderAround.
Método Clear
:1
:1 Limpa todo e qualquer conteúdo das células dentro de um Range. O
~ conteúdo envolve valores, formatação e fórmulas.
11
111
i:\ Método Copy
:\ Esse método copia o conteúdo de um Range para um outro Range
:'1 de destino ou para o clipboard. Sua sintaxe:
1
1 Range.Copy (Destino)
.1
Ti Método Delete
,li
11
:1: Exclui as células do Range especificado.
"""
-
Objeto Range 81
Mcítodo fi11Down. Flllleft. Fillltlght. f lllUp
copia o conteúdo da primeira célula do Range para o resto da sele-
ção, na direção especifica. .
Range(-Al:A20#) .Fil1Down
preencherá das células A2 até A20 com o conteúdo de A 1.
Método f ind
Tal método faz uma pesquisa em todas as células do Range,
retornando a seleção da primeira célula que satisfaz algum crité-
rio, ou Nothing caso o critério não tenha sido satisfeito. Vejamos
a sua sintaxe:
Range.Find( What, After, Lookin, LookAt, SearchOrder, _
SearchDirection, MatchCase, MatchByte)
Aqui, What é o valor ou dado a ser buscado; After é a
célula depois da qual a busca deve ser iniciada; Lookln é uma
das constantes de busca: xlValues (valores), xlComments (co-
mentários) ou xlFormulas (fórmulas); LookAt determina se o
valor deve bater com todo o conteúdo da célula, ou parte dele
simplesmente: xlWhole (completo) ou xlPart (parte);
SearchOrder define se a busca deve seguir em colunas ou li-
nhas: xlByRows ou xlByColumns; SearchDirection indica a di-
reção de busca: xlNext ou xlPrevious; MatchCase deve ser de-
finido como True caso você deseje uma busca sensitiva a letras
maiúsculas ou minúsculas. MatchByte só é usada no padrão Excel
para o Oriente.
Como você pôde ver, esse método tem vários parâmetros e
deve ser usado com atenção.
Métodos FindNext e f indPrevious
Esses métodos prosseguem com a busca iniciada no método Find à
procura de novas ocorrências do critério dentro do Range.
":"
1
1
82 Desenvolvendo Aplicações Poderosas com Excel e VBA
Método lnsczrt
Insere células, linhas ou colunas na planilha determinada.
Método Mczrge
Merge é o recurso de mesclar células. Tem a seguinte sintaxe:
Range.Merge(Across)
Onde Across deve ser definido como True, caso queiramos
mesclar as células do Range, gerando uma célula por linha; e False,
caso queiramos que todo o Range vire uma única célula.
Método Sczlczct
Seleciona o Range especificado.
Método Sort
O método Sort é utilizado para classificar os dados dentro de um
Range de células. Sua sintaxe é:
Range, Sort ( Keyl, Orderl, Key2, Order2 , Key3 , Order3 , Header, _
OrderCUstom, MathCase, Orientation, SortMethod, _
IgnoreControlCharacters, IgnoreDiacritics, IgnoreKashida)
Os parâmetros mais relevantes desse método são as Keys,
pois são os campos-chave de classificação; Order indica duas
constantes: xlAscending e xlDescending, significando ordem
crescente e decrescente, respectivamente; Header especifica
se a primeira linha contém cabeçalhos; MathCase é para uma
classificação sensitiva, onde letras minúsculas têm prioridade
sobre as maiúsculas; Orientation pode ser xlSortColumns (clas-
sificação por colunas) ou xlSortRows (classificação por linhas).
Uma boa forma de não se confundir com esse método é gravar
uma macro classificando dados e analisar o seu conteúdo.
1. a d
Objeto Range 83
Colvcão Borders
.a
A coleção Borders é responsável por determinar as características
das bordas de um determinado Range.
Junto com Borders, são passadas as constantes que represen-
tam qual borda está sendo modificada. São elas:
:> x1Diagona1Down - Diagonal de cima para baixo.
:> xlDiagonalUp - Diagonal de baixo para cima.
:> xlEdgeleft - Borda esquerda.
:> xlEdgeTop - Borda superior.
:> xlEdgeBottom - Borda inferior.
:> xlEdgeRight - Borda direita.
:> xllnsideVertical - Linha interna vertical.
:> xllnsideHorizontal - Linha interna horizontal.
Exemplo:
With Range("Al:D4#).Borders(xlEdgeBottom)
. Colorindex = 3
.LineStyle = x1Dash
.Weight = xlMedium
End With
Propriedades Color e Colorlndex
A propriedade Color especifica, em RGB, a cor da borda, enquan-
to Colorlndex especifica, em valor inteiro, o index para a paleta
de cores. Por exemplo, Color = RGB(255, O, O) equivale a
Colorlndex = 3.
Propriedades LineStyle e Weight
Possuem os mesmos parâmetros de LineStyle e Weight no método
Border Around.
> ' l )'.;.
1
,,
1 '/1:;.
! ,;,·
1 i
! ! :
• i 1'
! 1 '
1 1 ,
1
1 r
1 !
1 1 !
1
1 1 '
: 1
1 !
1
1
'
11 '
i l
1
1
i
1
1.1 !:,
t'. (
!1 1
t
'1
1
;I'
'I
I ·
1:
11
'1
1 I
11 1l
.' 1
lj
1 1
11
l 1
1
1 l
1 '
' J
'1
.1 '
1 '
1
84 Desenvolvendo Aplicações Poderosas com Excel e VBA
O Objeto f ont
o objeto Font possui toda a formatação de fonte que podemos
fazer na interface gráfica do Excel. Vejamos as principais proprie-
dades:
:> Bold - Propriedade booleana que define o estilo negrito
da fonte.
Color ou Colorlndex - Definem a cor da fonte nos
parâmetros anteriormente citados.
ltalic - Propriedade booleana que define o estilo itálico
da fonte.
:> Name - Define o nome da fonte a ser usada.
:> Size - Define o tamanho da fonte.
O Objeto Interior
O objeto Interior define a formatação visual do fundo de uma célu-
la. Suas principais propriedades são:
Proprhzdadvs Color v Colorlndvx
Definem a cor de preenchimento de uma célula.
Proprlczdadcz Pattczrn
Define um padrão para ser aplicado no fundo de uma célula. Existem
dezoito padrões que podem ser usados.
Propriedades PatternColor e PattvrnColorlndczx
Definem a cor do padrão a ser aplicada ao fundo da célula.
Para testar todos os valores, aqui está uma rotina interessante:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Trat
Dim Fundo, Padrao, CorPadrao As Integer
rt
Objeto Range 85
Trat:
Fundo= InputBox("Por favor, digite o valor" & _
"da cor de preenchimento das células (0-56)")
Target.Interior.Colorindex = Fundo
Padrao = InputBox("Por favor, digite o padrão desejado• &
• para a~ células (0-18) ")
Target.Interior . Pattern = Padrao
CorPadrao = InputBox("Por favor, digite o valor da cor•&
"do padrão da célula (0-56)")
Target.Interior.PatternColorindex = CorPadrao
Exit Sub
MsgBox "Você deve ter escolhido algum valor fora• & _
"do Range especificado . . . ", vbCritical
End Sub
/
/'
1
{
1
i
- - - - - ~--------
8,
Oserforms.
t :
' '1
1
!
• l
1
1
f
./
·I
.!
1
- 8 -
<Jserforms
UserForms são formulários personalizados pelo programador para
fazer um interfaceamento entre a pasta de trabalho Excel e o usuá-
rio da aplicação, visando facilidade e controle.
Através de um userform, aliado aos conceitos vistos até este
momento, podemos fazer com que o usuário da nossa aplicação
trabalhe apenas em um ambiente personalizado, sem precisar digitar
nas planilhas. A vantagem disso é que podemos criar pequenos e
inteligentes sistemas que solicitem dados aos usuários, trate esses
dados e devolva os resultados, armazenando informações necessári-
as em planilhas Excel.
No ambiente de programação VBA, podemos inserir um userform
no menu Inserir I UserForm. A primeira visão que temos de um
userform é um formulário vazio, como a seguir:
..... . ................... . .... .. . . .. ... .
. ' '
• • • • • • • • • •. • • • . • • • • • • • • • • • • • l • • • • • • • ~ • • • ' • ,· • • • • • :
• • •• • • • ••••• .••••••• •• ••••• • •• • • • • • • •• . : • , • . º 1
. .. •' ..... . .. ·, .. .. . .. . .. · ... . .. .. .. ... . . .... .
. . . . . . . . . ... . ... · . . .. .. . . ........ .. . : .. . . .. .
: : : : . : : : < . : . :-i: : : : : , : : : : ·:· : , : : : . : ':. < ~:. : . : : : ': : : :• : t : : : .: r
: : ,: : : : :::::::: :: :·: : : :.:.:-. :.: :-: : : .. :., :,: :-: :·: : :-: :.: : ~:
. .. .. ... .. . ... .. ' , . .. . ... ·.· . . · ·.· , ' . . ·.· ... . · .. ·.
: : : : :·:: : : :_.:::r:.::.·:< : : :: :-:-;_:.: ·:.;-·:·: :~: .: : :-:,,_.: _: ·:: :i
Fig. 24 - UserForm
Um userf orm aparece na janela de projeto como um item da
pasta formulários. Logo abaixo, temos a janela de propriedades do
r 1,
1
1'
,j 'º Desenvolvendo Aplicações Poderosas com Excel e VBA
userf orm, que definem as suas características iniciais e podem ser
mudadas a partir de código durante a execução do projeto.
Quando selecionamos o formulário, a caixa de ferramentas
fica ativa. Esta possui todos os objetos necessários para compor o
nosso formulário com ferramentas potenciais para o interf aceamento
da aplicação.
Caixa de ferr amenlas EI
-. Controles· J .. ..
~ ~ -A abl ~ffrfm -·
_:_j ..:J il !J ~
.... ~ . ,
'
--------
Fig. 25 - Caixa de ferramentas
Sempre que você quiser ter uma idéia de como vai a monta-
gem do seu userform, você pode executá-lo. Para tanto, use o menu
Executar ou tecle FS. Fechando o formulário, você volta ao ambi-
ente de criação.
Carregando um Formulário
Para carregar um formulário em sua planilha, precisamos gerar uma
macro que tenha os comandos de inicialização do userform, e deve-
mos executar essa macro pelas formas já vistas anteriormente (por
botões ou eventos).
Para carregarmos um formulário, usamos o comando Load
e, para exibi-lo, usamos o método Show. Vejamos o exemplo a
seguir, que carrega o UserForm1 na inicialização da pasta de
trabalho Formulário.xls. Para isso, usamos o evento Open da
Pasta de Trabalho:
Private SubWorkbook_Open()
Load UserForml
UserForml . Show
End Sub
4
1
\
userForms 91
Da mesma forma, podemos ocultar um formulário pelo méto-
do Hide e descarregar um formulário da memória com o comando
Unload. Não é necessário ocultar um formulário antes de descarregá-
lo da memória.
Propriedades de om OserForm
Como todo objeto Excel, um userform é um objeto e, como tal,
possui propriedades, métodos e eventos. Dois métodos foram co-
mentados a pouco: Show e Hide.
Vamos dar uma olhada nas principais propriedades dos formu-
lários contidas na janela Propriedades.
Propriedade Name
Não só nos userforms, mas em todos os controles, a propriedade
Name vai referir-se ao objeto nos códigos. Normalmente, fazemos
uma convenção de nomes, que são compostos por três letras que
definem o objeto, seguidas pela sua função. No caso de um userform,
será Frm_Função.
Propriedade BackColor
Essa propriedade define a cor do fundo do formulário. Abrindo a flecha
da caixa de combinação, aparece as cores da paleta do sistema.
Propriedade BorderColor
Define a cor da borda do formulário.
Propriedade BorderStyle
Determina O estilo da borda. Pode ser: frmBorderStyleNone ou
frmBorderStyleSingle.
Propriedade Captlon
Define O nome do formulário que vai aparecer na barra azul.
1 1
1
! .
1
! i 1 •
1 l
j 1
t l ! j
r .
' 1
i
1
i
1 i
1 :!
9Z Desenvolvendo Aplicações Poderosas com Excel e VBA
Propriedade Enabled
Ativa ou desativa o formulário. Desativar um formulário significa
não poder fazer coisa alguma com ele; portanto, tome cuidado com
essa propriedade.
Propriedade f ont
Exibe a caixa padrão Fontes do sistema, configurando como os tex-
tos serão exibidos no formulário.
Propriedade ForeColor
Define a cor do que será impresso no formulário.
Propriedade Helght
Determina a altura do formulário.
Propriedade Left
Demarca a distância do formulário ao canto esquerdo da tela.
Propriedade Mooselcon
Define um ponteiro do mouse personalizado quando estiver sobre o
formulário. Para que esse cursor fique ativo, na propriedade
MousePointer, você deve escolher a opção 99 - frmMousePointerCustom.
Propriedade MoosePolnter
Define um ponteiro padrão de mouse para o formulário.
1 Proprlcrdadcr Plcturcr
il Opta por uma figura como fundo do formulário.
1
1l
, ! Proprlvdadcz Plctorvflllgnmvnt
11
· lf Define o alinhamento da figura colocada na propriedade Picture .
• 1 lf
i' ;_t
1
..i.....
UserForms 93
Propriedade PlcturcrSlzvModcr
Determina a forma que a figura será disposta no formulário.
Propriedade StartupPosltion
Indica a posição inicial do formulário na planilha.
Propriedade Top
Define a distância entre o topo do formulário e o topo da planilha.
Propriedade Width
Delimita a largura do formulário.
Propriedade Zoom
Aumenta ou diminui a distância de visualização dos componentes do
formulário.
Mcítodos de um Oserf orm
Método tlidci
Oculta um formulário sem descarregá-lo da memória.
Método Show
Exibe um formulário quando já carregado na memória.
Método Printf orm
Imprime a imagem do formulário na impressora padrão do sistema.
Eventos em om Oserf orm
Os eventos que serão mostrados na seqüência servem para uma
gama de outros controles e, portanto, podemos, mais à frente,
apenas expandir o conceito.
94 Desenvolvendo Aplicações Poderosas com Excel e VBA
Evento Actlvate
Ocorre quando o formulário for ativado.
Evento Cllck
Dá-se toda vez que o formulário for clicado.
Evento DoableClick
Acontece sempre que o formulário receber um clique duplo.
Evento Deactivate
Ocorre quando um formulário for desativado.
Evento lnitialize
Sucede-se toda vez que um formulário for carregado para a memória.
Evento KeyDown
Ocorre quando uma tecla é pressionada. Sua declaração possui dois
argumentos: KeyCode As MSForms.Returnlnteger e Shift As lnteger.
KeyCode retorna o código da tecla pressionada; Shift retorna 1
caso a tecla Shift esteja pressionada e O, caso contrário.
Evento KciyOp
Ocorre quando uma tecla é solta. Os argumentos se comportam
como no evento KeyDown.
Evento KeyPress
Ocorre quando uma tecla é pressionada também, mas retorna o
código da tabela ASCII da tecla.
Evento MoaseDown
Acontece quando um botão do mouse é pressionado. Possui os seguin-
tes argumentos: Button As lnteger, Shift As lnteger, X As Single, Y
d
~ :
JL.. .
Userforms95
As Single, onde Button representa o botão clicado; Shift representa
o estado da tecla Shift; X e Y representam a posição atual do mouse.
Evento MoaseUp
Dá-se quando um botão do mouse é solto. Possui os mesmos
parâmetros de MouseDown.
Evento MoaseMove
Ocorre quando o mouse movimenta-se pelo formulário.
Evento QaeryClosv
Realiza-se antes que o formulário seja fechado. Possui o argumento
Cancel para cancelar o evento caso seja desejado.
Evento Rvsize
Ocorre sempre que o formulário seja redimensionado.
Evento Terminatv
Sucede-se após o formulário ser fechado.
Evento Zoom
Ocorre quando há uma mudança da propriedade Zoom do formulário.
Controles de Selecão
.a
Selecionar Objeto [~1
Essa ferramenta serve para dimensionar e selecionar controles.
Controles de lnterfaceamento
Rótalo (Label) ~
O rótulo serve para colocarmos textos dentro de um formulário.
1
1
l
1
!
1
96 Desenvolvendo Aplicações Poderosas com Excel e VBA
Com os rótulos, usamos algumas propriedades especiais. Uma
delas é o AutoSize, que altera o tamanho do rótulo para o menor
tamanho possível, de acordo com o texto nele contido.
Nos rótulos, a propriedade Caption determina qual será o tex-
to exibido no controle. Esse texto pode ser formatado pelas propri-
edades Font e ForeColor.
Os rótulos são fundamentais para a construção de um formulá-
rio, pois são eles que fazem a comunicação visual indicando o que
cada controle contém, ou qual a sua função.
Caixas dei Tczxto (TcixtBox) ~~{
As caixas de texto são as melhores formas de receber entradas do
usuário. A caixa de texto permite digitação de qualquer caractere
alfanumérico, inclusive os de composição Alt (º, a, entre outros).
Vejamos as principais propriedades, métodos e eventos:
Propriedade Name
A propriedade Name de uma caixa de texto possui a mesma função
da propriedade Name do formulário. Para o padrão de montagem
do nome, podemos utilizar Txt_Função.
Propriedade Enabled
Enabled ativa ou desativa a caixa de texto, deixando-a com um
padrão acinzentado. Seu valor pode ser True ou False.
Propriedade Locked
Também desativa a caixa de texto, entretanto, mantém seu pa-
drão, apenas não permitindo a digitação.
Propriedade MaxLenght
Define a quantidade máxima de caracteres que podem ser digitados
na caixa de texto.
Propriedade PasswordChar
Determina um caractere de ocultação de textos do tipo Senha.
Normalmente, é usado o caractere *.
. ..........
.......
•
userforms 91
Proprlcidadv ScilLvnght
Indica a quantidade de caracteres a partir de Se1Start a serem sele-
cionados em uma caixa de texto.
Proprlcidadci Sci1Start
Indica o primeiro caractere a partir dú qual o texto vai ser selecio-
nado em uma caixa de texto.
Proprlcidadci ScilTcixt
Retorna o texto que está selecionado.
Proprlcidadci Tcixt
Retorna ou define o texto de uma caixa de texto.
Mvtodo Scitf ocus
Como método a ser destacado, podemos citar SetFocus. Esse méto-
do dá o foco à caixa de texto que o chamou.
Evento Changci
Esse evento ocorre sempre que uma caixa de texto tem sua propri-
. edade Text alterada, ou seja, com qualquer digitação executada.
Evcinto Entcir
Ocorre quando a caixa de texto recebe o foco.
Evento Exlt
Entra em ação sempre que a caixa de texto perde o foco.
Botão dci Comando (CommandButton) ~ ·
Os botões de comandos, normalmente, são os responsáveis pelo servi-
ço pesado de um formulário. É através deles que as funções finais são
executadas e que determinam as conseqüências da aplicação. Além
disso, os botões são sempre o ponto de saída de um formulário •
1
1
98 Desenvolvendo ApUcações Poderosas com Excel e VBA
Vejamos as principais propriedades, métodos e eventos dos
botões:
Propriedade Nam,
O padrão de nome de um botão de comando pode ser Cmd_Função.
Propriedade Caption
Determina o texto que vai aparecer no botão de comando.
Propriedade Dcifault
Escolhe um botão como padrão para a tecla Enter dentro de um
formulário.
As outras propriedades, os métodos e os eventos de um botão
já foram comentados anteriormente, e o conceito pode ser expan-
dido com facilidade.
Excimplo Usando Controleis dei lntcirfacciamcinto
Vamos, agora, analisar um exemplo que vai utilizar formulário, ró-
tulos, caixas de texto e botões.
Siga todos os passos seqüencialmente para que tenhamos o máximo
de fidelidade entre o exemplo e a sua aplicação. Se tiver alguma dúvida, dê
uma olhada nos capitulas anteriores e volte ao exercido. Dúvidas adicio-
nais, entre em contato com o autor (maicris@yahoo.com.br).
:> 1 ° Passo - Modifique a sua pasta de trabalho inicial
para que ela tenha duas planilhas, conforme mostra a
Figura 26.
,~··.' ' ,·\·,~·."!-. .. ·:. ::.~··.'.···; ·';· ... ·· ... _- .:·.~· .. ::~~í
, ... .)·.·~~ - ~- - -~ ..... p • • J ~· - ... • . .... _ ... ., ,:-..
Fig. 26 - Planilhas do exemplo
2º Passo - Monte a sua planilha Clientes como mostra
a Figura 27. Dê o nome de CadCliente para a macro a
ser acessada pelo botão cadastrar.
..
Userforms
''
m Microsoft Excel • Clientes.xls
(jl (yquvo
~ditar Ep Inserir . Eormatar Fcrr amentas Qados ,lanela AjlJda "I
1 ° ~" /a~:,, I. i ~ Lm <1 /· .. 1 .. f ii .. / w. 1: ,. ti u I il ~ 11~
LA~~ - .. ·-~--:_ ..... ; 1~ . ,:J .. ~ .!.1.~,1-= .. • • mJ~ -~ ~ ,~ ./J / tt íf
1
2 ,_
3 ,
,_
4 ,_
5 ..
6 ·
A1 ',,r •I
~· ;. .
A 1 ,.,-l:i • . :: s , , ... ._~ ~."" .. ~~~,~.,.:. . .- .':. ·~ e .. t .: . ~,,;__~.,.: .... " ::, :~= D .. 11:...~,
1 Nome E1_1~~!.!ÇO 1 Telefone ' 1
1 - jl
·-·
Cadastrar
- -
1 1
Fig. 27 - Planilha Clientes
3º Passo - Monte a sua planilha Controle da forma
como mostra Figura 28. Essa planilha vai apenas servir
para armazenar a quantidade de clientes. Ela tem que
ser uma nova planilha, porque não deve aparecer para
o usuário, sendo que não há nenhuma informação que
o interesse.
a Microsoft E xcel· - ·Clientes~ xls· --~~--~·
J~ Arquivo ~ditar E~ibir Inseri~ Eormatar
J D ~ pi] 1~ (9. ~ /· Jt .~ ~< J . .-~ ..... ----,~~~..u.. . . ,,.,. ,. J~
:!~ial ~· ?'::~!:º ... ~f :. '. ~ .. ,. ·{.'_ ~
A1 .Tf =I Clientes
..
-· A B:-... ··e . . ... . ' .. . :;..• . ..., ' . , ...... _.>;tt..~, :, ~ •. ;,~ ·~-t ..
1 Clientes o
• 2 ,"
-~
. 3 ~
'. -
Fig. 28- Planilha Controle
4º Passo - Crie o formulário Frm_Cadastro, conforme
mostra a Figura 29.
CadaslrodeCli~--- - Ef
Fig. 29 - Formulário Frm_Cadastro
100
! '
Desenvolvendo Aplicações Poderosas com Excel e VBA
Acerte as propriedades dos controles de acordo
com a lista a seguir:
Formulário:
Name: Frm_Cadastro
Caption: Cadastro de Clientes
Height: 100
Width: 322
Rótulos:
Name: Lbl_Nome
Caption: Nome:
Name: Lbl_Endereco
Caption: Endereço:
Name: Lbl_ Telefone
Caption: Telefone:
Caixas de Texto:
Name: Txt_Nome
Height: 16
Width: 180
Name: Txt_Endereco
Height: 16
Width: 180
Name: Txt_ Telefone
Height: 16
Width: 100
Botões:
Name: Cmd_Adicionar
Accelerator: A
Caption: Adicionar
Default: True
Name: Cmd_Ok
Accelerator: O
Caption: Ok
Jatt -
Userforms 101
5º Passo - Coloque os seguintes códigos nos eventos
especificas:
No. código do Módulo1 criado pela macro do botão
CadCliente, acrescente:
Sub CadCliente ()
Load Frm_Cadastro
Frm_Cadastro.Show 1
End Sub
No código do formulário Frm_Cadastro acrescente:
Dim Clientes As Integer
Private Sub Cmd_Adicionar_Click()
'Verificação dos dados digitados
If Txt_Nome.Text = •• Then
MsgBox ·Por favor, digite o nome do cliente•, vbCritical
Txt_Nome . SetFocus
Exit Sub
Elseif Txt_Endereco. Text = • • Then
MsgBox "Por favor, digite o endereço do cliente•, vbCritical
Txt_Endereco.SetFocus
Exit Sub
Elseif Txt_Telefone. Text = • • Then
MsgBox •por favor, digite o telefone do cliente•, vbCritical
Txt_Telefone . SetFocus
Exit Sub
End If
'Introdução dos dados na planilha
Planl.Cells (Clientes + 2, 2) . Value = Txt_Nome. Text
Planl.Cells(Clientes + 2 , 3) .Value = Txt_Endereco.Text
Planl.Cells (Clientes + 2, 4) .Value = Txt_Telefone.Text
' Ajustando o tamanho das 3 colunas
Planl.Range(Columns(2), Columns(4)) .AutoFit
'Atualizando a quantidade de clientes
Clientes= Clientes+ 1
Plan2.Cells(l, 2) .Value = Clientes
'Limpando as caixas de texto, e posicionando o cursor
Txt_Nome.Text = ••
Txt_Endereco.Text = ••
Txt_Telefone = • "
Txt_Nome.SetFocus
1
1
1 '
1 1
\, 1
1oz Desenvolvendo ApUcações Poderosas com Excel e VBA
'Classificando os dados
Range("B2:D4").Select
Planl.Range(Cells(2, 2), Cells(Clientes + 1, _
4)) .Sort Keyl:= Planl.Cells(2, 2), Orderl:=xlAscending,
Hea.der:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
Planl.Cells(l, 1) .Select
End Sub
Private Sub Cmd_Ok_Click{)
Unload Me
End Sub
Private SubUserForm_Initialize()
Clientes= Plan2.Cells(l, 2) .Value
End Sub
~ 6° Passo - A fim de não deixar que o usuário saia da
planilha Clientes e entre na planilha Controle, coloque
o seguinte código no Workbook:
Private Sub Workbook_SheetActivate (ByVal Sh As Object)
On Error GoTo Trat
Dim Resp As Integer
If Sh.Name <> •clientes" Then
Resp = InputBox( "Qual a sua senha?")
If Resp <> 123 Then
MsgBox •você não tem acesso para entrar• &
• na planilha de controle", vbCritical
Planl.Activate
End If
End If
Exit Sub
Trat:
Planl.Activate
End Sub
sq
1
. 1 1 Sir- FFü
Userf orms 1 O 3
= 1º · Passo - Para que o usuário só tenha acesso ao seu
botão Cadastrar, coloque os seguintes códigos em
Plan1:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,_
cancel As Boolean)
Planl.Cells(l, 1) .Select
Cancel = True
End Sub
Private SubWorksheet_BeforeRightClick(ByVal Target As Range,_
Cancel As Boolean)
Planl.Cells(l, 1) .Select
Cancel = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Planl.Cells(l, 1) .Select
End Sub
Controles de Op~ão
Caixa dez Sczlczção (ChczckBox) ~l
A caixa de seleção é um controle booleano, ou seja, permite esco-
lher entre Sim e Não para um determinado item.
Propriedade Name
Com relação ao nome, o padrão pode ser Chk_Função.
Propriedade Valoe
Esta é a propriedade que define o estado do botão. True marca o
botão e False desmarca.
1:
' 1 j >
1 '
1 1
1 1
1 1
1
1 1
'1
: 1
1
'li
']l
: 1·
' J
·P 1.
t' \
:'I '
'11
F· 1,,
\ r
j , 1
~
~
! ,.
,·.
1,
1·
'i
. \
. J
104 Desenvolvendo Aplicações Poderosas com Excel e VBA
Botão de Op~ão (OptlonBotton) ~
Os botões de opção tem as mesmas características das caixas de
seleção. Entretanto, os botões de opção não podem trabalhar sozi-
nhos; são necessários dois botões ou mais para que possa haver uma
alternância entre os botões. ,
Se você colocar três botões de opção no mesmo formulário,
ao escolher um, os outros automaticamente são desselecionados.
Para conseguir criar vários blocos de opções, devemos introduzir
um controle Frame, para que possa servir de contêiner de contro-
les. Os botões que estão dentro de um frame não influenciam no
estado de outros botões que estejam em outros trames ou no
formulário.
As propriedades, métodos e eventos, assim como os da caixa
de seleção, já são conhecidos.
Caixa de Comblna~ão (ComboBox) 9
As caixas de combinação servem para mostrar ao usuário múlti-
plas escolhas. Elas podem, ou não, permitir digitação. É uma
forma bem interessante de impedir que o usuário insira em sua
planilha informações que não estejam de acordo com os seus
objetivos.
As caixas de combinação possuem algumas propriedades e mé-
todos diferentes do que vimos até aqui:
Proprlczdade Namcz
Só para mantermos o padrão até aqui estipulado, o nome para as
caixas de combinação pode ser Cbo_Função.
Proprlczdade Llst
Através dessa propriedade, temos acesso à lista de opções. Exem-
plo: em uma lista com os sete nomes, Cbo_Nome.List(O) será o
primeiro, e Cbo_Nome.List(6) será o último nome da lista.
Propriedade LlstCount
Retorna a quantidade de itens dentro da lista.
\
J
UserForms 105
Propriedade Llstlndvx
Acredito que a propriedade Listlndex é a mais importante das cai-
xas de combinação, pois retorna ou determina qual item está seleci-
onado. Este retorno é um index que nos permite acessar qualquer
dado de uma caixa de combinação.
Propriedade Stylcz
Como o próprio nome indica, a propriedade Style vai definir o
estilo da caixa de combinação. Temos duas opções:
O fmStyleDropDownCombo permite digitação, e
fmStyleDropDownlist - obriga a escolha de um item da lista.
Método flddltczm
Esse método nos permite a inserção de itens em uma caixa de
combinação. Sua sintaxe:
ComboBox.Additem Item, Index
Onde Item é uma string ou variável indicando o texto do item
a ser inserido, e lndex é a posição em que o Item deve ser inserido
na caixa de combinação.
Método Removvltvm
Permite remover um item da lista de uma caixa de combinação. Sua
sintaxe é:
ComboBox Removeitem Index
Onde lndex é o item da lista a ser excluído.
Método Clczar
Remove todos os itens de uma caixa de combinação.
Evvnto DropButtonCllck
Esse evento ocorre quando a flecha do lado direito da caixa de
combinação é pressionada.
r
F
e
106 Desenvolvendo Aplicações Poderosas com Excel e VBA
Caixa dei Listagem (LlstBox) :~
...
As caixas de listagem têm basicamente as mesmas funções das cai-
xas de combinação. A única diferença é que elas se apresentam no
formato lista aberta. Com isso, surge uma nova funcionalidade, a
múltipla escolha.
Propriedade Name
Como padrão, usamos para as caixas de listagem Lst_Função.
Propriedade Malt1Select
Permite múltipla escolha em uma caixa de listagem. Temos três
opções: O - fmMultiSelectSingle - permite a seleção de um único
item da caixa; fmMultiSelectMulti - permite mais de um item
selecionado, utilizando o mouse para marcar e desmarcar os itens;
e fmMultiSelectExtended - permite mais de um item seleciona-
do, utilizando as teclas Ctrl e Shift em suas funções padrões de
seleção.
Propriedade Selc,cted
A propriedade Selected é muito útil, principalmente no modo
multisseleção. Através dessa propriedade, aliada ao índice, podemos
determinar se um item está ou não selecionado. Exemplo:
If ListBoxl.Selected(O) Then
MsgBox "Primeiro item selecionado"
End If
Normalmente, para o modo de seleção única, utilizamos a
propriedade Listlndex para analisar o item selecionado.
Exemplo (Continua~ão)
:> 8° Passo - Seguindo com o nosso exemplo~ adicione
mais dois botões de formulário na planilha, conforme
a Figura 30. Na solicitação dos nomes de macros, para
o botão Excluir, utilize DelCliente e, para o botão Lo-
calizar, utilize LocCliente.
e
usen-orms
>
63 Miciosoft Excel - Clientes.xls . ~. -
A s -1 ;. -;e • .. , .. ·o.
a-;:;1:-r-------l -~º'J~_4!.__j~r!!)~..!_eço_T~JeJone , 2
3 i
4 ·
5 ::
6
7 ,·
8
· 9
10·
11 1
12
, ~ ... ,-:,:--:_~~"::':;
~ · Exclüir :
~- . .
--....----1. __
!
- ----1----
--- - -----1-----+--
Fig. 30 - PlanUha Clientes
107
9° Passo - Insira um novo formulário, que servirá de
caminho para o botão Excluir. Esse formulário deve
ser montado como a Figura 31 .
..
,,
'
. .
. .
i
'.·
,.
Selecione o(s) cliente(s) a ser(em) excluído(s): .
~i . . , . E$ [ xcluir
~--
~" ~ . I_ :
i.·
t:
...
Fig. 31 - Formulário Frm_Excluir,.
.
.
Acerte as propriedades dos controles de acordo
com a Lista a seguir:
' 1 '
,·
1
i
1
i
1.
1
r
·' 1,
111
~
i
"
1
~
j :
'
f
1
108 Desenvolvendo Aplicações Poderosas com Excel e VBA
Formulário:
Name: Frm_Excluir
Caption: Exclusão de Clientes
Height: 180
Width: 260
Rótulo:
Name: Lbl_Desc
Caption: Selecione o(s) cliente(s) a ser(em)
excluido(s):
Autosize: True
Caixa de Listagem:
Name: Lst_Nome
MultiSelect: 1 - fmMultiSelectMulti
Botões de Comando:
Name: Cmd_Excluir
Acelerator: E
Caption: Excluir
Def ault: True
Name: Cmd_Ok
Accelerator: O
Caption: Ok
1 Oº Passo - Insira os seguintes códigos dentro de cada
evento específico:
Nos códigos do Módulo1, criados pelas macros dos
botões DelCliente e LocCliente, acrescente:
Sub DelCliente()
Load Frm_Excluir
Frm_Excluir.Show 1
End Sub
Sub LocCliente()
Load Frm_Localizar
FrTILLocalizar.Show 1
End Sub
Nos códigos do formulário Frm_Excluir, acrescente:
...........
userforms
oim Clientes As Integer
private Sub Cmd_Excluir_Click()
'Analisa a seleção de cada item
For i = Lst_Nome . ListCount - 1 To O Step -1
If Lst_Nome.Selected(i) Then
'Exclui o item selecionado
Planl.Range(Cells(i + 2, 2), Cells(i + 2, _
4)) .Delete shift:=xlShiftUp
Lst_Nome .Removeitem i
Clientes= Clientes - 1
End If
Next i
Cmd_Excluir.Enabled = False
'Atualiza a planilha de controle
Plan2.Cells(l, 2) .Value = Clientes
End Sub
Private Sub Cmd_Ok_Click ()
Unload Me
End Sub
Private Sub Lst_Nome_Change()
109
'Detecta se há algum item selecionado, e ativa Excluir
For i = O To Lst_Nome.ListCount - 1
If Lst_Nome.Selected(i) Then
Cmd_Excluir. Enabled = True
Exit For
Else
Cmd_Excluir.Enabled = False
End If
Next i
End Sub
Private Sub userForm_Activate()
Clientes= Plan2.Cells(l , 2).Value
'Carrega a caixa de listagem
If Clientes= O Then
11 O
Else
Desenvolvendo Aplicações Poderosas com Excel e VBA
MsgBox ·Não existem clientes a• & _
"serem excluídos•, vbinformation
Unload Me
For i = 1 To Clientes
Lst_Nome.Additem Planl .Cells(i + 1, 2)
Next i
End If
End Sub
,,
:> 11 ° Passo - Desenhe o próximo formulário, que vai
servir de caminho para o botão Localizar. Veja o seu
desenho na Figura 32:
Localizar por:
Localizar:
', .·
r. Nome ( Endereço ( ' Telefone , . Loc~;;2,.- ·. ,
Fig. 32 • Formulário Frm_Localizar
Acerte as propriedades dos controles de acordo
com a lista a seguir:
Formulário:
Name: Frm_Localizar
Caption: Localizar .••
Height: 93
Width: 315
Rótulos:
Name: Lbl_Por
Caption: Localizar por:
Autosize: True
Name: Lbl_Localizar
Caption: Localizar:
Autosize: True
..
l
'
userForms
Botões de Opçao:
Name: Opt_Por1
Caption: Nome
Autosize: True
Value: True
Name: Opt_Por2
Caption: Endereço
Autosize: True
Value: False
Name: Opt_Por3
Caption: Telefone
Autosize: True
Value: False
Caixa de Texto:
Name: Txt_Localizar
Height: 16
Width: 155
Botões de Comando:
Name: Cmd_Localizar
Accelerator: L
Caption: Localizar
Default: True
Name: Cmd_Ok
Accelerator: O
Caption: Ok
111
12º Passo - Para completar o nosso exemplo, insira os
códigos do formulário de pesquisa:
Dim LocPor As Byte
Dim Clientes As Integer
Private Sub Cmd Localizar Click()
- -
Dim Criterio As String, e As Range
1 1
l 1
1 1
111 Desenvolvendo Aplicações Poderosas com Excel e VBA
If Txt_Localizar.Text = •• Then
Else
MsgBox •por favor, digite um valor para pesquisa•,
vbCritical
Criterio = Txt_Localizar.Text & •••
For Each e In Planl.Range(Cells(2, LocPor),
Cells(Clientes + 1, LocPor))
Next
If e. Value Like Criterio Then
Planl.Range(c.Address, c.Address).
Interior.Colorindex = 3
MsgBox "Dados Localizados•,
vbExclamation
Planl.Range(c .Address, _
c.Address) .Interior.Colorindex = O
End If
End If
End Sub
Private Sub Cmd_Ok_Click()
Unload Me
End Sub
Private Sub Opt_Porl_Click()
LocPor = 2
End Sub
Private Sub 0pt_Por2_Click()
LocPor = 3
End Sub
Private Sub Opt_Por3_Click()
LocPor = 4
End Sub
'I Private Sub UserForm_Activate ()
'1
\ ,
'1
1,
' .Í'
1]
: 1 •
, . '
L •. 1,
Clientes= Plan2.Cells(l, 2) .Value
LocPor = 2
End Sub
Pronto. Esse é um belo exemplo de aplicação usando userforms.
Tente expandi-lo e utilizar os outros controles da caixa, pois eles
têm funcionalidades similares.
9
Design dez Oserforms_
- 9 -
Design de Oserforms
O conteúdo deste capitulo tem total relação com o conteúdo do
capitulo 8, UserForms. Entretanto, resolvi colocá-lo em um capitulo
à parte porque trata não tanto de um assunto de programação, mas
sim de design.
Aqui, vou apresentar algumas técnicas de como deixar o seu for-
mulário com uma f arma apresentável e fácil de lidar, a ponto de qualquer
usuário conseguir familiarizar-se rapidamente com a sua interface.
Alguns detalhes importantes a serem observados na constru-
ção de um formulário são a proporcionalidade e a disposição dos
controles. Esses dois conceitos vão deixar o seu formulário claro e
intuitivo. Um outro conceito, este mais de programação, é sobre
como preparar a sua interface.para que o usuário, com o mínimo de
cliques, consiga fazer todas as funções em sua aplicação.
Proporcionalidade e Disposi~ão
Proporcionalidade é utilizar a mesma distância entre todos os obje-
tos de um formulário e, sempre que possível, fazer com que um lado
do formulário fique bem parecido com o outro.
Eis aqui um exemplo de. uma janela proporcional:
Formulário Proporcional · D
-----------,
Nome:
Endereço:
Fig. 33 - Exemplo de Formulário Proporcional
•!
116 Desenvolvendo Aplicações Poderosas com Excel e VBA
Perceba os detalhes:
:> Nas pontas, as distâncias dos objetos às laterais do
formulário são as mesmas.
As distâncias superior, inferior e entre as caixas de
textos e botões de comandos são as mesmas.
A união das caixas de texto forma um bloco único, de
tamanho fixo, mesmo com a intercalação de um rótu-
lo entre duas caixas de texto.
Os botões distanciam-se proporcionalmente às distâncias
laterais, e o conjunto está centralizado no formulário.
Todos esses detalhes são importantes de serem considerados
no. momento de criação de um userform.
Para que consigamos desenvolver essa proporcionalidade, te-
mos um menu no ambiente VBA que nos é muito útil: o menu
Formatar. Dentro dele, temos funções de alinhamento,
proporcionalidade, disposição, entre outros. O bom uso desse menu
se traduz em um formulário proporcional e bem disposto.
Vamos analisar tais funcionalidades e o que elas podem nos
proporcionar:
formatar/Alinhar
Esse menu possui todas as funções de alinhamento entre objetos.
São elas: Horizontais - esquerdas, centros e direitas; Verticais -
superiores, meios e inferiores; e À Grade.
Para conseguirmos alinhar um objeto a outro, devemos seleci-
onar os objetos envolvidos de uma forma especial, utilizando as
teclas Shift e Ctrl. Digamos que temos três caixas de texto como a
figura a seguir:
Alinhamento D
...----r .
. . 1 .. . .
. .
. : . .. 1
. ~ ' •.
. .
•.,...- • 'l·. ,f ' • •• i. • l ;
Fig. 34 - ca;xas de texto não-alinhadas
d
Design de UserForms 1 1 7
Para fazer o alinhamento pela última caixa selecionada, você
deixa a tecla Ctrl pressionada e vai selecionando cada caixa até
chegar na que vai servir de guia. Caso queira selecionar primeiro a
caixa guia e, depois, as que serão alinhadas por ela, você usa a tecla
Shift.
Digamos que queremos alinhar todas as caixas pela esquerda
da primeira. Sua seleçãodeve aparentar a seguinte forma:
Alinhamento 1 • .. , • , • •• • • 13
: : : : : : : :; :! il:'l:h'!hli::i:::li::i 1i'!::1::i1::i1:i('!!: : . : : : · : : : : : :
........ 'j ,: ........ : ..
. . . . . . . . ....... , ................ .
: : : : : : : : :·i)i:~lr~t1~U~ll~!i!H~ii~U,t1~i!~ll(ii: : : : : : : : : : 1 : :
Fig. 35 - Exemplo de seleção
Para executar o alinhamento, clique em Formatar I Alinhar 1
Esquerdas. O resultado é o seguinte:
i i i ~r;)111'1'1l;i!'1H';á;l;l;;;'1i1 n'1:;l11 \ 1 \ .\ ; ; ; :\ \ i i \ ; ; \
: : : :'ãi)!!~!l~!l~!i~ll~!'!'li~!!~!l~!i~li~li(i( : : : : : : : : : : : : . : : : :
Fig. 36 - Caixas alinhadas
É muito comum, quando alinhamos rótulos com caixas de tex-
to, que a descrição fique um pouco mais acima ou abaixo da caixa.
Veja:
Alinhamento Ei 1
. . . . . . . . . . . . . . . . . . . : .·: ~:. : ,: : : :
1 Nome·: ·.- ~;· ·~:· . ··.· ..
:)::· :·: :::·!::- >>::1·:,·-:::i:·:,:_.-:,:'., : ,:,: :·:":_.:.
: \ ':·: :~: :-:· :·:".::.: :-:":·:·: /.:·:: ~: :'.:
. . . . . ··• . . ·•. . . . . . . ~ . . .. ' . . . •. . . . . . .
• • • • • • • •• •••• • •••••• • 1 ••••••
Fig. 37 - Rótulo e caixa de texto não-alinhados
1 1:
't
1
11
; i
1
t
'
1,
1
1
,, ·
l'
1 '
1 '
1
1,
i. '
1
11,
11,
1, .
' l i
'li
:' ÍI
,1
,,.
,,I !•
1
!1
1
!
·1
1
118 Desenvolvendo Aplicações Poderosas com Excel e VBA
Fazendo uma seleção onde o objeto guia é a caixa de texto,
podemos uti lizar o menu Formatar I Alinhar I Meios e teremos o
seguinte . resultado:
... . ....... . . . .. ' . . .... ... . .
. . . . . . . -~~~~· . . ' .... .
· 1 . .. , ... . .. .
: : Nome:. . .' .... .. .
. . . . . . . . . . . .. . •. : .. · .... · .. . ..... .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
• • • • • • • • • • • • • • • • • • • t . . .. . . .. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .. . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fig. 38 - Rótulo e caixa de texto alinhados
formatar/Criar Mesmo Tamanho
Esse menu possui as funções de dimensionamento proporcional en-
tre objetos. As opções são Largura, Altura e Ambos. Vejamos a
seguinte janela de exemplo:
Ok 1 : : : : : : : : : : : : : : : : : : ~.: ~~~- . ... .. .. . . .. . ... . . . .
1 · . . ..
Cancelar - : : : : :
. ... . .... . ... . .......... · . .. . .... .
Fig. 39 · Botões de tamanhos diferentes
Não esqueça que devemos manter as mesmas regras de sele-
ção para fazer o redimensionamento. Vejamos como fica nossa ja-
nela usando o menu Formatar I Criar Mesmo Tamanho I Largura:
Criar Mesmo Tamanho · ~ ·· · -,... 13
........ . .... . ... ·.· . .. . .. . . .. . .. .
Fig. 40 - Botões com mesma largura
d
Design de Userforms 119
Usando o menu Formatar I Criar Mesmo Tamanho I Altura:
Criar Mesmo Tamanho · · · · EI
Fig. 41 • Botões com mesma altura
Usando o menu Formatar I Criar Mesmo Tamanho I Ambos:
............... . ... . . ... . ... ..
: : : t11,!,;,,iii,i;ói!i,1,imii!· .. : : : : : : : : .: : : : : ·: : : : :· : : i
~ ~ ~ Ê_,,~,,~,i~ :~W*'' ::;:~ ~ ~: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ i
:: :+:::.•::t:E:~:::1:::y::
... ........ . . , , , .............. • . • .. .
. . . . . . . . , ........ . . . .. .. .... · -· . ... '.
Fig. 42 - Botões com largura e altura iguais
Formatar/Dimensionar para Caber
Esse comando diminui o tamanho dos botões para caber exatamen-
te o texto neles digitados.
Tornando por base a Figura 42, vejamos corno ficaria o seu
uso:
Dimensionar Para Caber · 13
Fig. 43 - Botões Dimensionados para Caber
1, 1
1
d
li
l/ 1 I,,
1 1
1
! '
J I
l
,1
íl
J:
J
it
,,
'I
,,
1
1 ~
1,
120 Desenvolvendo Aplicações Poderosas com Excel e VBA
Formatar/Dimcznsionar à Gradcz
Dimensiona os controles de forma que eles tenham sua borda sobre
os pontos da grade do formulário. Vejamos a aplicação desse co-
mando sobre a Figura 42:
Dimensionar à Grade 13
: •. :.:.::.~ •. ::.:.::::.: .. :_:·:•: __ :: •. :·:.·:··r:··::;:::
: : : : : : : : : : : · : : : : ! , Canc~lar , ( : · : : : : :· : : :
.... . .... '. . . . . . . . . • . •,,• .. : .. _.·
: . . . . . . . . . . . . . . • ' ... . ... .
. . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . .
. . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . .
. . . . . ... . . ... . . . . . . . . . . . . . . . . . . . . . .
Fig. 44 - Botões d;mensionados à grade
f ormatar/Espaçamcznto Horizontal
Esse comando de menu controla a distância horizontal entre os ob-
jetos. Existem quatro possibilidades: Criar Igual, Aumentar, Dimi-
nuir e Remover. Como um exemplo, tomando por base a Figura 42,
vamos utilizar o comando Remover.
Espaçamento Horizontal .. -' · · · - · - 13
Fig. 45 - Remoção do espaçamento horizontal
f ormatar/Espaçamcznto Vczrtical
Esse comando de menu controla a distância vertical entre os obje-
tos. Existem quatro possibilidades: Criar Igual, Aumentar, Diminuir
e Remover. Como um exemplo, tomando por base a Figura 42,
vamos utilizar o comando Remover.
~----------------------' ;
l
J
.í
~
'
Design de UserForms 121
Fig. 46 • Remoção do espaçamento vertical
Formatar/Centralizar no formulário
Centraliza, no formulário, qualquer botão selecionado. Existem duas
opções: Horizontalmente e Verticalmente. Vejamos esses coman-
do aplicados à Figura 42.
Centralizar Horizontalmente · · · · , · EI
... • ' • ... · ... ' • , • , • ..... ..... '• ........ ... ·.
: : : : : : : : : : : : : 1: : : : :-: : : : : : :
: : ::: :-:·: : : .: : : : 0k : : :-: : : : : : : : :, __ ____.
.. . · .. ....... ...... .... •, .. .. ...... .
~ : : : · : :·: : · : ; : : : :: ·· : · .' • .' • ! . ' '.."-·', : · : ··: · : . : ·>·: : : : :
.... .- . .. , · ·. · ..• . Cancelar ·: . : · •. ·· ·: . • , ..
. . . . . . . . ·..•. . . ...•....•.. 1.
:- : :- : ·; ·: : : ::,..: : : . : :# ' : : .. : :.: ' : . ..: .: : . : : . : ·: -:.: : : : ·'·: :
. · ............. • ' • .................. .
. . - .............. · .. .... ............ .
Fig. 47 - Alinhamento horizontal no formulário
Centralizar Verticalmente · · · · EI
:. i ! ·!. i : ::: :·1 ! .::: : ·:/:·:·.;:.: .. \/Ti·:•! ! . : .• : .;··: i
;, : : . : : . ·. 0k · · l : :, · Cancelar f ....... .
. - 1 . . -... .... .
. . . ,..... . ....... .
'. ::Ln ::v::: ::.u::t:::1 :n: :::: :
Fig. 48 - Alinhamento vertical no formulário
Formatar/Organizar Botões
Esse menu faz uma organização de botões no padrão Windows. Te-
mos duas opções: Inferior e Direita.
..
' 1
' 1
J
·I
1
122 Desenvolvendo Aplicações Poderosas com Excel e VBA
Vejamos exemplos baseados na Figura 42:
Organizar Botões Inferior · Ei
Fig. 49 - Organjzação inferior
Organizar Bot6es Direita · · ·. ,. · , · Ei
.... .. ... . ...... . .. . ... . .... . ....
. . .. . . . . . . . . . . . . .. . . . . . . . . . . . . ... . . .
: : : : : : : : : : : : ' : : : : : :· : : : : :·· .. 'ok . . r : .
. . . . . . . . . . . ... . .. . . . . . . . • ' · .
. . ' . . . . ....... .. . . . · ..... .. . . .. . . • .
. . . •. . . . . . . . . . . . . . . . . . . . . . 1· .
: : : : : : : : : : : : : ~ . : : :, : : : : : : · Cancelar : · :
.. . .. . . . ..... . ..... . ' . . . -· .
. . . . . . . . . ····· . . .. . ........ .. . . ... .
. . . . . . . . . . . . . . . . ... ... . . . . . • .. . . . . . .
: ..... . .. .. ... . . . ....... ... . .. · . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fig. 50 - Organização à direita
Prepara~ão de oma Interface
Saber prepararuma interface é algo muito importante. Atenção a
alguns detalhes como, por exemplo, sempre aliar alguma função
para a tecla Enter em qualquer objeto ou, dependendo do estado
de um objeto, fazer com que a tecla Enter comporte-se de for-
ma mais adequada.
Estou apresentando, como exemplo, uma interface peque-
na, mas bem definida e bem estruturada. Aqui está o bom uso da
propriedade Default dos botões de comando e a interface pode
ser utilizada sem a necessidade de utilizar o mouse. Este é um
belo exemplo de automatização.
Vejamos o formulário:
Design de UserForms 123
Cadastro de Alunos . · · 13
r-----------·· f··' ·." ''' . . '
AkJnos: ·. ·Adiciür,'3r · ·
· " 1, .. ...-: · · ~,, -· · · ··~ · C1J -' -1 :v.• ·.~·· ~· t'"
-~- · ~xduír j · ·
Fig. 51- Formulário automatizado
Vejamos uma breve descrição da funcionalidade desse formulário.
Inicialmente, o botão OK é o botão padrão detectado pelo
Enter. Conforme vamos digitando algo na caixa de texto, o botão
Adicionar é ativado e torna-se o botão padrão. Se todo o texto da
caixa for apagado, desabilita-se o botão Adicionar e o botão OK
volta a ser utilizado como o botão padrão.
Dando um Enter, após escrever o nome de um aluno, este é
inserido na Lista. Ao clicar na lista, o botão Excluir é ativado e
torna-se o botão padrão. Quando excluímos o item, damos o foco
para a caixa de texto e desabilitamos o botão Excluir, deixando o
botão OK novamente como o botão padrão.
Este é um tipo de formulário muito prático de se utilizar e
possui automações recomendadas para uma boa aplicação.
Para prosseguir, construa o formulário com as seguintes pro-
priedades para os objetos que o compõem:
Formulário:
Name: Frm_Alunos
Caption: Cadastro de Alunos
Height: 175
Width: 245
Rótulos:
Name: Lbl_Alunos
1.
·,
1 ,
i
'·
'1
'
'
:-1
1
I '
l
1 ,
~ (
i
124 Desenvolvendo Aplicações Poderosas com Excel e VBA
Caption: Alunos:
Autosize: True
Caixa de Texto:
Name: Txt_Alunos
Height: 18
Width: 140
Caixa de Listagem:
Name: Lst_Alunos
Botões de Comando:
Name: Cmd_Adicionar
Enabled: False
Name: Cmd_Excluir
Enabled: False
Name: Cmd_Ok
Def ault: True
Name: Cmd_Cancelar
Para conseguirmos a automação no formulário, incluímos os
seguintes códigos:
Private Sub Cmd_Adicionar_Click()
Lst_Alunos.AdditemTxt_Alunos.Text
Txt_Al unos . Text = " "
Txt_Alunos . SetFocus
, End Sub
I · t1 •
'1
''
', 1 Private Sub cmd_Cancelar_Click()
End
End Sub
Private Sub Cmd_Excluir_Click()
Lst_Alunos.Removeitem Lst_Alunos.Listindex
Cmd_Excluir.Enabled = False
Cmd_Ok.Default = True
Lst_Alunos. Listindex = -1
Txt_Alunos . SetFocus
End Sub
Design de UserForms
Private Sub Cmd_Ok_Click()
For i = O To Lst_Alunos.ListCount - 1
· Planl.Cells(i + 1, 1) . Value = Lst_Alunos.List(i)
Next i
End
End Sub
Private Sub Lst_Alunos_Click()
Cmd_Excluir.Enabled = True
Cmd_Excluir. Defaul t = True
End Sub
Private Sub Txt_Alunos_Change()
I f Txt_Al unos . Text = • • Then
Cmd_Adicionar .Enabled = False
Cmd_Ok . Def aul t = True
Else
Cmd_Adicionar . Enabled = True
Cmd_Adicionar.Default = True
End If
End Sub
Private Sub Txt_Alunos_Enter()
Cmd_Excluir.Enabled = False
End Sub
125
1 .
1
Palavras Finais do Autor
As informações registradas neste livro são as que eu desejo passar a
você, amigo leitor. Espero que esse conteúdo lhe seja útil e me
coloco à sua disposição para contatos de qualquer tipo.
maicris@yahoo.com.br
O Excel é um dos melhores softwares já criados pela Microsoft
e, se bem utilizado, é uma ferramenta muito poderosa e útil no
trato de planilhas eletrônicas. Por isso mesmo o aprendizado nunca
deve cessar. O que mostrei neste livro é o caminho das pedras e você
deve trabalhar muito em cima dos códigos para chegar a criar suas
próprias aplicações de automação.
Muito obrigado pela sua atenção e espero que você crie gran-
des aplicações.
Maicris Fernandes