Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

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

Mais conteúdos dessa disciplina