Buscar

desenvolvendo aplicações poderosas com excel e vba

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 124 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 124 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 124 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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 veremos

Outros materiais