Baixe o app para aproveitar ainda mais
Prévia do material em texto
11111111111 l llf H Maicris Fernandes esenvolvendo Aplicações Poderosas com xcel e VBA • Acesse o código das planilhas • Gere e execute códigos VBA em suas aplicações • Conheça os objetos: Application, \VorkBook. WorkSheet e Range • Aproveite todo o potencial dos (;serforms e crie sistemas profissionais O ~~- '/~\r--..:. fitl•f•ft.\ Books' ! . ' ' l ~ 1 t 1' 1 1 1 1 " ' \ L Desenvolvendo Aplicações Poderosas com Excel e VBfi 1 ' i ' l ,\ 1 1 ' · 1 '' t Sumário '\ Prefácio XIII 1 - O Ambiente VBA 1 2 - Acessando o Código pela Planilha 9 Criando um Botão na Planilha ••••••• ••• •••••.• •••• •••••••••••••••••••. ••••••••. 13 Criando um Botão na Barra de Ferramentas •••••••••••••••••••.•••••••••••.• 14 3 - Linguagem de Programação 19 Sub-rotinas .......................... .... .. ....... ................................. 21 Criação de uma Nova Sub-rotina ••••.••••••.•.•••.••••••••••••••.••••••••••••• 22 Constantes ........... . ...... . .. .......... ......................................... 23 Variáveis •••.••••.••..••••••••••••••••••• ••• •••.•••. ••••• •• .•••• ••. ••• •• ••.•••••••. 24 Variáveis Estáticas ... . ....... . ...... . ......................... ! •••••••••••••• 25 Operadores •••••••••.•••••••••••••••••••••••••••••• •• •••••••••••••••••••••••••••••• 2 6 Vetores ••• ••••• •••• ••••.•••.••. •••••• .•••••••••••••••••• •••.. ••••..••.•••••••.•• ••. 27 Condicionais •• •••••••••••••••..••.•••.•••• •••••••••••••••••••.•••••.•••.•..••••••• 28 Laços ••••• ••••••••••••••••••.•••••••••.••• •••• ••••••.••.••.••••••••••••••••••••••••• 30 Função lnputBox •••••..•.•.••.•••••••.••••••••••••••••••.•••.••.•• •••• ••••• •.••••• 33 Função MsgBox •••••••••••.•...••.••. •••• •• .••••••• •••.•.• •••• •••••.•• •••••••••••. 34 Funções Internas .•••.••••••••••••••• ••••..•...••..•..•••.••• ••• •.•....• •••••••.•• 37 Funções ••••••••• •••••• •••••••.• ••••• ••••• •••••• ••••••••••.••••••••.••••••••.••• •.. • 42 4 - Objeto Application 45 Propriedade DisplayAlerts ••••••••• • ~ •••••••••••••••••• ••••.•••••.•• ••••••••••••••• 47 Propriedade DisplayCommentlndicator ••••••••. •••••••••••••••••••••••••••••.. 47 Propriedade DisplayFormulaBar ••••••••• •• ••••••••••••••.• •••••.••.. •••••••• ••• 48 Propriedade DisplayFullScreen ••••.•• •• •••••••••••. ••••••••••••••.•••••• ~ ••••••• 48 Propriedade EnableAnimations •• •••• ••••••• •••••• ••• ••••••• •••• ••••••.••••.••.• 49 Propriedade EnableAutoComplete •••••••••• •••• ••• ••••••••••.•••• ••••••••.••••• 49 Propriedade EnableSound •• ••• •• •••••••••••••••• ••••• •••••••.•••••••••••••••••.• 49 Método OnKey ••••.•.••••••••••••••• •••••••••••••••••• ••••••••••••••••.•••• ••••••. 49 Método Quit . ...... ............................................... .................... 51 5 - Objeto WorkBook 53 Propriedade FullName ••••••• •••• •••••••••••••••••• •• ••••••••••••• •••••••••.••••. 55 Propriedade Path ••••••••••••••••••••••••.•••••••••••••• ~ ••.•••••••• ••.•••.• •••••• 56 Propriedade Saved . ......................................... . . ................ .. .. 56 Propriedade HasPassword •••••••••••••••• ~ •••.••...••••••••••••••.••••.•..••..•. 56 Método Activa te .•••••••.••••. . •••. ••••• •• •••.• ••••.•••••••••••••••••••••••••• •• · .. 56 Método AddToFavorites ••••• ••••••••.•••••••••••••.••••••••••••••••••••••.••.••• 56 Método Close ..................................................•........... . ...... 56 Método PrintOut .............................. .. . ............ . ....... . ............ 57 Método Save •• ~ .•••••••••••••.••••.••••. •..••.•••..••..•••••••..•••.•..•••• ••.•••. 57 Eventos de um Workbook ••.••••••••••••••• ~· •••••••••••••••••• ~ ••.•••.••• ••••.• • 58 Evento Activate •••••••.••••.•••••••••••.••••••••••.••••.••.•••••••••••••••••• • 59 Evento BeforeClose •••••• •••••.••••••••••••••••••••••••••••••••••••••.••••.•• 59 Evento BeforePrint ••••••••.•.••...••...•.••...•••••••••.•• ••.••.••.••.••..•.. 60 Evento Deactivate ••••••••••••••••••••••••••••••••••••••••••• •.••.•••••.•••.• 60 Evento NewSheet •••• · •••••.•••.•••..•••.••••.•.•. •••••••••••••••••••••• ••• •••• 61 Evento Open .••••. •••••••••••••••••••••••••.•.•.••••••••.•••.•••••• •••• •••••.• 61 Evento SheetActivate ..•.•• . ••.••.•••....•••••••...•...••••••••••..••.••..•.• 61 Evento SheetBeforeDoubleClick .. ....... .. .... ...... .. . .................... 62 Evento SheetBeforeRightClick ........ ........... ........................... 62 Evento SheetCalculate .......... ....... ... . ....... ..... .... . .... .... . .. . ...... 62 Evento SheetChange .•.•...•••••.••.••..•••..••..••••••••.•.••..••.••••..••.. 62 Evento SheetActivate ............................................... ... . .. .-•.• 62 Evento SheetSelectionChange ...................... ~ ......... .... . ....... · .. 62 6 - Objeto WorkSheet 63 Propriedade Cod~Name •••••• •.••••.•••••••.••.•.••••.•.•••..•••••.•••••••••••••• 65 Propriedade Name •••••••••••••.•••.•••••••••.•• • · ••..••••••••••••• ••• ••••••••••••• 65 Propriedade ScrollArea ................... . . .. ..................... ~ ........ ..... 65 Propriedade Visible ...•• .......••••.•.................•.. ••...••.•..•...•••••..•.. 66 Método Activa te ................................................ · .................. 66 Método Copy .................. ...................................... .............. 66 Método Detete •••••••••• • •••••••••••••••••••••••••••••• • •••••••••••••••••••••••••• 66 Método Move .. · ........•.......................................................... 66 Método Select •••••••••••••••••••••••••••••••••••••••••••••••••• • ••••••••••••••••• Eventos de um Worksheet •••••••••••••••••••••••••••••••••••••••••••••••••••••• 67 67 Evento Activate ............................................................... 6 7 D Evento BeforeDoubleClick ••••••••.•••••••••••••••••••••••••••••••••• · •••••••. 6 7 Evento Bef oreRightClick ............................ ~ ....................... 68 Evento Calcula te •••••••••••••.••••••••••.••••••••.•••••••••.••••••••••••••••••• 69 Evento Chang e •...••.•••••.•••••••••••••••••••••••••••••••.••••••••••••••..••• 70 Evento Deactivate ••••••••••••.••••••••••••••••.••••••••••••••...••••••••• _ ••. 71 Evento SelectionChange ••••••••.•••••.•••••••...••••••••.•••.••••••••.•.••.• 71 7 - Objeto Range 7 3 Representação de um Objeto Range ......................•................... 75 Propriedade Cells ..••.•••••.•..••.•••.••.•...•..•..•••••••••••••••••••••••••••••.. 7 6 Propriedades Column e Row ••••••••••••••••.• •• ••. •• .•••••••••••••• •••••••••••• 76 Propriedades Columns e Rows ..................... · ............................. 76 Propriedade Address ..•••••.•••.••...••...•..•.•...••••...•..•....•..••.••.•••••• 77 Propriedades ColumnWidth e RowHeight ..................................... 77 Propriedade Fórmula ...•...•..•••••.•••••.•••••.•••...••••••.••...•....•••..••••• 77 Propriedade HasFórmula .••.•••...••••••••••.••••.••••••••.••••••••••••••...•••. 77 Propriedade HorizontalAlignment .............................................. 78 Propriedade Locked •...•.•....•••...••..•..•.••..•••• •....•..•....•••••..••• ••• .. 78 ~opriedade Value ..••..•..•............•......••••.•...•..•.....................• 78 Método AddComment ....••.........•• · .•....•.....••••..••.••.•••.•••..••••. ••••• 79 Método AutoFi l ter •••..••.•.••••••••.••.••......•..•..•..•.••...• · ..••••••••....••• 79 Método AutoFit ..•••..••• .. .•.•• •..•.•...••••••• .•••..•••• .••••.••.••••• ••••••••.• 79 Método Border Around •..•.......••.••..•.•... : .•.••..•.•••..•.•••.•••...••..•.•• 79 Método Clear ........ . ............................................................. 80 Método Copy .•••...•••..•..•••.••.•.••.•..••.•..••.••.•..•••.••..•••••••.•.••••••• 80 . Método Delete ••••••.• · •••. •.. ..••...•...•..•.••. •.•..•• ••.• ••• ....•• .• ••..•...•... 80 Método FillDown, Fillleft, FillRight, FillUp ................................... 81 Método Find .•••••..•••••••••••...••• ••••.••.• · · • • • • ~ • • • · • • • • • • • • • • • • • .•••..••.•••• 81 Métodos FindNext e FindPrevious ........................................ ..... 81 Método I nsert ... ..... ............... . · · · · · · · · · · · · · · · · · · · · · · · · · · · · · • · · · · · · · · · · · · ... 82 Método Merge Método Select •••• .••••..•••••..•••••.•••••••••••••.••••..••••••••••• 82 ............. • • • • • • • • • • • • • • • • . • • • • • • • • • • • • . • • • • • • • • • . • • • • • • • . • • • • • • . • • • • • • • • • • • • • 82 Me, todo Sort ...... · · · · • · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 82 .................... Coleção Borders .....•. ...•........... · · · · · · · · · · · · · • · · · · · · · · · · · • · · · · · · · · · · · · · · · · · · 83 Propriedades Colar e Colorlndex •.. · · · · · · · · · · · · · · · · · · •· · · · · · · · · · · · · · · · · · · · · · · · · 83 Propriedades LineStyle e Weight ...... · · · · · · · · · · •. · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 83 O Objeto Font .. ~ ................. · · · · · · · · · · · · · · · · · · • · · · · · · · · · · · · · · · • · · · · · · • · · · • · · 84 O Objeto Interior ••••••.•••••••••••••••••••••••••••••••.•••••..•••.••••••••••••••. 84 Propriedades Colore Colorlndex ........................................... 84 Propriedade Pa ttern .•••••••••••••••.••••••..•••••••••••••.•••••••••••••.••••. 84 Propriedades PatternColor e PatternColorlndex .......................... 84 8 - UserForms 87 Carregando um Formulário ..................................................... 90 Propriedades de um UserForm ................................................. 91 Propriedade Name ••.•••••. ••••••••••••••••••••.••••••••.• .•••••••.••••••••••• 91 Propriedade BackColor ••••••••••••••••.•••••••••••.•••••••••••••••••••••••••• 91 Propriedade BorderColor ••.••••.•••••••••••••.•.••••••••.•••••••••••••••.••• 91 Propriedade BorderStyle ••••.••.•••.••.•••••.•••••.•••••••.••••.••••••.••.•.•. 91 Propriedade Caption •••.•.•••••.••.••....••••••••••••••••.••. •••.•.••..•..•.• 91 Propriedade Enabled •••••..••••••••••••.••.•• ~ •••.••.•••• •• ••.•..•••••••••••• 92 Propriedade Font ••.•••••.••.••..••.•.•.••••.••••.•••.••••.•••••.•••••••••..•. 92 Propriedade ForeColor •••.••••••.••••••.••••••••.•.••••••.•••.•••..•.•.••.•.• 92 Propriedade Height •••••••••••••••..•••.•••••.••••••..•••.•••••.••••.•.••.••. 92 Propriedade Left ••••••.••.•••.•.•••••••.••••••.•••.•••••••.••••••••••••••••••• 92 Propriedade Mouselcon ••.••..•••..•.••.•••••.•••. •.• •.••..••.•..•••.••.•.•.. 92 Propriedade MousePointer ............................ ...................... 92 Propriedade Picture ••..••.••..•..•••••.•••..•..••.•••••••.•.•.••••••••••••••• 92 Propriedade PictureAlignment .............................................. 92 Propriedade PictureSizeMode ......... .... ... ........... ....... ............. 93 Propriedade StartupPosition ................................................ 93 Propriedade Top ...•••••.••.••••..•.••.••.••••.••••••••••..•. ••••••••••••••••• 9 3 Propriedade Width •.••.••••••..••.••••••••••.. •• •.••••..• .••••••••••• ~ •••.••• 9 3 Propriedade Zoom ............................................................. 93 Métodos de um UserForm ••••••• ••.•••••••••••••••••••••••••.••••••••.•.•••••••• 9 3 Método Hide •••••••••.••.••.•••••••.•.•..••.•.••.•.•.•••.•...••••••••..••.•.•. 93 Método Show ..............•.......•....•......•...•.........•..••....•...•.... 9 3 Método PrintForm •••..•••••..•.•..•••.••.••.•.•••.•••••••.••••••.•.••••••.•.. 9 3 Eventos em um UserForm ....................... .. ........•..................... 93 Evento Activate ....... ........................................................ 94 Evento Click ......................................... .......................... 94 E vento DoubleClick ...................... ............ . ........... . ............ 94 Evento Deactivate ...... .. .......................•........................... 94 Evento lnitialize .................. ............................................ 94 d -- Evento KeyDown ••••••••••••••••••••••••••••••••••••••.••••••••••••••••••••••• 94 Evento KeyUp .................................................................. 94 Evento KeyPress •.•.•••••••••••••••••••••••••••••••••••••••••••••• •• •••••••••• 94 Evento MouseDown ••••••••••••••••••••••••••••••••••••••••••••••••••••••••.. 94 Evento MouseUp ••••••••••••••••.••••.••••••••••••••••.•• ••••••••••••••••••••• 95 Evento MouseMove •••••••••••.•••••••••..•••• : •.•••••••••••••••••••••••••.•• 95 Evento QueryClose •••••••••.•.•••••••.•.••••••••••••••••••.••••••••....•••••• 95 Evento Resize •••••••••••••••••.•••.•••.•••••••••••••••••••••.•••••••••••.•••.. 9 5 Evento Termina te •••....•••..•••.....•••........••.......•..•....••••••.•.... 95 Evento Zoom ••••••••••••••••••••.••.•••.•••••.••••••••.••••..••••••••••••••••• 95 Controles de Seleção ••.••••••••••••••••••••••.••••••••••••••••••••••••••••••.••• 95 Selecionar Objeto •••••••••••••••••••••.•••••••••••••••••••••••••••••••••••••• 95 Controles de lnterfaceamento ....................... ........................... 95 Rótulo (Label) ••••.••.••••••...••••...•...••••.•.••••••.•••••..•••••..•••.•.... 95 Caixas de Texto (TextBox) .................................................. 96 Propriedade Name •••••...••••..•••.•••••••••••••....•.•••••••.••••..••••••••. 96 Propriedade Enabled •••...•••••.•••....••.•.•.•.•.••....•...••••••••.••••••.. 96 Propriedade Locked ..•••...•.••.•..•••....•.•.••...•.•••••••••..•...•.....••• 96 Propriedade Maxlenght .•...•..•••...•.••.•.•..•••••••......•••••••.....•••• 96 Propriedade PasswordChar .................................................. 96 Propriedade Sellenght ...••.••••••••••••••....•••••••••••••••••..•.•••••••••• 97 Propriedade SelStart .•...•.•.••••••••..•.•.•..•••••... .•• •••..•...•••••••••••. ·97 Propriedade SelText ..••.••.•••.•••...•....•• •••••.•.....••.....•••..•.•••..•• 97 Propriedade Text ••••••••••.••••••••.••..•...•••••••••..••••••...••••..•••.•.• 97 Método SetFocus •.•..••••••.•••.•.••••.•••••••...•••••••••.••..••• •••••••.••• 97 Evento Change •••••••••..••..•••••.••••••••••••• !' ••••••••••••••••••••••••••••• 97 Evento Enter •••••••••..••••••.••.•••.••••••••••.•.•••••..•••••..••••••••.•••.• 97 Evento Exit ••..•....•...••..........•.......•.......•...••••......•.•••.....••. 97 Botão de Comando (CommandButton) .................................... 97 Propriedade Name •••••••••.•••••••••••••• ••••.•••••••.••••••••.•••••••••••••• 98 Propriedade Caption •••.••••.•.•..•• • • • • • • • • • • • • • • • • • · ••••.•••••.•••••••..••• 98 Propriedade Def aul t ............... ....... ·. · · · · · · · · · · · · . · .................... 9 8 Exemplo Usando Controles de lnterf aceamento ............................. 98 Controles de Opção •••••••••••.••••. • • • · • • • • • • • • • • · • • • · • • • • • • • · · • · • · • • • · • · • .••• 103 Caixa de Seleção (CheckBox) , , , . , . , . , , , , , , , ·, · ·,,,,,,,,,,, ... ,,,, ........ 103 Propriedade Name ••••••••••••• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • · • • • • • • • • • • • • • P(opriedade Value •••••••••••• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 103 103 s Botão de Opção ( OptionButton) . • • • • • • • • • • • . • • • • • • • .. • • • • • • • • • • • • • • • • • • • • • 1 04 Caixa de Combinação (ComboBox) ...................................... 104 Propriedade Name . ~ •••••••••••••••••••••.•••••••••••••• ~ . . . . •• • • • • • • • • • • • • • 1 04 Propriedade List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Propriedade ListCount ........................................•............ Propriedade Listlndex ····················································· Propriedade S tyle •••••••••••••••.••• ········································ Método Addltem ···························································· Método Removei tem ...................................................... . 104 105 105 105 105 Método Clear ................ ...... ·.......................................... 105 Evento DropButtonClick . • . . • • . • • . . • • • . . . . . • . . • • . . • • . • • • • • • • • • . . • • • • . • • • • • • 105 Caixa de Listagem ( ListBox) . .. • .. • .. • .. .. .. .. .. • . .. .. .. • .. • • .. .. .. .. .. .. 106 Propriedade Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 06 Propriedade MultiSelect ................................................... 106 Propriedade Selected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 06 Exemplo (Continuação) ........................................................ 106 9 - Design de Userforms Proporcionalidade e Disposição 113 115 Formatar/ Alinhar .............................................................. 116 Formatar / Criar Mesmo Tamanho .......................................... 118 Formatar / Dimensionar para Caber .................. ...................... 119 Formatar / Dimensionar à Grade ............................................ 120 Formatar / Espaçamento Horizontal • . . . . • • • . • • • • • • . . . • . . . • . . • . . • • . . . . • . . • • • 120 Formatar / Espaçamento Vertical • . • • . . • . . • • . . • • . . . . . . . • • • . • • . • • • • . • • • • • • . • . . 120 Formatar/ Centralizar no Formulário ....................................... 121 Formatar / Organizar Botões • • • • • . • • • • . • • . • • • . . • . . • • • • • . • • • . • • . . . • . . • • . . . • • • • 121 Preparação de uma lnterf ace .•••..•..•••.. .••..••..•••••••• , .•........•...••• 122 Palavras Finais do Autor 127 - Prefácio O Microsoft Excel é um dos softwares de maior sucesso dentro de empresas de todos os segmentos do mercado, devido ao fato de suas funcionalidades abrangerem muitas áreas. Suas planilhas ele- trônicas permitem os mais variados tipos de controles, com acesso a uma gama bem vasta de fórmulas. Mas, quais são as vantagens de trabalharmos com o Excel avan- çado? Além de um maior aproveitamento de toda a potência desse magnifico software, ele pode ser utilizado também como ferramen- ta de autoria. Atualmente, as_grandes empresas não querem gastar na compra de ferramentas que gerem software, como algum software -----~---· . . , de linguagem de programação. Alem disso, sempre existe. a preocu: pação de compatibilidade de sistemas. Assim, podemos utilizar o ~êelpara-criar softwares de controle muito bem elaborados e que terão total compatibilidade com os sistemas já existentes. Para tan- to, vamos utilizar a programação VBA existente nas versões do Microsoft Excel. O VBA (Visual Basic for Applications) é uma variação do ambi- ente de programação VB, adaptado para os softwares da Microsoft. Dentre os programas que utilizam esse recurso, podemos citar com destaque o Access, o Visio, o próprio Excel, entre outros. O ambien- te de programação VBA, assim como o VB, tem por base a lingua- gem de programação Basic, que é de fácil estruturação e bem mais flexível que a maioria das linguagens comerciais. Assim, permite uma assimilação mais fácil de conceitos e uma maior liberdade no trato com os códigos. No Microsoft Excel podem ser elaboradas planilhas com alto teor de programação, gerando os mais variados tipos de aplicações, como cadastro de informações, sistemas de dados, entre outros, ou até mesmo pequenas automações dentro das próprias planilhas. Para tanto, o software conta com uma gama de objetos próprios, desti- nados às aplicações de planilhas eletrônicas. Também temos ferra- mentas para a criação de interfaces personalizadas, visando uma melhor comunicação com o usuário. i, 1 11 ! 1 1. ! 1 1 i' 1, I! ' ' 1 Este livro visa dar a você a possibilidade de criar planilhas com alto teor de programação, auxiliando na criação das aplicações an- teriormente citadas, e todo tipo de aplicação cabível ao Microsoft Excel que você necessitar. Para tanto, este livro está dividido em algumas partes: ambiente de programação VBA, linguagem de pro- gramação Basic, interfâceamento "ambiente de editoração eletrô- nica" versus "ambiente de programação" e objetos específicos do Microsoft Excel. Desejo a você, caro leitor, ótimos momentos de aprendizagem e programação. Espero que, com o conteúdo aqui apresentado, pos- sa utilizar de forma mais proveitosa essa maravilhosa ferramenta, proporcionando-lhe maior sucesso profissional, assim como maior satisfação pessoal. Boa leitura! Pré-requisitos para o Livro Considero como pré-requisito para este livro o conhecimento básico do software Microsoft Excel. O conteúdo apresentado em Desenvol- vendo Aplicações Poderosas com Excel e VBA pode ser adaptado para todas as versões do software, necessitando, talvez, de algum trabalho de ajuste. Softwarczs O único software necessário para a utilização dos códigos desenvolvidos neste livro é o Microsoft Excel. - -------·--, E interessante, também, instalar o Help referente à lingua- gem de programação VBA, através da instalação personalizada do Microsoft Office. Esse .Help. é, interessante como uma referência rápida a algu11s comandos e cohceitos. Um Passeio pelo Livro Este livro está dividido em nove capítulos para um aprendizado mais didático e fácil. A seguir, um breve resumo sobre cada um deles. Capítulo 1 Fala sobre o ambiente VBA. Este capitulo é fundamental para quem está acostumado apenas com a interface de planilha do Microsoft Excel. Quem já conhece este ambiente, ou já programa com o software Visual Basic, pode dar uma passada um pouco mais rápida por este capítulo. Capítulo Z Acessando o Código pela Planilha mostra especificamente como unir planilha e código. Aqui, você aprenderá como executar os códigos criados no ambiente VBA através do ambiente de planilha do Excel. I' Capftalo 3 Este capitulo é fundamental para os objetivos deste livro. Aqui, va- mos trabalhar com todos os comandos e conceitos da programação Basic. o bom entendimento deste capitulo vai designar o seu sucesso no prosseguimento da leitura do livro. Capítulo 4 · A partir deste capitulo, iniciamos a seqüência de capítulos descriti- vos dos objetos do Microsoft Excel. O primeiro é o objeto de maior hierarquia: Applfcation. Esse objeto representa o próprio Excel e tem algumas funções importantes a serem vistas. Capítulo 5 Na seqüência, vêm os objetos Workbooks. Esses objetos representam as pastas de trabalho com todas as suas planilhas~ Em termos hierárqui- cos, o objeto Application é composto pelos vários objetos Workbooks. Capítulo 6 Este capítulo trata dos objetos Wor~sheet. Esses objetos represen· tam as várias planilhas contidas dentro de um Workbook. Aqui, te- remos várias funções importantes, principalmente na parte de even- tos em uma aplicação. Capítulo 7 O último objeto explanado é o objeto Range. Esse objeto represen- ta conjuntos de células e é responsável por uma grande quantidade do trabalho pesado nas planilhas do Excel. Capítulo 8 Neste capitulo, começamos a trabalhar com formulários personali- zados: os UserForms. Taisformulários permitem um ótimo interf aceamento entre planilha e ambiente de programação. Capítulo 9 Finalizando, este capítulo vai ensinar você a criar um bom design P~ra seus formulários e mostrar algumas técnicas interessantes para cnar uma boa interface entre planilha e ambiente de programação. 1 O Ambiente VBA . 4 Desenvolvendo Aplicações Poderosas com Excel e.YBA Em 1, temos o menu e a barra de ferramentas. Pela barra de ferramentas podemos executar a maioria dos comandos que neces- sitarmos durante a fase de composição do código. Assim, vamos analisar os seus itens: ~ ~ Fig. 2 - Barra de ferramentas i ~ : . . • . . . . . Permite alternar para o modo de planilha, sem fechar o editor do Visual Basic. Permite inserir novos elementos . dentro do am- biente de programação. São eles: UserForm, Módulo, Módulo de Classe e Procedimento. Salva a planilha Excel, com as alterações feitas no código. 1 M,·,-~ .. ~ J Recortar, Copiar e Colar. Possuem as mesmas funções conhecidas do ambiente Windows. · Permite localizar determinadas palavras dentro do código escrito. Desfazer e Refazer. Possuem as mesmas fun- ções conhecidas do ambiente Windows. f ~ :· :,i : a) Executar, Parar e Redefinir. Estes comandos es- peciais do ambiente VBA controlam a execução de um bloco de códigos ou de um userform. 1 ~ 1 Ativa e desativa o modo de criação. l~I Ativa a janela Project Explorer. 1 ~I Ativa a janela Propriedades. I WI Ativa o Pesquisador de Objeto. Lista todos os objetos disponíveis no ambiente ·para trabalhar com a codificação no Microsoft Excel. G - 1 - O Ambiente · VBA Falar do ambiente de programação VBA é fugir momentaneamente da estrutura de células do Excel para analisar elementos específicos de montagem de códigos. O acesso ao ambiente VBA se faz por meio do caminho Ferramentas I Macro I Editor do Visual Basic. Vamos dar uma olhada e identificar alguns elementos na ima- gem que segue: .!.l E!:;("::r,;!'t!-''!l@Ç!H.?!J 1 1-,- .:.l Af~ 1,._...;-..1 -l 3 6 Fig. 1 -Ambiente de Programação VBA - O Ambiente VBA 5 Ativa ou desativa a caixa de ferramentas para a criàção de userf orms. Aciona a documentação sobre o Microsoft Visual . Basic, quando instalada junto com o Microsoft Office. I Ln:1;. c~i1I A barra de ferramentas inclui uma informação adicional quando estamos trabalhando com os códigos, a qual informa qual a coluna e qual a linha nas quais o cursor está posicionado. O único item de menu que nos traz novas funcionalidades é o menu Formatar. Este item será bastante usado na composição e organização de userforms e será visto mais adiante. Na seqüência, temos, em 2, a janela Project Explorer. g .. VBAProject (Pastai) EJ .. ·ê] Microsoft Excel Objetos \ ; .... ~ EstaPasta_de_traba l \ ..... lifil Plan 1. (Planl) l \ ..... 9!1 Plan2 (Plan2) ] L .... ifil Plan3 (Plan3) g ... ~ Formulários L ... ~ UserForml Fig. 3 • Janela Project Explorer A janela Project Explorer exibe todos os elementos principais contidos dentro da pasta de trabalho Excel. Ela é composta de pro- jetos VBA ativos, ou seja, todas as pastas de trabalho Excel abertas no momento. Cada pasta é dividida em Microsoft Excel Objetos, Formulários e Módulos (quando houver). A pasta de trabalho e suas 6 Desenvolvendo Aplicações Poderosas com Excel e VBA planilhas são os objetos mostrados em Microsoft Excel Objetos, que também poderão ser codificados com VBA. Formulários vai conter os userforms criados para a aplicação, e Módulos conterá todos os módulos que possuem códigos públicos feitos pelo programador ou criados pelo Microsoft Excel na composição de macros. A janela Project Explorer pode ser ativada por meio da bar- ra de f P.rramentas, como visto anteriormente, ou pelo atalho de teclado Ctrl + R. Em 3, temos a janela Propriedades. Propriedades • Plan 1 . · ' · ·· · , Ei Planl Worksheet • Álf abéti~o -1 · Cat~~~;i;·; d:r~ (Name) -:-.s,. ...... Planl DisplayPageBreak False --- , DisplayRigh~T ~Lef ralse _ 1 EnableAutofilter !False 1 EnableCalculation: T rue : i EnableOutlining False ____ _ ; EnablePivotTable False l .. . ··-· · · ··--• EnableSelection 'O • xlNoRestricti, - -· .. Name ~anl ··-·- ·-- -- ScrollArea 1 StandardWidth ___ .Ia,4~ .. Visible : -1 - xlSheetVisib Fig. 4 - Janela Propriedades A janela Propriedades exibe todas as configurações que po- dem ser feitas nos objetos (planilhas, userforms, entre outros) do ambiente de programação em tempo de projeto. Ela pode ser acessada pela barra de ferramentas, como visto anteriormente, ou pela tecla aceleradora F4 do teclado. 4, 5 e 6 compõem a janela de Código. Dentro dessa janela, aparecem todas as codificações feitas para os objetos Microsoft Excel. - O Ambiente VBA 7 Em 4, temos o objeto que está sendo codificado. Em 5, temos o evento ou função do objeto que está sendo codificado. Em 6, t7mos realmente o local de digitação dos códigos VBA. Este ?mbH~~te f ~z reco~hecimento de palavras-chave de programação, 1dent1f1ca~ao colonda de códigos, listagem de propriedades, méto- dos de obJetos declarados, entre outras funcionalidades. ~oi.xls - Planl (Código) '1.:",··~ ·~.':,: ·····.'r··· ,. ,, .... .. , .. -oA" ~, ... ; • ., • • • , • • • ,~.ar • • ,., .... " \"~ -,. l!lr::1&"2 .......... ,., ... , . • . :"'·ç-""'"" -?·"'!J,. .. , ..... \ • .:..I':->~"':. l!!J~ ~- jwoa k•l~et ..:J jselectionChange , Privatc Sub Workshect_SelectionChange(ByVal Target As Range) 'Pinta o interior do intervalo selecionado de vermelho Targeq.Intcrior.Color • RGB(2SS, O, O) .( ' ' • t End Sub Fig. 5 - Janela de Códigos • .... Na Figura 5, o objeto que está sendo codificado é o objeto Worksheet (planilha). Está sendo detectado o evento SelectionChange (um intervalo de células foi selecionado). O código faz com que, ao selecionarmos um intervalo de células, estas te- nham seu interior pintado de vermelho. A abertura da janela de código dependerá dos objetos com os quais estamos trabalhando. Para codificarmos Planilhas, Pastas de Trabalho e Módulos, simplesmente damos duplo clique sobre estes na janela Project Explorer e seus códigos aparecerão. No caso dos userforms, como veremos adiante, o duplo clique exibirá a interface do formulário com seus objetos e teremos que dar duplo clique nesses objetos para fazer a codificação. 2 Acessando o Código pela · Planilha· - z - Acessando o Código . pela Planilha Um bom começo para trabalharmos com códigos VBA dentro do Excel é analisar os códigos gerados pelo próprio Excel quando está sendo criada alguma macro. Uma macro executa uma seqüência de comandos previamente gravados pelo usuário quantas vezes ele de- sejar, visando uma maior automação dentro de uma planilha. Siga as próximas instruções: Abra uma nova pasta de trabalho no Excel e grave uma macro clicando em Ferramentas I Macro I Gravar Nova Macro. A seguin- te janela aparecerá: M_ome da macro: Leda de atalho: 8_rmazenar macro em: Ctrl+r, jEsta pasta de trabalho . ·- _ .:.) . Descrição: · : · : · · -e: ~ .. ··1·,i:· ~\'.., ... 1~-v~~-- . ,Macro grav~ em-29/0~/2002 por Maicris ~er~~s . . ,~ :,·,;.-r..::~·. ·I~ · ·.:·:,~-f_'\;;;,··:. . ...,, , '•' : ~·-- · ·"";~ ~..:~·:-""':: ...... r~;· ~ T~·-t, , . . . ' .. : ·' .· ' 1. OK ~- ·; e 1 - 1 . . . ancear . . . • .. "':. . Fig. 6 - Janela Gravar Macro A informação essencial dessa janela é o nome da macro, o qual será o acesso para a sua execução. Uma tecla de atalho pode ser interessante caso queiramos executar a macro rapidamente pelo teclado, sem criar um botão específico. Coloque Pintar para o nome da macro e pressione Ctrl + SMft + P para o atalho.Pressione OK e verifique que vai aparecer a barra de ferramentas Parar Gravação. :1 ,! l 1 1Z Desenvolvendo Aplicações Poderosas com Excel e VBA Fig. 7 - Barra de ferramentas Parar Gravação Nesse momento, o Excel está gravando tudo o que você esti- ver fazendo, portanto, não faça nada além do que lhe for especifi- cado. Um simples clique em uma célula pode alterar o funcionamen- to da macro que está sendo criada. Procure a ferramenta de preen- chimento (o balde de tinta) e pinte a célula ativa de vermelho. Detalhe: Não clique em célula alguma. Você está gravando a macro. Se você clicar em uma célula, quando for repetir o processo pela macro, a célula que será pintada é a que você clicou na gera- ção. Para que isso não ocorra, simplesmente pinte a célula que esti- . ver ativa. Quando o processo for repetido, a célula que estiver sele- cionada é a que será pintada. Após pintar a célula, clique no botão Parar da barra de ferra- mentas Parar Gravação. Pronto, sua macro está gravada. Faça o seguinte teste: selecione uma célula qualquer e pressione Ctrl + Shift . + P (o atalho anteriormente definido), ou clique em Ferra- mentas f Macro f Macros, selecione a macro Pintar e clique em Executar. A célula selecionada foi pintada de vermelho. Não é facil? Vamos dar uma olhada no que o Excel fez para que essa macro fosse criada. No mesmo caminho anterior, Ferramentas f Macro f Macros, selecione a macro Pintar e clique em Editar. Automatica- mente o ambiente de programação VBA será aberto: tJtl?T'Q,V,:PT13fT'!O::'.it1'fWfdni"'U.te:4°'.&P&~1t,i!':rr~.tMJ,~~~·i,u..,.~~~ .. .1:'.,,·~r..,;,~'!.'t .·;~i· .. '.f / ~ tca- ["4;' tnwl' ~ Qolu• E;ioewt f«,MWI .. ~ .ja,w A)Wdo . ' fOO ·c1 . g -; l~-. P. ~ .~ · ,-;7-.-~; -;·al ~~ ij ~ -}~ 1 ·w i . . -·-·· .. ----·--- ·- - ·J -·-·-·-· - Fig. B - Código gerado pela macro Pintar Acessando o Código pela Planilha 13 Como você pôde perceber, apareceu um novo módulo na pasta Módulos, chamado Módulo1. Ele foi criado pelo Excel com o propósi- to de armazenar o bloco de código que vai executar a ação de pintar a célula, conforme gravamos anteriormente. Tal código foi criado em um módulo por esse objeto possuir escopo público na aplicação, ou seja, todos os outros objetos reconhecem as funções e sub-rotinas escritas dentro de um módulo. Assim, sua macro pode ser executada em qualquer planilha da pasta de trabalho em que foi gravada. Não se preocupe com o código aqui gerado. Mais tarde, farei uma descrição completa da linguagem de programação e de suas particularidades. Uma coisa que pode ser de muito interesse após o aprendizado da programação é a análise dos códigos gerados pelo próprio Excel, a fim de poder aprender como o Excel faz para exe- cutar algumas ações internas. Criando um Botão na Planilha Como já vimos, podemos executar uma macro pelas teclas de atalho· e pelo menu Ferramentas. Uma outra maneira é criar um botão na planilha que pode ser "linkado" com a macro e poderá executá-la. Para tanto, devemos exibir a barra de ferramentas Formulário. Clique em Exibir I Barra de Ferramentas I Formulários. A seguinte barra surgirá: Q@.fo@xl ... _Aa ~bl : . . . · rXY~ •.: 1 . l,_J -~ ·l . . . .. . : j .·p .. ·_ @ . ! . =eB . ·!illl 1$1 '. .. . l .. ,· · . . 1 . •• lil - A .. , .. - ~ . ·,. :. ' \ ', :, .. • · -~---.:.: ·: ~ r-.= 1 lÉ.EJ, ·. ._ ( . . . "fSf:::::: Qii.l · .. : i .'''" '-, ~ ··.·. r: ·:_;:.:~: .) ',· .:/. ' Fig. 9 _ Barra de ferramentas Formulário 14 Desenvolvendo Aplicações Poderosas com Excel e VBA Tal barra nos oferece recursos de formulários, tais como: cai- xas de combinação, rótulos, entre outros. O que nos interessa nesse momento são os botões. Na Figura 9, localizamos o botão na segun- da coluna da barra, sendo o segundo item da coluna. Clique nele e desenhe um botão de tamanho apropriado em sua pla;1ilha. A janela Atribuir Macro apàrecerá. Para atribuir uma macro ao botão criado, selecione a macro Pintar e observe como fica a janela antes de clicar no botão OK: Nome da macro: !Pintar Pintar ~ . ' OK ' . · I . Cancelar 1 ~ . , ;r .. ·, ;;, 1 • E_ditcr ·: j ;'.: ;::: ------ ·., .. : :~ · : . Gra•-·=:t.· ~ · ., ~·· · • • V 4.1 , • , ' ., .• -------- ~:\. {·~: . : ~· . . ' . t. :~;: :~ : .. ~ . . . ·. . . ·. ~" . . .. · .. . :-· .· . :· --'~~f.'ii~ii.'.·~"::,-1~'" .. --.·-,;,. ' -' -~ .: ;~_ .. ,. 'C.·..;,· .,-• . ~ • • ,-:.,;-• . ,.!:::.l :.v : ·:. , . ; . ' . , M~crcis e~ :·.· '. /rO?as as pastas de trabalho abertas iJ ... , · · · .·- .. · · .. . : Descrição . ' , · · .:·:· · · ~ :·::· ·. · · · ... ' . ~ '~ ·, · · · · ; . : , .. . .'· . Macro gravada em 29/07/2002 por Maicris Fernandes Fig. 10 • Janela Atribuir Macro Clique na planilha e pronto! Já temos um botão qL·e faz ligação direta com a codificação VBA gerada pela macro. Cc mo veremos . j mais adiante, ao criarmos um botão, podemos vincl lá-lo direta- mente a uma função criada por nós mesmos. Criando om Botão na Barra dei Ferramentas Um~ outra forma de execução rápida de uma macr,> é criar um botao na barra de ferramentas. Para isso, clicamos em Exibir 1 Barras de Fer~am~nta~ 1 Personalizar. Surgirá a janela Personali· zar, que possu1 tres gu1as: .; ., l J Acessando o Código pela Planilha 1 5 ";. Barras de f.err ~mentas ) · Co~andos J ; Ó~ões J · · : : ~ . . l . . • • - e_arras de ferramentas: · ·'· :· 11 ... Fig. 11 - Guias da janela Personalizar Na primeira guia, Barras de Ferramentas, podemos criar uma barra de ferramentas personalizada para armazenar atalhos para todas as nossas macros. Vejamos a janela: ·.- [~~-~-~ .. ~-~J~~~~~~~~~~J ] Comandos J · («ões 1 ·· : · · e_arras de ferramentas: Padrão · · · ;-· r;; Formatação r Área de transferência r Atualizar r Auditoria ~ f;; Barra de menus da planiha . r Barra de menus de gráfico !. r Caixa de ferram. de controle '. . r Dados externos : r Defnições de 30 · . r Definições de sombra . roesenho r FiglJ'a · . r Formulários .. r Gráfico · ~ · ?··· . ; . • .. . • ~ U.J ,• . ~ ... ' • .- · • • r -· . . - . - ·-· ·- .. . ., . . ... "'.' . ·•. •.; ~ova ... Renomear, .. Exdulr Reg_efinir .. . ' . .... Ane"t,_at ... ·.· --- Fechar Fig. 12 - Guia Barras de Ferramentas Para · criarmos uma nova barra de ferramentas, clicamos no botão Nova ... , localizado no lado esquerdo da janela. Digite o nome da barra de ferramentas, por exemplo Minhas Macros, e clique em OK. Você verá sua nova barra vazia, com o tamanho de uma única ferramenta, como mostra a figura a seguir: Fig. 13 - Barra de ferramentas Minhas Macros 1, . 1 ,\ ' 1 1, ' \ 16 Desenvolvendo Aplicações Poderosas com Excel e VBA Agora, devemos colocar nossa macro como um botão den~r~ da barra de ferramentas Minhas Macros. Para tanto, devemos ut1l1- zar a guia Comandos. Vejamos a respectiva janela: , -1··1 ... e. .... ,., ,,.,,,4.IJ na Personalizar . · ' . · · · 0 • '. • • • ~ .. ~ . . '' 1 ·. . . ' - . f?l l". - ' ~ ~ ·~ ' - 1 . Fechar 1 Fig. 14 - Guia Comandos Observe que na categoria Macros temos o comando Personali- zar Botão. Este é o link que liga a barra de ferramentas a uma macro. Clique no botão, arraste-o para dentro de sua barra de ferra mentas até que apareça um demarcador de lugar e solte-o. Nesse momento, sua barra de ferramentas deve estar assim: 1 . Fig. 15 - Barra Minhas Macros com botão personalizado Ainda com a janela Personalizar aberta, clique com o botão direito do mouse sobre o botão criado em sua barra de ferramentas e, no menu que surgirá, escolha a opção Atribuir macro ... , localizado no fim do menu. A janela que irá surgir já é nossa conhecidado tópico anterior. Basta selecionar a macro desejada e clicar em OK. 1 l 1 1 l j ! Acessando o Código pela Planilha 17 Algumas outras configurações podem ser feitas. Clique nova- mente com o botão direito sobre o botão e altere a opção Nome. Esse nome é o que vai ser exibido como ajuda quando você parar o mouse sobre o botão da barra de ferramentas. Também podemos clicar na opção Alterar imagem do botão e escolher uma nova ima- gem ou, até mesmo, editá-la na opção Editar imagem de botão. Com isso, a cada macro criada, poderemos acrescê-la à nova barra e, mais à frente, vincular os botões aos nossos códigos. Minhas Macros 13 . @ e , _ H [!] Fig. 16 - Barra Minhas Macros 'I: 5 3 Linguagem de Programa~ão - 3 - Linguagem de Programação Agora que já demos algumas prévias a respeito do Excel, podemos entrar finalmente na programação. Como já foi mencionado, o am- biente de programação VBA utiliza a linguagem de programação Basic. Todas as linguagens de programação trabalham sobre as. mes- mas estruturas, variando a forma como elas são trabalhadas e os comandos utilizados. O básico de uma linguagem é trabalhar com os seguintes ele- mentos: constantes, variáveis, condicionais, laços, funções e sub- rotinas. Neste capitulo, veremos cada um deles detalhadamente, voltados para a linguagem de programação Basic. Sub-rotinas As sub-rotinas são espaços nomeados utilizados para executar blocos de códigos. Normalmente, identificamos uma sub-rotina pela se- guinte estrutura: Sub Pintar ( ) 'Pintar Macro • Macro gravada em 30/07/2002 por Maicris Fernandes With Selection. Interior . Colorindex = 6 .Pattern = xlSolid End With End Sub 1 1 ' ! 1 1 ., ~;~.---------~·~--~--------------------.......... 1 1 1 ' 11 1 1 1 • 1 1 ' ' 1 ! . 1 1 Ll__ 1 J 1 1 l zz Desenvolvendo Aplicações Poderosas com Excel e VBA Percebam que a sub-rotina começa pelo demarcador Sub · se- guido pelo nome, abre e fecha parênteses, e termina no demarc~dor End Sub. Com isso, o bloco de códigos que será executado pela macro Pintar fica entre esses demarcadores. Podemos identificar alguns outros elementos como, por exem- plo, os comentários. Um código deve ser montado da forma mais legível possível para que, mais à frente, quando houver a necessida- de de correções ou expansão do código, este esteja fácil de ser interpretado. Assim, a inclusão de comentários é uma forma muito eficiente de deixar as coisas mais legíveis dentro de um código. Um comentário é caracterizado pelo símbolo de apóstrofo no início da linha comentada. Esse símbolo é um substituto do comando Rem, que é uma abreviação de remember (esse comando pode ser utilizado no lugar do apóstrofo). Dentro de um código no ambiente VBA, as cores dão destaque a elementos especiais e, no caso dos comentários, todos são exibidos na cor verde. Mais à frente, estão os comandos que farão as funções da macro. Um detalhe importante a ser notado em termos de organi- zação é a edentação. Perceba que as instruções que estão sob o efeito da cláusula With estão tabuladas um pouco mais à direita no código. Isso é para mostrar que esses comandos estão dentro dos demarcadores With e End With, assim como todo o código está tabulado em relação aos demarcadores Sub e End Sub. Conforme formos trabalhando com novas estruturas de programação, mostra· rei eficientes formas de edentar os códigos para uma maior legibilidade. Criacão de oma Nova Sob-rotina .a Para criarmos uma nova sub-rotina, sem termos que gravar uma nova macro, devemos entrar no ambiente do Visual Basic for Applications. Para isso, devemos clicar no menu Ferramentas 1 Macros f Editor do Visual Basic, ou pressionar o atalho de teclado Alt + F11. Dentro do ambiente VBA, uma sub-rotina pode ser escrita em vários locais. Ela pode ser um código dentro de uma planilha, um código público escrito em um módulo (o que referencia uma macro para a aplicação) ou pode ser um código escrito dentro de um userform, como veremos mais adiante. Como estamos querendo • Linguagem de Programação · 23 · trabalhar, por enquanto, com códigos que podem ser vistos e execu- tados por toda a aplicação, vamos utilizar os módulos. Caso você ainda não tenha criado nenhuma macro, não deve existir nenhum módulo à vista; assim, teremos que inserir um. Para colocarmos um novo módulo em nossa aplicação, clicamos em Inse- rir I Módulo ou em seu respectivo atalho na barra de ferra mentas, como já mencionado no capitulo 1. Com isso, um novo módulo apa- rece na tela, com o nome de Módulo1. O nome de um módulo pode ser modificado na janela Propriedades, modificando a propriedade Name. Perceba que um módulo não tem interface gráfica, apenas a interface texto para a inserção de códigos. Para criarmos uma sub- rotina dentro desse módulo, podemos digitar direto o demarcador Sub, seguido pelo nome e ( ), ou clicar em Inserir I Procedimento, digitar o nome da sub e clicar em OK (por enquanto, não se preocupe com os outros elementos dessa janela). Pelo segundo método, a palavra Public é incluida antes do demarcador Sub, o que, para nós, é redundante. Para organização, você pode fazer o seguinte: pressionar duas vezes Enter, voltar para cima uma vez com a seta do teclado e selecionar a tecla Tab. Com isso, o seu ambiente VBA está edentado e pronto para receber novas codificações. Constantfls As constantes são palavras que representam valores ou textos que podem ser usados em outros locais da aplicação. Uma constante pode representar, por exemplo, o nome da sua aplicação. Digamos que o nome de sua aplicação fosse Macros. Assim, poderiamas criar uma constante com esse valor para exibirmos em todas as caixas de mensagens que fossem aparecer. Vejamos um exemplo (depois, adi- cione essa macro à barra Minhas Macros): Const NomeApp = ·Macros" Sub Mensagem ( ) . MsgBox "Esta é uma mensagem de teste", vbOKOnly, NomeApp End Sub Para declararmos a constante NomeApp, utilizamos o coman- do Const. Com isso, NomeApp não pode mais ser modificada e conterá o valor "Macros" até o fim da aplicação. ,~--------- - ,rr-- Z4 Desenvolvendo Aplicações Poderosas com Excel e VBA No código que utilizamos como exemplo, MsgBox é uma fun- ção que exibe uma mensagem padrão Windows na tela. Um estudo mais aprofundado sobre essa função será feito mais à frente. Por enquanto, podemos falar que, e~tre aspas, .está a mensagem que vai aparecer. No final, temos o t1tulo da ca1xa de mensagem, que foi definido como a constante que declaramos anteriormente. Per- ceba que a constante foi declarada dentro de um módulo, fora da sub, ou seja, na seção Declarations do módulo. O parâmetro do meio na função msgbox indica quais botões vão aparecer na caixa de mensagens. Aqui, temos mais uma aplica- ção das constantes. vbOkOnly é uma constante que referencia O . valor O, indicando que aparecerá apenas o botão OK na caixa de mensagens. É muito mais fácil lembrar da palavra vbOkOnly do que lembrar do valor O. Variáveis As variáveis têm função similar às constantes mas, como o próprio nome diz, elas podem ter seus valores alterados durante a execução da aplicação. Tecnicamente falando, as variáveis são espaços reservados na memória do computador que servem para armazenar inf armações para uso posterior. Existem alguns tipos de variáveis, cada um ser- vindo para um determinado tipo de dados e ocupando um espaço diferente de memória. Os tipos de variáveis suportados no VBA são: :> String - As variáveis do tipo string são também cha- madas de alfanuméricas, pois podem receber quais- quer tipos de dados no formato texto. Sempre que declaramos· uma variável como string, só podemos carregá-lacom um texto colocado entre parênte- ses. O tamanho máximo de uma string é de 65.4_00 bytes. Byte - Aceita números inteiros, que variem de O a 255, ocupando 1 byte de memória. Ideal para conta- dores de baixa durabilidade e laços simples. lnteger - Aceita números inteiros, que variem de -32. 768 a 32. 767, ocupando 2 bytes de memória. < Linguagem de Programação 25 :> Long - Aceita valores inteiros longos, que variam de -2.147.483.648 a 2.147.483.647 e ocupem 4 bytes de memória. Single - Também chamado de precisão simples, traba- lha com números reais, variando, aproximadamente, de -3.4E38 a 3.4E38 e ocupando 4 bytes de memória. Double - Também conhecido como dupla precisão, trabalha com números reais, variando, aproximada- mente, de -1.8E308 a 4. 9E324 e ocupando 8 bytes de memória. Date - Trabalha com datas e horas, variando de 1 / 1 / 100 a 31 /12/9999 e ocupando 8 bytes de memória. Boolean - Trabalha com os valores booleanos True e False, ocupando 2 bytes de memória. Variant - Pode assumir qualquer tipo de variável, ocu- pando 16 bytes quando armazena números e 22 bytes quando armazena uma string. A declaração de variáveis se dá pela cláusula Dim e não é obrigatória. Quando não declaramos uma variável, estamos usando um espaço na memória do tipo variant, ou seja, podemos estar gasta.ndo muito mais memória do que precisamos. Por isso, mes- mo não sendo obrigatória, a declaração de variáveis é uma boa prática de programação. Vejamos alguns exemplos de declarações de va'riáveis: Dim Nome As String Dim Idade As Byte Dim DatadeNascimento As Date, Dim Casado As Boolean, Dim NumeroFilhos as Byte Dim Numl, Num2, Num3 as Integer Como vimos anteriormente, podemos economizar linhas de- clarando todas as variáveis separadas por virgulas. Além disso, vari- áveis do mesmo tipo podem ser declaradas sequencialmente, cha- mando a cláusula As apenas uma vez. Variáveis Estáticas Existe um tipo especial de variável chamada estática. As variáveis comuns, quando são declaradas dentro de uma sub, são zeradas 1 ,, 1 1 ,\ , :I , ,i 1 1 i :1 \ ' \ . ~ ... ., 26 Desenvolvendo Aplicações Poderosas com Excel e VBA após O término da execução do bloco e códigos contido~ nela. As variáveis estáticas conservam o seu valor para uso postenor e, por isso, são bastante usadas como contadores. Vamos ver um exemplo prático: Insira dentro de um módulo no ambiente VBA a seguinte sub: Public Sub Contar( ) 'Declaração de variáveis Di~ Contador As Byte 'Código a ser executado Contador= Contador+ 1 MsgBox Contador End Sub Após digitá-la, crie um botão na planilha (capitulo 2) e atribua a macro Contar a ele. Vá clicando várias vezes no botão. A caixa de mensagem que aparece está mostrando o valor 1. O que acontece é que, quando entramos na sub, criamos uma variável do tipo byte, que tem valor inicial O. Adicionamos 1 a essa variável e exibimos a caixa de mensagem. Quando acaba a sub, o valor da variável volta a ser zerado. Para construirmos um contador de entradas na sub, devemos substituir a declaração da variável por: Static Contador a s Byte Faça a substituição e execute os cliques novamente no botão. O resultado, agora, é uma seqüência de números que vai aumentan- do a cada clique. O que acontece é que, quando saímos da sub, devido à variável ser estática, ela não tem o seu valor zerado e podemos utilizá-lo posteriormente na mesma sub. Operadores Dentro da programação Basic, temos alguns símbolos especiais que executam operações entre valores ou variáveis. Esses operadores podem ser de três tipos: aritméticos, comparativos ou lógicos. Os operadores aritméticos são: , 1 p ! \ J Linguagem de Programação 27 :> +, ·,. /, *, "' · Operações básicas matemáticas. Res- P:Ct1Vamente: soma, subtração, divisão, multiplica- çao e exponenciação. 8: : Concatenação. Une duas strings em uma única string. :> MOD - Operador que retorna o resto de uma divisão. Os operadores comparativos são: :> = igual a. :> > maior do que. :> < menor do que. :> >= maior ou igual a. :> < = menor ou igual a. :> < > diferente. Os operadores lógicos são: :> And - Faz um E lógico. ~ Or - Faz um Ou lógico. :> Not - Faz uma negação lógica. Tenha bastante cuidado ao utilizar esses operadores lógicos para não incorrer em erros. Opções como Sexo = "Masculino" And Sexo = "Feminino" incorrem em um erro lógico, pois ninguém pode ter sexo masculino e feminino. Assim, deveria ser utilizado o opera- dor lógico Or. Vetores Vetores são variáveis que podem armazenar múltiplos· valores, como se fosse uma lista. Por exemplo, se quiséssemos armazenar o valor do saldo de todos os meses de um ano, poderíamos criar um vetor de doze elementos, um para cada mês. Vejamos: Dim Saldo(! to 12} As Currency Saldo(!}= 1.000 Saldo( 2 ) = 1. 500 Saldo (12) = 900 ZI Desenvolvendo Aplicações Poderosas com Excel e VBA Uma vez declarado um vetor com a sua quantidade de elemen- tos, ele não pode ser redimensionado. Para que_ possamos fazer isso, devemos declará-lo sem especificar a sua quant1dade de elementos e redimensioná-lo de acordo com a necessidade com a cláusula Redim: Dim ValorAnual() as Currency Redim Valor.Anual ( 1999 to 2002) Valor.Anual(1999) = 1.000 Valor.Anual(2000) = 2 . 000 Valor.Anual (2001) = 600 Valor.Anual(2002) = 2.500 A cláusula Redim vai redimensionar o vetor, zerando todo o seu conteúdo. Caso deseje redimensionar o vetor sem perda de ) conteúdo, utilize a cláusula Redim Preserve. Os vetores poderão ser muito úteis no manejo de informações que tenham o mesmo escopo, mas com múltiplos agentes. Condicionais Condicionais são o motor de qualquer linguagem de programação, pois, através dessas estruturas, podemos fazer análise de valores e variáveis e tomar decisões dentro dos blocos de códigos. '!li 1 1 Passamos a vida tomando decisões. O pensamento lógico nos obriga a trabalhar dessa forma para descartarmos as possibilidades que não nos são favoráveis. Por exemplo, digamos que estamos v dirigindo em uma via e nos deparamos com um semáforo. Nossa decisão tem três caminhos: caso o sinal esteja verde, passamos; se- . estiver amarelo, reduzimos; caso esteja vermelho, paramos o vei- culo e esperamos autorização para prosseguir. No computador, é a mesma coisa, só que com comandos especificas. A primeira condicional que veremos é a cláusula lf. Vejamos sua estrutura mais simples: If <<condição= true>> Then <<Comandos>> End If <<Condição = true>> é uma análise de valor ou variável que retorne verdadeiro e <<comandos>> são códigos que serão execu· tados caso a condição seja aceita. Linguagem de Programação Vejamos um exemplo para clarear essa idéia: FUblic Sub PodeDirigir() Dim Idade As Byte Idade= InputBox("Por favor, digite a sua idade.") If Idade>= 18 Then MsgBox "Você pode dirigir! ! J·· End If End Sub 29 lnputBox é uma função que solicita uma digitação do usuário. Ela será vista com mais detalhes à frente. Quando digitamos uma idade maior ou igual a 18, recebemos a mensagem "Você pode diri- gir". Entretanto, quando digitamos um valor menor que 18, nada acontece. Isto se deve pelo motivo de, no primeiro caso, Idade >= 18 retornar o valor booleano True, ou seja, a condição ser verdadeira. Mas não parece que falta alguma coisa? Então, vamos incluir uma cláusula Else, que significa Senão: Idade= InputBox("Por favor, digite a sua idade ." ) If Idade>= 18 Then MsgBox_ "Você pode dirigir!!! • Else MsgBox "Você não pode dirigir!!!" End If Else é uma cláusula que executa blocos de códigos caso a con- dição incorrer como False. E, se tivermos mais que uma opção, o que faremos? Uma formaprática de implementar esse tipo de situação é utilizar um novo lf, que pode ser acoplado à cláusula Else. Vejamos: Idade= InputBox("Por favor, digite a sua idade . •) If Idade>= 18 And Idade<= 80 Then MsgBox •você pode dirigir!!!" Elseif Idade< 18 Then MsgBox •você não pode dirigir!!!" Elseif Idade> 80 Then MsgBox "Tenho que analisar o seu estado de saúde!!!" End If Um detalhe importante a ser notado é a edentação do código, que o torna mais legível na hora da análise e correção. 30 Desenvolvendo Aplicações Poderosas com Excel e VBA Existe mais um tipo de condicional, chamada Case. Observa- remos a seguir sua estrutura: Select Case <<Variável>> Case <<valor>> <<Comandos>> Case <<valor>> · <<Comandos>> Case Else <<Comandos>> End Select <<Variável>> é o objetó que entrará em análise. <<valor>> são os valores que estão sendo analisados para o objeto. Para ficar mais claro, observe o exemplo: Public Sub QuantFilhos ( ) Dim NFilhos As Byte NFilhos = InputBox ( "Quantos filhos você tem?") Select Case NFilhos Case O MsgBox "Está na hora de providenciar ... • Case 1 MsgBox "Um é pouco ... " Case 2 MsgBox "Dois é bom ... " Case 3 MsgBox "Três é demais!!!" Case Else MsgBox "Belo time de futebol ... " End Select End Sub Case Else vai atuar sempre que o valor analisado não satisfizer nenhuma das cláusulas Case analisadas. Com Select Case as possibi- lidades podem estender-se facilmente, o que é ideal para análise de uma grande lista de valores. Lacos .a Laços são as estruturas de programação mais importantes depois 1 das condicionais. São estruturas de repetição, que podem executar 1 l 1 . ! •' - ,> Linguagem de Programação 31 um bloco de comandos várias vezes, de acordo com a vontade do programador ou análise do comportamento da aplicação. Utilizar bem os laços é possuir uma ferramenta importante na composição de códigos, além de ajudar muito a evitar a redundância. O primeiro tipo de laço que veremos é o laço For. Vejamos a sua estrutura: For <<variável>> = rnin to rnax <<Comandos>> Next <<variável>> <<variável>> vai conter os valores delimitados por mine max, e pode ser utilizada dentro dos códigos contidos em <<Comandos>> na hora que for desejada. Vamos ao exemplo: Public Sub Soma () Dirn i As Byte, Di rn Num, Soma As Integer For i = 1 To 3 Num= InputBox("Por favor, digite um dos números " ) Sorna= Soma+ Num Next i MsgBox "A soma dos números é" & Soma End Sub Perceba que a solicitação e a soma serão repetidas para i igual a 1, 2 e 3. Um detalhe novo é a concatenação da mensagem da msgbox com o valor calculado. Isso é muito comum. Utilizando esse recurso, podemos melhorar o nosso código incluindo o uso da variá- vel i na inputbox: For i = 1 To 3 Num= InputBox ( "Por favor , digite o " & i & • 11 número " ) Soma= Soma+ Num Next i MsgBox "A soma dos 3 números é• & Soma Nesse exemplo, as mensagens da inputbox variam de acordo com o valor assumido por i, ou seja, "Digite o 1 º número", "Digite o 2º número" e "Digite o 3º número". Utilize a variável do laço For à vontade dentro do seu código. l l 31 Desenvolvendo Aplicações Poderosas com Excel e VBA Existe um argumento complementar no laço For, chamado Step. Step é o incremento a ser utilizado para uma variável. Por exemplo, se tivermos uma variável n indo de 1 a 10, com step = 2, n assumirá 1, 3, 5, 7, 9. Assim, o exemplo anterior seria facilmente convertido para gerar a solicitação dos número do último para o primeiro. Vejamos: For i = 3 To 1 Step -1 Num = InputBox ( "Por favor, digite o • & i & • 11 número•) Soma= Soma+ Num Next i MsgBox "A soma dos 3 números é• & Soma Detalhe: A única forma de gerar um laço For invertido é utili- zar um step negativo. De outra forma, receberemos uma mensa- gem de erro. Seguindo a seqüência dos laços, vamos trabalhar com o Do. Ele pode ter duas sintaxes: Do While, que podemos traduzir por Faça Enquanto, e Do Until, que podemos traduzir como Faça Até. Veja- mos a sua estrutura: Do While/Until <<condição>> <<comandos>> Loop Com esse tipo de estrutura, podemos expandir o exemplo de soma de números anterior para um número infinito de somas, até que o usuário nos informe que não vai mais digitar valores. Public Sub Soma() Dim Parar As Boolean, Num As Integer, Soma As Integer, i As Byte Do Until Parar i = i + 1 Num = InputBox ("Por favor, digite o • & i & "11 número" & Chr(13) & Loop • O para encerrar• ) If Num = O Then Parar = True Else Soma= Soma+ Num End If MsgBox "A soma dos• & i - 1 & • números é• & Soma End Sub < -- Linguagem de Programação 33 Aqui, nosso artificio foi uma variável de controle chamada Parar. Como foi declarada como boolean, seu valor inicial é False. O toop utilizado foi Do Until (Faça Até), que só encerra quando a variável retornar True. Também foi utilizada uma variável i como contador para que possamos usá-la na mensagem da inputbox e na mensagem final para contar quantos números foram somados. Um detalhe interessante foi o uso de Chr(13) na mensagem. Chr é uma função que retorna um caractere de acordo com o seu código. No caso do código 13, este significa o Carrier Return, ou seja, "pulada de linha". Assim, na mensagem da inputbox, temos o texto que indica o valor para parar o loop na próxima linha. fun~ão lnputBox Até este momento, temos trabalhado bastante com essa função para receber entradas do usuário. lnputBox é uma caixa padrão do Windows que tem alguns argumentos especiais a mais do que a simples mensagem que temos utilizado até agora. Vejamos a sua sintaxe: . InputBox (Prompt, [Title], [Default], [XPos], [YPos], [HelpFile], [Context]) As String O único argumento da função que não está entre colchetes é a mensagem do Prompt, pois é o único argumento obrigatório; os outros são opcionais, por isso até agora não os mencionamos. Va- . mos conferir cada um individualmente: :> Prompt - É a mensagem a ser exibida ao usuário quando executada a inputbox. Title - É o titulo da caixa de mensagem, situado na barra azul. Default - É um valor que já aparece preenchido na inputbox como valor padrão. XPos YPos - É a posição em que a caixa de mensagem , - I situa-se na tela. O padrao e no centro. HelpFile, Context • Utilizados para designar um arqui- vo e um contexto de ajuda para a caixa de mensagem. ' 1, 34 Desenvolvendo Aplicações Poderosas com Excel e VBA Vamos a um exemplo: ( "Q 1 a sua cidade?", "Cadastro de clientes•, Resposta= InputBox ua "Curitiba", 100, 100) ~. Cadastro de clientes .. · · ~ Qual a sua cidade? · ' ' L • , 1 • · , • '. • :· • • . : · : ~· , • -: o K -. · I · .: . · . . ·. ~-. ·:: . · · :- · Cancelar 1 .. · . . ~ . . .. . . . . . . . ' ,,,, . . . . ~ •' .... . '. .. . . ,. , ... ·' - . .. . . ·., Fig. 17 - Exemplo de lnputBox Fun~êío MsgBox MsgBox é a forma mais fácil e rápida de se comunicar com o usuário. Além disso, ela também pode receber entradas através de cliques em seus botões que, por sinal, é um recurso que ainda não usamos. Observemos sua sintaxe: ,, MsgBox {Prompt, [Buttons], [Title], [HelpFile], [Context]) As VbMsgBoxResult :> Prompt - É a mensagem a ser exibida na caixa de mensagem. :> Buttons - Aqui, temos a grande porção de configuração de uma MsgBox. A configuração "Buttons" pode ser divi- dida em botões, comunicação visual e botões padrão. Quanto aos botões, temos as seguintes constantes: :> vbOkOnly - Exibe apenas o botão OK. :> vbOkCancel - Exibe os botões OK e Cancelar. - --- Linguagem de Programação 35 ~ vbAbortRetrylgnore - Exibe os botões Anular,Repe- tir e Ignorar. ~ vbYesNoCancel - Exibe os botões Sim, Não e Cancelar. ~ vbYesNo · Exibe os botões Sim e Não. ~ vbRetryCancel - Exibe os botões Repetir e Cancelar. M. oflE el .~ .,. · ~.J., _.~ , . ,,,...., . 1 ., ~ ICIOS IC · · , · "" >" • · · · · " ~ Exemplo de Botões utiizando Caixa de mensagens Msç8ox ·,~ Exemplo de Botões utilizando C~ de mensagens MsgBox Microsoft Excel · ': ·. ,-, . ~',1-, . ,.-.-. • '. :õ i· EI Microsoft Excel · ~ -. ·· .. r; . ç, 13 · Exemplo de Botões utilizando Caixa de mensagens MsgBox . ' 1 í-.. 8nufãr·-··11 . ' flepetir -1.: !gnoia, . 1 : ' .!_ Exemplo de Botões utiliÍando Caixa de mensageN MsgBox \ · . ·. ,. . ·;· . '!f .... ·--S,iiit! Não j · Cancelar l . Mic1osofl Excel : · . · · · . ·::,. '. -· '.•:.: -;,.\ _:_ · .. :' li Mic101ofl Excel · · : · ·· +> ·,- Ei ; Exemplo de Botões utilizando Caixa de mensagens MsgBox :/Exemplo de Botões utmando Caoca de mensagens MsgBox . ' . - . . .. .. l r---·------~, l i / '' · l.: .. . 6. ~P.f::l_r.._ __ ..)' . Cancelar . ' . .· . ·: . .. Fig. 18 - Exemplo de botões em uma MsgBox Como vamos adicionar outras constantes no argumento Buttons da MsgBox, devemos unir as constantes pelo operador lógico Or. Precisamos tomar bastante cuidado para não colocarmos constantes do mesmo tipo juntas, como, por exemplo, duas constantes de con- figuração de botões. Quanto à comunicação visual, temos as seguintes constantes: ~ vbCritical · Exibe o icone de mensagem critica. :> vbQuestion · Exibe o icone de alerta. :> vbExclamation · Exibe o icone de mensagem de alerta. :> vblnformation - Exibe o icone de mensagem de infor- mação. l . l ! 1 1 ' 36 Desenvolvendo Aplicações Poderosas com Excel e VBA Microsoft Excel 13 •' .. : ' "-··· ' Ir- "OKº'·--11 l· ............................. ) •' ., • !1 • l /"~ '• \ :) .. :· .:.. :~ • , • \ : f Mic,osofl Excel 13 ' ~ • "j ( , <: '., •,, [c::ºc:JI , / ' : ;j Mic1osofl Excel Et Microsoft Excel · ··· EI ' . t;KD ~ ~ É xemplo-~e.ª otões de Co!rurM~~ão Visual :· J . •·· .· • ..• ····•· , i[::q[:JI . L , . , i ~~J- .; .. i, , ~: • •.,. . • . ' ~. Fig. 19 - Exemplo de Comunkação Visual em uma MsgBox Quanto ao botão padrão, temos as seguintes constantes: = vbDefaultButton1 - Toma o primeiro botão como padrão. = vbDefaultButton2 - Toma o segundo botão como padrão. = vbDefaultButton3 - Toma o terceiro botão como padrão. = vbDefaultButton4 • Torna o quarto botão como padrão. O botão padrão deixa com o foco o botão escolhido. Você pode estar estranhando a existência de vbDefaultButton4, sendo que, até agora, trabalhamos com no máximo três botões. A explicação se dá por podermos adicionar um botão de ajuda, colocando a constan- te vbMsgBoxHelpButton junto às constantes de configurações. Os outros parâmetros da função já foram vistos na função lnputBox e possuem as mesmas funções. O retorno de uma função MsgBox é do tipo VbMsgBoxResult e pode ser também analisado. A enumeração VbMsgBoxResult é com- posta por: Enurn VbMsgBoxResult vbOK = 1 vbCancel = 2 vbAbort = 3 vbRetry = 4 vbignore =. 5 vbYes = 6 vbNo = 7 End Enum r:r::d Linguagem de Programação 3 7 :_.-;;.-- vamos pegar um exemplo para deixar mais claro como pode- mos utilizar uma msgbox para recebermos respostas do usuário. public sub Mensagem() oim Resp As VbMsgBoxResult Resp = MsgBox ("Que botão você vai clicar?" , vbYesNoCancel Or vbQUestion) If Resp = vbYes Then MsgBox "Você clicou em Sim! ! ! 11 Elseif Resp = vbNo Then MsgBox "Você clicou em Não!!!" Else MsgBox "Você clicou em Cancelar! ! ! • End If End Sub Detalhe: Declarei a variável Resp como vbMsgBoxResult ape- nas para enfatizar as respostas, o que não é necessário. Entretanto, se você fizer como o meu exemplo, quando for analisar o resultado de Resp, vai receber uma ajuda interativa do VB com todas as constantes enumeradas. f uncões Internas .a As funções internas são funções que servem para auxiliar em cálcu- los e outras necessidades comuns no trato de variáveis e valores numéricos e alfanuméricos. Vejamos as principais funções numéricas: = Abs - Encontra o valor absoluto de um número. = Atn - Encontra o arco tangente. = Cos - Encontra o cosseno. = Exp - Eleva a constante matemática "e" (2,718 aprox) a uma potência dada. = Fix - Retorna a parte inteira de um número. :> Hex - Retorna o valor hexadecimal equivalente. = lnt - Encontra o valor inteiro de um número. 3 8 Desenvolvendo Aplicações Poderosas com Excel e VBA :> Log . Encontra o loga.rit_mo na base 1 O de um número. :> Rnd _ Gera um número aleatório. :> Sgn - Retorna o sinal de um número. :> Sin - Retorna o seno. :> Sqr - Retorna a raiz quadrada de um número. :> Tan - Retorna a tangente. Vamos elaborar um exemplo que utiliza algumas das funções numéricas. Esse exemplo retorna o resultado de uma conta de divi- são e calcula o seu resto sem usar o operador MOD ( que seria a forma mais correta). Vamos a ele: Public Sub Div() ) Dim Dividendo, Divisor, Resultado, Resto As Integer Dividendo = InputBox( "Por favor, informe o valor do dividendo") Divisor= InputBox{"Por favor, informe o valor do divisor") Resultado= Int{Dividendo / Divisor) Resto= Dividendo - Divisor* Resultado MsgBox •o resultado da divisão " & Dividendo & • /" & Divisor & "=" & Resultado MsgBox •o resto da divisão • & Dividendo & "/" & Divisor & • =" & Resto End Sub Esse exemplo é uma pequena amostra do que podemos fazer com as funções numéricas da programação Basic. Vejamos as principais funções alfanuméricas: :> Ase - Retorna o código do caractere correspondente à primeira letra na cadeia. · lnStr - Retorna a posição da primeira ocorrência de uma cadeia dentro de outra. lnStrRev - Retorna a posição da última ocorrência de uma cadeia dentro de outra. LCase - Converte a cadeia de caracteres em minúscula. Left - Encontra ou remove um número especifico de caracteres do inicio de uma cadeia. . uagem de Programação 3 9 ~~-------------------__::....:._ :) Len · Fornece o comprimento de uma cadeia de caracteres. LTrim - Remove os espaços do inicio de uma cadeia de caracteres. ~ Mid · Encontra ou remove caracteres de uma cadeia. ~ Right · Encontra ou remove um número especifico de caracteres do fim de uma cadeia. RTrim - Remove os espaços do fim de uma cadeia de caracteres. Str · Retorna a cadeia de caracteres equivalente ao número. String - Retorna a repetição de uma cadeia de caracteres idênticos. ~ StrReverse · Inverte uma cadeia de caracteres. l 1 1 ' 1 j '\ 1 1 'ti 1 1 I' 1 1 ! 1 1 1 \ l 1 1 1 1 l 1 .\ I; ~ = Trim - Remove os espaços do início e do fim de uma 1 ' • cadeia de caracteres. 1 1 j = UCase · Converte uma cadeia de caracteres para 1 1 1 maiúscula. 1 Na maioria dessas funções, o uso é feito inserindo a cadeia diretamente dentro dos parênteses da função, como, por exem- plo, para transformar "teste" em maiúscula, fazemos UCase("teste"). Entretanto, nem todas as funções possuem esse funcionamento simples, necessitando de uma explicação mais de- talhada. Vamos vê-las agora. = lnStr - Sua sintaxe é lnStr(<<inicio>>,<<cadeia1 >>, <<cadeia2>>), onde o retorno da função será a posi- ção em que houver a primeira ocorrência da < <ca- deia2> > dentro de <<cadeia1 >>, a partir de <<ini- cio>>. Caso não encontre a cadeia, retorna -1. Mid • Sua sintaxe é Mid(<<cadeia>>, <<inicio>>, <<comprimento>>), onde o retorno da função é uma cadeia encontrada em <<cadeia>> a partir de <<ini- cio>> e tamanho de <<comprimento>> caracteres. String. Sua sintaxe é String(<<caractere>>, <<n ve- zes>>), onde o retorno da função é umacadeia < < n vezes>> repetindo <<caractere>>. 1 i 1 \ 1 l 40 Desenvolvendo Aplicações Poderosas com Excel e VBA No exemplo que segue, é so!icitada a d!g~tação de alguma palavra e, através do uso das funçoes alfa~umencas, conver1:emos essa cadeia para a primeira letra em ma1uscula e as dema1s em minúscula. Public Sub Mm() oim Entrada, PrimeiraLetra, OutrasLetras, Saida As String Dim NLetras As Byte Entrada = InputBox (•Por favor, digite alguma palavra 11 ) NLetras = Len(Entrada) PrimeiraLetra = Mid(Entrada, 1, 1) OutrasLetras = Mid(Entrada, 2, NLetras - 1) Saida = UCase(PrimeiraLetra) & LCase(OutrasLetras) MsgBox "A palavra convertida é 11 & Saida End Sub Nesse exemplo, utilizando a função Mid, separamos a primei- ra letra e a convertemos para maiúscula. Separamos as outras letras pegando a partir do 2° caractere o tamanho da cadeia -1, já que tiramos a primeira letra e a convertemos em minúscula. Por fim, concatenamos as duas cadeias e as exibimos ao usuário. No próximo exemplo, temos a validação da digitação de um email. Este é um exemplo bem completo e, por isso, um pouco mais extenso. Public Sub Email () Dim Email, Domínio, Desc, Nac As String Dim Posini, PosFim, Tamanho As Byte Email= InputBox("Por favor, digite o seu email") •verificando a posição do arroba pelo início e pelo fim da 'cadeia Posrni = InStr(l, Email, •@•) PosFim = InStrRev(Email, •@•) Tamanho = Len ( Emai 1) 'verificando a existência do@, e se não está no início do 'email 'também verificando se existe apenas um @ If Posini < 2 Or Posini <> PosFim Then MsgBox "Formato de email não válido• Else 'capturando o que está depois do@, ou seja, o domínio do · 'email • em de Programação 4 1 ~ ! oominio = Mid(Ernail, Posini + 1, Tamanho - Posini) posini = InStr(l, Domínio, •.•) posFim = InStrRev(Dominio , •.•) Tamanho = Len (Domínio} If Posini < 2 Then MsgBox "Formato de email não válido• Elseif Posini = PosFim Then Else 'deve haver apenas duas ou três letras depois do •único ponto Nac = Mid(Dominio, Posini + 1, Tamanho - Posini) If Len(Nac) = 2 Or Len(Nac) = 3 Then MsgBox ·Este é um formato de email válido• Else MsgBox •Formato de email -não válido• End If 'deve ter um gov, com ou algo·parecido entre os 'dois pontos Desc = Mid(Dominio, Posini + 1, Tamanho - PosFim + 1) .,.,. .. ·· ~Nac, = Mid ( Dominio, PosFim + 1, Tamanho - PosFim) / '' If Len (Desc) = 3 And Len (Nac) = 2 Then / MsgBox "Este é um formato de email válido• Else • t MsgBox •Formato de email não válido• End If End If ' , End If End Sub · Vejamos as principais funções de Data/Hora: :> Date - Retorná a data do relógio do sistema. :> DataAdd - Adiciona um intervalo especifico a uma data. :> DateDiff - Subtrai um intervalo especifico de uma data. :> Day - Informa qual dia uma cadeia representa. :> Hour - lnf orma quantas horas uma cadeia representa. :> Minute - Informa quantos minutos uma cadeia representa. :> Month - Informa qual mês uma cadeia representa. :> Now - Retorna data e horário correntes. :> Second . Informa quantos segundos uma cadeia representa. :> Time . Retorna o horário do relógio do sistema. ' .' ' ' ' 1 i 1 1 l 1 j 1 t\l . 'I ' 1 1 \' ' l ' 1 1 i\ i lj \ 1\ ., li 1 1 1 i; 1 \ 1 : 1 ' : 1 '. ' . 4Z Desenvolvendo Aplicações Poderosas com Excel e VBA :, weekday - Informa qual dia da semana uma cadeia representa. :> Year - Informa qual ano uma cadeia representa. Vejamos um exemplo da função DateDiff: Public Sub Idade () Dim DN As Date, Idade As Double DN = InputBox("Por favor, qual a sua data de nascimento?") Idade = DateDiff ( "YYYY", DN, Date) MsgBox "Sua idade é" & Idade End Sub O primeiro argumento dessa função é o tipo de retorno da função. São eles: :> yyyy - Ano. !) q - Bimestre. !) m - Mês. BIBLt<: ~ '~C.11\ F,.. ~··· 1 .~·, !) y - Dia do ano. . ' . . . . t--··c· : 1 ·.J , ' . ' !) d - Dia. F,;, (. :' ... ,. !) w- Fim de semana. [)f." '' . ' :. '\14,, ú c ;..A (: :·., : ;,,,~ !) ww - Semana do ano. ' ' ,·· !) h - Hora. ' ·~ .~ ... -- •'JO!e,,._ __ .. - · !) n - Minuto. !) s - Segundo. Além dessas funções, existem muitas outras.As que foram apre- sentadas aqui são as mais comuns. Conforme houver necessidade, recomendo que consulte a ajuda do Visual Basic for Applications, contida na instalação completa do Microsoft Office. funcões .a Assim como as macros do Excel são vistas como sub-rotinas pelo ambiente de programação do VBA, as funções são vistas como f unctions dentro dos códigos. --- r - m d .. e-:..:..P_ro-=-g:..,_ra_m_a_:,ç_ao ______________ _:4....:3:_ ~ A grande diferença entre uma função e uma sub-rotina é que a ão pode retor~a~ um valor. Alé!11 disso, podemos acessar as funções funÇ criarmos no cóchgo VBA a traves do editor de funções do Microsoft que el Vejamos um exemplo. Da mesma forma que estávamos fazendo fXC as· macros, insira o seguinte código dentro de um módulo. corn pu1,1ic FUnction Tensao (Resistencia As Integer, Corrente As Integer) AS 1nteger Tensao = Resistencia * Corrente snd Function Perceba as diferenças: incluimos atributos a serem passados pela função e esta retorna um valor inteiro, calculado dentro dela. Em qualquer ponto do código podemos chamar a função, como as que vimos anteriormente. Por exemplo: MsgBox Tensa o ( 1 O , 1 O ) Vai retornar o valor 100. Para acessarmos essa função doam- biente de planilha do Excel, clique em Inserir I Função. Observe que a categoria Definida pelo Usuário aparece. Cola fu - ...... .,. 1;..,., -.. , i'';..•, .,.: •• ,,, . _ ,. •• ~ ,,,_ -·~, '·!"< ü , -·:~-~· ~~ r nçao .... -.-..•,12''_-.'i/!,~'.!(-·:. ~-.,, ... t . .,._;-.,.., .. --~·-.... · . .... .. "' " ... , .. ,a:.:11 ··~ateQOria da função: Todas · Financera Data e hora M&emática e trigonométrica Estatística Procura e referência Banco de dados : Texto :: LÓQiea Informa ões ··. ·: , : :-. : ' . .. . l§J°: ·_~:. ·.: . : :<' •' .. V ~ .. r~ 1 tio me da função: . ' -: . ~ . • 1 • ' • ; : • ·: • ·~· • ~ •• ,:, • .. ")! • • . .. . . , '. .. , .. :.1 ·:· OK ... ,._ 1 ' ·: :1 ' 1 ' .< '!.. . 1 ~ ~-; Cancelar · ! · Fig. 20 - Função definida pelo usuário t h 1 :, 1 1 1 1 1 1 l 1 1 ' ti 1 1 1 ! 1 ,1 ' " 1 li 1 11 11 1 1 1 l1 :! ~ l-i, 1 \1 I! ' 1 ,1 1 1 t . 1 1 1 li \1 1, 'I 1, 1! 1 44 Desenvolvendo Aplicações Poderosas com Excel e VBA Escolhendo a nossa função Tensao, temos com ela o mesmo tratamento que uma função do próprio Excel. Com isso, encerramos o estudo da linguagem de programação Basic para o ambiente VBA. Este é o primeiro passo para a criação de aplicações mais potentes dentro do Excel. Tudo o que veremos daqui para frente vai depender dos conceitos apresentados neste capitulo. Portanto, sugiro que você conheça bem esse conteúdo an- tes de seguir adiante no livro. Nos próximos capitulas, vamos estudar alguns objetos especi- ficas do Microsoft Excel. São eles: Application, WorkBooks, WorkSheets e Range. Com esses objetos, poderemos atuar de uma forma mais consistente dentro das planilhas eletrônicas. ,,r·. 4 Objeto fipplication ~ .. .. 1 1 1 \ - 4 - Objeto fipplication o objeto Application representa o próprio Excel e seus objetos deri- vados. Através dele, podemos configurar o Excel em termos de visualização, execuções e outras funcionalidades. O objeto Application possui uma gama muito grande de pro- priedades e métodos e aqui veremos
Compartilhar