Apostila VBA
Apostila VBA
Apostila VBA
IMPORTNCIA DA UTILIZAO DE MACROS ....................................... 3 INTRODUO A MACROS........................................................................... 3 COMO CRIAR MACROS? .............................................................................. 4 GRAVADOR DE MACROS X CDIGO VBA .............................................. 4 CRIAR UMA MACRO USANDO O GRAVADOR DE MACROS................ 6 ESTRUTURA DE UMA MACRO ................................................................... 9 OPERAES COM MACROS...................................................................... 11 RENOMEAR UMA MACRO......................................................................... 11 ALTERANDO A TECLA DE ATALHO E A DESCRIO ASSOCIADA A MACRO .......................................................................................................... 14 EXCLUIR UMA MACRO.............................................................................. 15 ASSOCIANDO MACROS A CONTROLES DE FORMULRIOS ............. 16 ASSOCIAR A MACRO AO BOTO ............................................................ 17
MDULO 3 VARIVEIS
DECLARAO DE VARIVEIS ................................................................. 26 OPTION EXPLICIT ....................................................................................... 26 TIPOS DE VARIVEIS ................................................................................. 27 SUBTIPOS DO TIPO VARIANT................................................................... 28 OPERADORES ARITMTICOS ................................................................... 29 OPERADOR DE ATRIBUIO.................................................................... 29 OPERADORES RELACIONAIS ................................................................... 30 EXERCCIO 1 ................................................................................................ 30 VARIVEIS - ARRAYS................................................................................ 34 ARRAY UNIDIMENSIONAL ....................................................................... 34 ARRAY BIDIMENSIONAL .......................................................................... 34 DECLARAO DE ARRAYS ...................................................................... 35 EXERCCIO 1 ................................................................................................ 36 EXERCCIO 1 ................................................................................................ 39 ESCOPO OU DOMNIO DAS VARIVEIS................................................. 41 ESCOPO DE PROCEDIMENTO/FUNO.................................................. 41 ESCOPO DE MDULO................................................................................. 43 ESCOPO DE PROJETO ................................................................................. 45
MDULO 1 - INTRODUO A MACROS NO EXCEL Neste mdulo veremos os principais fundamentos sobre Macros. Conheceremos exatamente o que uma macro, como esta definida a sua estrutura e aprenderemos a realizar algumas operaes. Os conceitos vistos neste mdulo, sero de extrema importncia para o entendimento dos demais mdulos.
IMPORTNCIA DA UTILIZAO DE MACROS
Em determinados problemas, que surgem durante a criao das planilhas em Excel, no conseguimos resolv-los simplesmente utilizando os comandos e frmulas do Excel. Nessas situaes temos que fazer uso de recursos como Macros e Programao. A linguagem de programao do Excel o VBA Visual Basic for Applications. O VBA a linguagem de programao para todos os aplicativos do Microsoft Office como: Word, Excel, Access e PowerPoint.
INTRODUO A MACROS
Se caso surgir uma necessidade de se executar uma tarefa vrias vezes no Microsoft Excel, ao invs de perder tempo executando-as diversas vezes, podemos automatizar esta tarefa simplesmente com a criao de uma macro. Macro uma seqncia de comandos ou funes armazenados em um cdigo VBA, que pode ser executado sempre que se precisar executar a tarefa. As macros so uma excelente opo para automatizar tarefas repetitivas. Com o uso de macros temos um ganho de produtividade considervel, ao evitar que tenhamos que executar manualmente, os diversos passos de uma tarefa, passos estes que podem ser automatizados atravs do uso de uma macro.
Existem duas maneiras possveis para a criao de uma macro: Gravador de Macros Destinado a iniciantes em criao de Macros. Cdigo VBA Destinado a profissionais que possuem uma boa lgica de programao e que dominam a linguagem VBA.
No mtodo de gravao, o Excel grava cada uma das aes que faro parte da macro e transforma estas aes nos comandos VBA equivalentes. Quando a macro for executada, os comandos VBA que sero efetivamente executados. Cada comando VBA corresponde a uma ao efetiva da macro. Por exemplo, vamos supor que por diversas vezes, voc precisa formatar uma determinada clula com Negrito, Itlico, cor de fonte Verde, Fonte Arial com Tamanho 16. Ao invs de ter que executar todos os comandos de formatao sempre que precisar deles, voc pode criar uma macro que aplica todos os comando de formatao. Aps criada a macro, cada vez que voc precisar aplicar o conjunto de comandos de formatao, basta executar a macro, bem mais fcil do que aplicar cada comando individualmente. Antes de gravar uma macro, planeje muito bem as etapas e os comandos que voc deseja que a macro execute. Se cometer um erro durante a gravao da macro, as correes feitas tambm sero gravadas como comandos da macro. Ao gravar macros, o VBA armazena cada macro em um mdulo de cdigo VBA, anexado a uma pasta de trabalho (arquivo. xls). Depois de gravada a macro, voc poder exibir o cdigo da macro com o Editor do VBA para corrigir erros ou alterar a funo da macro. O Editor do VBA um programa criado para facilitar a escrita e a edio do cdigo de macro para principiantes. Voc no precisa aprender a programar ou a usar a linguagem do Visual Basic para fazer alteraes
simples nas suas macros. Nos prximos mdulos veremos como trabalhar melhor com o Editor do VBA. Na figura a seguir temos um exemplo de cdigo associado a uma macro. Esse um exemplo de cdigo VBA:
Alm disso, no Editor do VBA, podemos editar macros, copiar macros de um mdulo para o outro, copiar marcos entre pastas de trabalho diferentes e renomear as macros. Por exemplo, se voc quisesse que a macro formatar, da figura acima, tambm deixasse a clula formatada com sublinhado, voc poderia gravar outra macro para aplicar o sublinhado e copiar as instrues dessa nova macro para a macro formatar.
Iremos criar uma macro chamada FormataCelula usando o gravador de macros, onde esta macro dever formatar a clula atual com Negrito, cor de fonte Verde e com cor de plano de fundo cinza. Para isso, proceda da seguinte maneira: 1. Abra o arquivo Exerccio 1.xls, localizado na pasta da turma. 2. Clique a clula B5. 3. Clique o menu Ferramentas. 4. Selecione a opo Macros, clique a opo Gravar nova macro... Sugira assim a tela Gravar macro:
5. No campo Nome da macro, digite FormataCelula. 6. No campo Tecla de atalho, digite L. Observe que o Excel troca para Ctrl+Shift+L, pois a combinao Ctrl+L j esta associada a outro comando do Excel. 7. No campo Descrio, digite Formata em
negrito, verde e fundo cinza. 8. Clique o boto OK. Com isso, a gravao da macro ser iniciada e todos os comandos que voc executar durante a gravao da macro, faro parte da macro. Perceba que uma nova barra de ferramentas chamada Parar Gravao surge, onde atravs dela podemos interromper a gravao da macro. A partir deste ponto, devemos executar todos os comandos que faro parte da macro. 9. Clique o menu Formatar. 10. Clique a opo Clulas. 11. Formate em Negrito, cor Verde e cor de plano de fundo cinza. 12. Clique o boto Parar Gravao da macro. , para encerrar a gravao
Com isso, a macro FormataCelula foi criada e podemos utiliz-la sempre que for necessrio.
Para executar a macro FormataCelula, proceda da seguinte maneira: 1. Clique a prxima clula a ser formatada, exemplo C8. 2. Pressione Ctrl+Shift+L. A macro FormataCelula executada e as informaes definidas pela macro so automaticamente aplicadas a clula selecionada. Uma outra maneira de executar macros utilizando o menu Ferramentas, opo Macro, subopo Macros.
Com isso ser exibida a janela Macro, onde esto listadas as macros existentes na pasta de trabalho atual, confirme visto na figura a seguir:
Nesta tela, voc ir selecionar o nome da macro a ser executada e clicar sobre o boto Executar. A macro ser executada e as formataes sero aplicadas clula que estava selecionada. Sua planilha dever exibir o seguinte aspecto:
Na macro criada anteriormente chamada de FormataCelula, podemos perceber que ao execut-la os comandos de formatao so novamente executados e aplicados clula onde esta o cursor ou na faixa de clulas selecionadas. Isto acontece porque no ato da gravao da macro o Excel gera para cada comando que efetuamos um cdigo VBA equivalente formando assim a nossa macro. O que iremos ver agora justamente esta estrutura que compem toda a nossa macro. Para acessar os comandos VBA associado a uma macro, proceda da seguinte maneira: 1. Com o arquivo j aberto, clique o menu Ferramentas. 2. Selecione a opo Macro, clique a subopo Macros. Com isso ser exibida a janela Macros. 3. Selecione a macro FormataCelula. 4. Clique o boto Editar. Com isso o Editor do VBA ser carregado e sero exibidas as linhas de cdigo referente a nossa macro.
Estes so os comandos VBA referentes a macro FormataCelula. Caso no entenda os comandos, no se preocupe, pois ainda os estudaremos mais adiante.
A seguir esta descrito o que faz cada um dos principais comandos desta macro: stes com and os apli cam a fonte Arial, o estilo Negrito, o tamanho 10 e a cor de fonte verde, para as clulas atualmente selecionadas. With Selection.Font .Name = "Arial" .FontStyle = "Negrito" .Size = 10 .ColorIndex = 10 End With E
With Selection.Interior stes .ColorIndex = 48 com .Pattern = xlSolid and .PatternColorIndex = xlAutomatic os End With apli cam a cor de plano de fundo cinza, para as clulas atualmente selecionadas. 5. Salve e feche o Editor do VBA.
OPERAES COM MACROS
Depois de criadas as macros podemos futuramente precisar realizar algum de tipo de alterao nelas, seja em seu cdigo ou no comando de teclado (tecla de atalho). Podemos precisar tambm renome-las e at mesmo exclu-las caso seja necessrio. Todas estas aes esto ligadas s operaes com macros.
RENOMEAR UMA MACRO
Esta ao deve ser realizada toda vez que se deseja modificar o nome de uma ou mais macros do arquivo. Para poder renomear uma macro, proceda da seguinte maneira: 1. Com o arquivo aberto, clique o menu Ferramentas. 2. Selecione a opo Macro, clique a sub-opo Macros. Ser exibida a janela Macros
3. Clique a macro FormataCelula para selecion-la. 4. Clique o boto Editar. Com isso, ser aberto o Editor do VBA com o cdigo da macro, onde o nome da mesma vem aps o comando Sub na primeira linha.
5. Altere o nome da macro FormataCelula para Formatar. 6. Clique o boto Salvar. 7. Feche o Editor do VBA. Com isso a macro foi renomeada, caso deseje confirmar, clique o menu ferramentas, selecione a opo macro e clique na sub-opo macros, voc ver na tela que a macro agora se chama Formatar.
Esta ao deve ser realizada caso seja necessrio modificar por algum motivo a tecla de atalho que esteja associada a uma macro e o seu comentrio que de extrema importncia, pois resume o funcionamento da macro. Para fazer a alterao, proceda da seguinte maneira: 1. Com o arquivo aberto, clique o menu Ferramentas. 2. Selecione a opo Macro, clique a sub-opo Macros. Ser exibida a janela Macros.
Nesta tela podemos fazer a alterao da tecla de atalho e da descrio atribudos macro. 5. Na Tecla de Atalho, digite: W. 6. 7. Na Descrio, digite: Formatao em negrito, com cor verde e plano de fundo na cor cinza. Clique o boto OK. Com isso a tecla de atalho e a descrio da macro foram alteradas.
Esta ao dever ser realizada quando no houver mais a necessidade da utilizao da macro no arquivo. Para isto, proceda da seguinte maneira: 1. Com o arquivo aberto, clique o menu Ferramentas. 2. Selecione a opo Macro, clique a sub-opo Macros.
3. Selecione a macro a ser excluda, no nosso caso selecione a macro Formatar. 4. Clique o boto Excluir. Com isso ir surgir uma caixa de mensagem para confirmar a excluso da macro.
5. Clique o boto Sim. IMPORTANTE! Caso a macro esteja associada a algum controle de formulrio, por exemplo, um boto, a simples excluso do boto NO EXCLUI A MACRO associado a este. Com isso a macro Formatar foi excluda do arquivo.
FORMULRIOS
ASSOCIANDO
MACROS
CONTROLES
DE
A associao de uma macro a um controle de formulrio deve ser feita sempre que se deseja executar uma macro de uma forma mais simples e rpida, onde ao invs de irmos no menu Ferramentas, opo Macro, sub-opo Macros, selecionar a macro desejada e clicar o boto executar, podemos apenas clicar sobre um boto e a macro associada a ele automaticamente executada. Esta associao importante principalmente quando a sua planilha for usada por usurios leigos em Excel, facilitando assim os seus trabalhos. Para testar este recurso, iremos criar uma nova macro com o nome de Classificar, cuja tarefa ser de classificar a tabela pelo campo Cdigo em ordem crescente, depois inserir um boto na planilha e associ-lo a macro classificar.
Para isso, proceda da seguinte maneira: 1. Abra o arquivo Exerccio 2.xls, localizado na pasta da turma. 2. Clique o menu Ferramentas. 3. Clique a opo Macro, clique a sub-opo Gravar nova macro. Surgir assim tela Gravar macro. 4. Em Nome da macro, digite Classificar. 5. Clique o boto OK. Aparecer ento, a barra de ferramentas Parar Gravao. 6. Selecione a linha de cabealho da tabela correspondente ao intervalo de clulas A1:F1. 7. Pressione as teclas SHIFT + END + , com isso toda a tabela dever ser selecionada. 8. Classifique a tabela pelo campo Cdigo em ordem crescente. 9. Clique a clula A1. 10. Clique o boto Parar Gravao.
ASSOCIAR A MACRO AO BOTO
1. Clique o menu Exibir. 2. Clique a opo Barra de Ferramentas. 3. Clique a sub-opo Formulrios.
4. Insira na planilha o controle chamado Boto. Com isso, surgir tela Atribuir Macro.
5. Clique a macro classificar para selecion-la. 6. Clique o boto OK. Pronto! Com isso a macro Classificar encontra-se associada ao boto, onde um simples clique sobre este, implicar na execuo das instrues que compem a macro.
MDULO 2 - INTRODUO AO VBA NO EXCEL Uma linguagem de programao, basicamente, uma forma que o programador tem de se comunicar com a mquina, atravs de um conjunto de comandos, rotinas, objetos e funes que executam tarefas especficas. Utilizar-se do cdigo VBA para a criao das macros, oferece ao programador uma grande quantidade de opes para solucionar problemas mais complexos e que no podem ser somente resolvidos com o uso de comandos e funes internas do Excel. A linguagem de programao utilizada no Microsoft Excel o VBA Visual Basic for Applications. Com o VBA possvel que o programador tenha acesso completo a todos os objetos de uma planilha do Excel. Fazer uso do VBA em planilhas do Excel, garante ao programador algumas vantagens como: Acessar dados de uma ou mais planilhas; Manipular objetos; Criar funes definidas pelo usurio, onde este sem dvida um dos maiores benefcios do VBA. Definir condies e controlar o fluxo de dados atravs de estruturas para a realizao de testes condicionais e para a repetio de um conjunto de comandos; Realizar clculos complexos e solucionar problemas que envolvam uma lgica complexa.
O Microsoft Excel nos oferece um ambiente de programao bastante poderoso, com uma srie de recursos que facilitam a criao do cdigo VBA. Dentro deste ambiente, so oferecidas uma srie de facilidades e dicas para que o programador possa encontrar facilmente os objetos disponveis. Para conhecermos melhor o Editor VBA temos na figura abaixo um exemplo de uma macro chamada AplicaNegrito.
Dentro do Editor VBA no lado esquerdo, temos duas janelas que so de extrema importncia, a janela do projeto o VBA Project e a Janela de Propriedades. VBA Project Nesta janela so exibidos os vrios elementos que fazem parte da Pasta de trabalho atual, onde so exibidas as planilhas e mdulos.
Ao criar uma macro, podemos cria-la em uma determinada planilha, mas esta somente poder ser utilizada dentro da planilha onde ela foi criada, caso deseje criar uma macro que possa ser trabalha em qualquer uma das planilhas do arquivo, esta dever ser criada em um dos mdulos existentes. Podemos dentro de uma pasta de trabalho possuir diversos mdulos, principalmente quando se tem planilhas complexas, da podemos dividir estes mdulos em categorias como, por exemplo: criar um mdulo somente para a criao de funes para clculo de data, outro para funes de validao de dados, outro para funes de clculos financeiros e assim por diante. Esta diviso facilita a localizao, manuteno e alterao das funes e cdigos existentes.
Janela de Propriedades Exibe as propriedades do objeto selecionado na janela VBA Project. Por exemplo, ao selecionar Plan1, na janela VBA Project, na janela propriedades sero exibidas as propriedades de Plan1.
PESQUISADOR DE OBJETO
O Editor do VBA facilita muito o trabalho do programador na manipulao de um objeto pois possui uma janela que exibe uma listagem de todas as bibliotecas disponveis, bem como a lista de cada objeto de cada biblioteca, juntamente com todas as suas propriedades e mtodos, esta janela chamada de Pesquisador de Objeto. Para exibi-la proceda da seguinte maneira: 1. Dentro do Editor VBA, clique o menu Exibir. 2. Clique a opo Pesquisador de Objeto.
Na lista Todas as Bibliotecas, podemos selecionar uma biblioteca especfica, para que o pesquisador mostre somente os objetos da biblioteca selecionada. Por exemplo, selecione a biblioteca Excel, na lista de objetos do lado esquerdo selecione o objeto Range, com isso do lado direito do painel ser exibida uma lista com os mtodos e propriedades do objeto Range.
Alm do Pesquisador de Objeto, o Excel oferece um outro recurso para localizar um mtodo ou propriedade de um objeto, este recurso se d no momento da digitao do cdigo onde aps digitar o nome do objeto sucedido de um ponto, surgir automaticamente uma lista com estes mtodos e propriedades.
Pronto! Com isso aprendemos algumas noes bsicas sobre o Editor do VBA.
MDULO 3 VARIVEIS Uma varivel um espao criado na memria do computador durante a execuo de um programa, utilizado para armazenar um ou mais valores. Estes espaos so referenciados pelo programador atravs da atribuio de nomes, ou seja, atribumos nomes as variveis utilizadas no programa. Elas possuem esta nomenclatura, pelo fato de poder ter o seu contedo modificado durante a execuo do programa, da o nome Variveis. O programador antes de utilizar a varivel dentro do cdigo, deve primeiramente declar-la, ou seja, nas linhas iniciais do cdigo deve-se definir o nome de todas as variveis que sero utilizadas, bem como o contedo que ser armazenado nesta, a esta definio damos o nome de Tipos de Dados. Tipos de Dados basicamente determinar para o programa qual o tipo do contedo que a varivel ir armazenar, por exemplo: podemos definir que uma varivel ir armazenar somente valores inteiros numa faixa de 0 a 250, ou podemos tambm definir que a varivel ir armazenar caracteres de texto de tamanho varivel ou ainda definir que a varivel poder armazenar nmeros com casas decimais. Esta definio do tipo de dados da varivel extremamente importante, pois economizamos espao na memria do computador. Esta economia de espao na memria atravs da definio do tipo de dados mais adequado para uma varivel se da pelo fato de que cada tipo de dados ocupa um determinado espao em memria, por exemplo: uma varivel do tipo de dados que armazena nmeros inteiros ocupa na memria menos espao que uma varivel do tipo de dados que armazena caracteres de texto. No VBA, no obrigatrio declarao de variveis. Porm recomendvel que as declaremos, para a economia de espao mencionada anteriormente e tambm para que o cdigo fique mais claro e de fcil compreenso.
DECLARAO DE VARIVEIS
Para a declarao de uma varivel devemos sempre utilizar o comando Dim, que vem do termo Dimenso, seguido do nome da varivel, conforme exemplo: Dim x Dim nome Dim idade Neste exemplo, estamos apenas declarando o nome da varivel, sem declarar de que tipo (texto, nmero inteiro, data, decimal, etc.) a varivel. Deste modo a sintaxe completa de declarao de variveis a seguinte: Dim nome_da_varivel As tipo_da_varivel Podemos tambm em um nico comando Dim, declarar mais que uma varivel, sendo estas do mesmo tipo de dados, por exemplo: Dim idade, quantidade As tipo_da_varivel Dim nome, produto, codigo As tipo_da_varivel.
OPTION EXPLICIT
Embora a declarao de variveis seja importante, tambm podemos utilizar variveis que no foram, explicitamente, declaradas com o comando Dim. Com isso, a varivel criada na memria, no momento da sua utilizao. Mas se desejar que toda varivel tenha que estar declarada para poder ser utilizada, basta utilizar o comando Option Explicit na seo de declarao do mdulo. Ao definirmos este comando na seo de declarao do mdulo, estamos definindo que toda varivel deve ser declarada, antes de ser utilizada. Caso se utilize de uma varivel no declarada, ser gerado um erro de compilao e a execuo dos comandos interrompida. Abaixo temos um exemplo de variveis no explicitamente declaradas:
Dim num1, num2 As tipo_da_varivel Soma = num1 + num2 Ao tentarmos executar este cdigo, estando definido o comando Option Explicit, iremos obter uma mensagem de erro, pois utilizamos a varivel soma que no foi declarada, conforme a figura abaixo:
TIPOS DE VARIVEIS
O tipo de uma varivel serve para determinar na memria o espao que ser alocado para armazenar uma informao. O tipo de varivel padro do VBA o tipo Variant, que formado por pequenas unidades, chamadas de subtipos, onde cada subtipo identifica de que maneira os dados sero armazenados em uma varivel do tipo Variant. No indicado utilizar-se de variveis com o tipo Variant, pois da ser difcil restringir ao usurio o tipo da informao que ser armazenada, exemplo: Desejo que o usurio digite apenas nmeros inteiros. Caso a varivel que receber este nmero tenha sido declara com o tipo Variant, o usurio poder ento digitar qualquer outra informao que no seja um nmero inteiro.
Subtipo Empty
Significado Valor zero para variveis numricas ou String de tamanho (), para variveis de texto. Variveis que s podem assumir dois valores: Verdadeiro ou Falso (True or False). Valor Inteiro, na faixa de 0 a 255. Valor Inteiro, na faixa de -32768 a 32767. Valor real na faixa 923.337.203.685.447,5808 923.337.203.685.447,5807. de at
Tamanho -
Double
de at
-
8 Bytes
4 Bytes 8 Bytes
Nmero que representa a data entre 01 de janeiro do ano 100, at 31 de dezembro de 9999. Texto de tamanho varivel, pode conter, aproximadamente, 2 bilhes de caracteres. Pode conter um objeto qualquer, como Controle ActiveX.
String
Object
OPERADORES ARITMTICOS
Para podermos realizar clculos entre as variveis, devemos utilizar operadores. Abaixo disponveis: segue uma tabela com os operadores Descrio Soma o valor das variveis. Subtrai o valor das variveis. Multiplica o valor das variveis. Divide o valor das variveis. Parte inteira variveis. da diviso das aritmticos
Operador Adio Subtrao Multiplicao Diviso Inteiro da diviso entre 2 nmeros Exponenciao Mdulo
Smbolo + * / \
^ Mod
OPERADOR DE ATRIBUIO
Quando pretendemos atribuir valores as variveis, devemos indicar o nome da varivel, seguido do operador (=) e o valor a ser armazenado na varivel. Como exemplo observe o cdigo a seguir: Nome = Fbio Abreu Qtd = 86 No cdigo acima a varivel Nome esta armazenando o texto Fbio Abreu e a varivel Qtd esta guardando o nmero 86.
OPERADORES RELACIONAIS
Para podermos estabelecer relaes entre as variveis, devemos utilizar operadores. Abaixo disponveis: segue uma tabela com os operadores relacionais
Para utilizarmos os conceitos vistos at aqui, proceda da seguinte maneira: 1. Abra o arquivo Exerccio 3.xls, localizado na pasta da turma. 2. Abra o Editor do VBA. 3. Abra o mdulo chamado Mdulo1.
4. Depois de digitado o cdigo aperte a tecla de atalho F5, para executar a macro. Ser exibida uma caixa de mensagem:
Neste exerccio, utilizamos operadores aritmticos para realizar operaes com os valores das variveis num1 e num2.
Alm disso, fizemos uso de uma funo chamada Msgbox, que exibe mensagens em uma pequena janela, chamada de Pop-Up e utilizamos tambm o operador de concatenao (&).
VARIVEIS - ARRAYS
tipo.
Uma varivel que representa um conjunto de variveis do mesmo Um array pode ser unidimensional ou bidimensional.
ARRAY UNIDIMENSIONAL
Constitudo por uma nica lista de elementos indexveis, onde possumos um elemento inicial e outro elemento final, sendo que cada elemento da lista corresponde a um nico ndice. 0 1 2 3 4 5
ARRAY BIDIMENSIONAL
Um pouco mais complexo que o unidimensional, constitudo por um conjunto de listas do mesmo comprimento, sendo que este formato normalmente conhecido como array ou matriz. Constitudo, portanto de linhas e colunas, onde cada elemento identificado por um ndice composto pela interseo dos nmeros das linhas e colunas. 0 1 2 0 1 2 3 Note que o primeiro elemento de qualquer array sempre possu ndice 0.
DECLARAO DE ARRAYS
A declarao de um array semelhante a declarao de uma varivel comum, com exceo de um ndice que identifica quantas linhas e colunas este array deve possuir. Em um array unidimensional, como temos apenas uma nica lista correspondente a quantidade de elementos que a varivel deve armazenar a sintaxe se d da seguinte maneira: Dim nome_array (ndice) As tipo_da_varivel Onde, ndice representa o nmero de elementos que faro parte do array, exemplo: Dim ArrayNumerico(10) As Integer Na declarao do array anterior, estamos declarando que o array ter 10 posies ou 10 elementos, do mesmo tipo Integer. Com isso, ao invs de declararmos 10 variveis, temos apenas uma, tornando assim o cdigo mais legvel e simples. ArrayNumerico 0 1 2 3 4 5 6 7 8 9 Em que cada elemento do tipo Integer. J em um array bidimensional, como a varivel composta por diversas listas correspondente a quantidade de elementos que esta deve armazenar a sintaxe se d da seguinte maneira:
Dim nome_array (ndice) As tipo_da_varivel Onde, ndice representa o nmero de linhas e colunas que faro parte do array, exemplo: Dim TabelaTextual (5, 4 ) As String Na declarao do array anterior, estamos declarando que o array ter 5 linhas e 4 colunas, podendo assim armazenar 20 elementos, do mesmo tipo String. Com isso, ao invs de declararmos 20 variveis, temos apenas uma, tornando assim o cdigo mais legvel e simples. TabelaTextual 0 1 2 3 0 1 2 3 4 Em que cada elemento do tipo String.
EXERCCIO 1
1. Abra o arquivo Exerccio 4.xls localizado na pasta da turma. 2. Abra o Editor do VBA. 3. Abra o mdulo chamado Mdulo1.
4. Depois de digitado o cdigo aperte a tecla de atalho F5, para executar a macro. Ser exibida uma caixa de mensagem:
Neste exerccio, utilizamos um array unidimensional de 4 elementos para armazenar nomes dos alunos e mostra-los na tela atravs da funo msgbox.
EXERCCIO 1
1. Abra o arquivo Exerccio 4.xls localizado na pasta da turma. 2. Abra o Editor do VBA. 3. Abra o mdulo chamado Mdulo2. Com isso, ir aparecer uma macro chamada arraybi.
4. Depois de digitado o cdigo aperte a tecla de atalho F5, para executar a macro. Ser exibida uma caixa de mensagem:
Neste exerccio, utilizamos um array bidimensional com 2 linhas e 2 colunas totalizando assim 4 elementos para armazenar nomes e mdias dos alunos e mostra-los na tela atravs da funo msgbox. Alm disso, fizemos uso no cdigo de uma funo chamada Chr(nmero). Esta funo envia como resultado para a funo msgbox o caractere correspondente ao nmero digitado entre parnteses. Este nmero, o nmero do caractere no padro ASCll (American Standard Caracter Interchange Information). No cdigo ASCII, cada caractere possui um nmero associado, no caso do nmero 13, este se encontra associado ao <ENTER>, o que equivale a uma troca de linha. Assim utilizamos o Chr(13) para simular um <ENTER>, de tal maneira que os dados no apaream todos grudados na mesma linha.
ESCOPO OU DOMNIO DAS VARIVEIS
O Escopo ou domnio de uma varivel define a rea de aplicao na qual a varivel pode ser utilizada, ou seja, em qual rea ela pode ser acessada. Existem 3 nveis de escopo para as variveis: Escopo de Procedimento/Funo Escopo de Mdulo Escopo de Projeto
ESCOPO DE PROCEDIMENTO/FUNO
uma varivel que foi inicialmente declarada dentro de um procedimento ou funo, sendo que esta varivel somente pode ser utilizada dentro deste procedimento ou funo. So variveis criadas no momento da execuo do procedimento ou funo e destrudas automaticamente ao trmino da execuo do procedimento ou funo. Assim sendo, qualquer tentativa de se acessar uma varivel dentro de um procedimento que foi declarada no corpo de um outro procedimento, esta no ter xito.
Para melhor entendermos a utilizao das variveis com escopo de procedimento/funo, proceda da seguinte maneira: 1. Abra uma nova pasta de trabalho. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
4. Execute a sub-rotina proc1. var. Com isso ir surgir uma caixa de mensagem com o valor da varivel
5. Clique o boto OK. Em seguida, surgir uma nova caixa de mensagem em branco.
Neste exemplo, dentro do procedimento proc1, declaramos uma varivel do tipo Integer chamada var, e atribumos a ela o valor 5. Logo em seguida mostramos o valor desta varivel na tela usando a funo msgbox. Depois, ainda no procedimento proc1, chamamos o procedimento proc2 que tambm mostra o valor da varivel var1 na tela atravs da funo msgbox, mas perceba que na segunda caixa de mensagem o valor da varivel no aparece, ou seja, a varivel no contm valor. Isso acontece pelo fato da varivel esta declarada dentro do procedimento proc1.
ESCOPO DE MDULO
uma varivel que foi inicialmente declarada na seo de declaraes do mdulo, fora de qualquer procedimento. Com isso a varivel pode ser utilizada dentro de todos os procedimentos e funes existentes dentro do mdulo. Para melhor entendermos a utilizao das variveis com escopo de mdulo, proceda da seguinte maneira: 1. Abra uma nova pasta de trabalho. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
4. Execute a sub-rotina proc1. var. Com isso ir surgir uma caixa de mensagem com o valor da varivel
5. Clique o boto OK. Em seguida, surgir uma nova caixa de mensagem novamente com o valor da varivel var.
Neste exemplo, dentro seo de declarao do mdulo, declaramos uma varivel do tipo Integer chamada var. Dentro do procedimento proc1 atribumos a varivel o valor 5. Logo em seguida mostramos o valor desta varivel na tela usando a funo msgbox. Depois, ainda no procedimento proc1, chamamos o procedimento proc2 que tambm mostra o valor da varivel var1 na tela atravs da funo msgbox. Perceba com isso que tanto no proc1 quanto no proc2, conseguimos ter acesso ao valor da varivel var, justamente pelo fato de esta ser de escopo modular.
ESCOPO DE PROJETO
uma varivel que foi inicialmente declarada na seo de declaraes do mdulo, fora de qualquer procedimento, muito parecido com a declarao das variveis de escopo modular com a diferena que antes do nome da varivel deve-se utilizar a palavra chave Public. Com isso a varivel pode ser utilizada dentro de qualquer mdulo da pasta de trabalho, ou seja, do projeto. Para melhor entendermos a utilizao das variveis com escopo de projeto, proceda da seguinte maneira: 1. Abra uma nova pasta de trabalho. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
5. Retorne ao mdulo anterior e execute o procedimento proc1. var. Com isso ir surgir uma caixa de mensagem com o valor da varivel
6. Clique o boto OK. Em seguida, surgir uma nova caixa de mensagem com o novo valor da varivel var.
MDULO 4 SUB-ROTINAS E FUNES Como visto em mdulos anteriores, quando se grava uma macro no Excel, este tem um comportamento em background que realiza a respectiva codificao para Visual Basic for Applications, onde cada macro criada d origem a um procedimento ou rotina. Existem dois tipos de rotinas: 1. Sub-rotinas ou rotinas Sub. 2. Funes.
SUB-ROTINAS
Um grupo de comandos que podem ser executados, atravs da chamada do nome da sub-rotina, cuja definio delimitada pelas palavras-chave Sub e End Sub. As sub-rotinas podem possuir ou no argumentos, que so valores passados para a sub-rotina, os quais sero utilizados internamente para a realizao de clculos, por exemplo, se voc vai criar um sub-rotina para clculo do desconto do cliente com base no seu valor de compra, voc poderia definir um argumento para esta sub-rotina que ir inform-la o salrio do cliente. Para criao de uma sub-rotina, devemos seguir a seguinte sintaxe: Sub <nome_da_sub-rotina> (<lista_de_argumentos>) <bloco_de_comandos> End Sub Na <lista_de_argumentos>, cada argumento que compor esta sub-rotina, deve estar associado a um tipo de dados, caso essa informao seja omitida, ser considerado o tipo default para o argumento, no caso Variant. As sub-rotinas so designadas pelo nome que lhe atribumos, onde este nome pode ser qualquer, desde que no contenham espaos, nem comecem por caracteres numricos.
Como visto anteriormente, as sub-rotinas podem ou no conter argumentos. Caso sejam necessrios, estes devem ser passados quando a sub-rotina for chamada e devem estar na mesma ordem em que foram definidos. Para ter a noo do que so parmetros lembre-se do funcionamento das funes do Excel, que para executarem determinada funo necessitam de receber parmetros que colocamos entre parnteses separados por vrgulas. Quando criar sub-rotinas, procure utilizar nomes que descrevem a funo da sub-rotina. Com isso tornamos o cdigo mais fcil de ser entendido.
Uma vez criada a sub-rotina, sempre que fomos cham-la dentro de um cdigo, devemos digitar o nome da sub-rotina precedido da palavra Call. Para melhor entendermos o funcionamento de uma sub-rotina, vamos ao um exemplo prtico: 1. Abra uma nova pasta de trabalho. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
4. Execute o procedimento proc1. Com isso, surgir na tela a seguinte caixa de mensagem:
No exemplo anterior, temos dois procedimentos, o primeiro chamado de proc1, onde temos duas variveis declaradas. Em seguida, atribumos valores a estas variveis e as passamos como argumentos para o procedimento concatena, que esta declarada logo abaixo. No procedimento concatena, pegamos os valores das duas variveis e mostramos na tela usando a funo msgbox,
EXERCICIO
1. Em uma nova pasta de trabalho, abra o Editor do VBA e crie dois procedimentos: Calcula_Desc: Este procedimento dever receber como parmetro, duas variveis do tipo Currency chamadas respectivamente de Salario
e Desconto. Dentro do procedimento devera ser declarada uma varivel local do tipo Currency chamada Sal_Final, esta varivel devera receber o valor do salrio com desconto. Em seguida o valor da varivel Sal_final deve ser mostrado na tela. Proc1: Neste procedimento deve-se declarar duas variveis locais do tipo Currency chamadas respectivamente de Salario e Desconto. Em seguida, atribua um valor qualquer a varivel Salario, exemplo (2000), e outro valor a varivel Desconto, exemplo (0.1) e passe estas duas variveis como parmetro para a funo Calcula_Desc. 2. Por fim execute a funo Proc1. Com isso dever ser exibida na tela uma caixa de mensagem informando o salrio j descontado.
FUNES
Um grupo de comandos que podem ser executados, atravs da chamada do nome da funo, cuja definio delimitada pelas palavraschave Function e End Function. Toda funo identificada pelo nome, pelo nmero e tipo de parmetros recebidos, e tem como objetivo executar um conjunto de instrues e produzir um valor final. Isto , toda vez que se executar uma funo, esta sempre produzir um valor. Recorde-se como exemplo a funo SUM, esta recebe por parmetro um conjunto de valores que se pretende somar e sabe-se que o resultado da aplicao dessa funo ao conjunto de valores ser o respectivo somatrio. As funes podem ou no conter argumentos. Caso sejam necessrios, estes devem ser passados quando a funo for chamada e devem estar na mesma ordem em que foram definidos. Para definir o valor produzido por uma funo basta no seu interior, atribuir ao nome da funo um determinado valor ou expresso.
Quando criar funes, procure utilizar nomes que descrevem a funo da sub-rotina. Com isso tornamos o cdigo mais fcil de ser entendido.
CUIDADO! No confundir Sub-rotina com funo. Apesar de suas sintaxes serem parecidas, uma funo sempre retorna um ou mais valores para o comando que a chamou. Para criao de uma funo, devemos seguir a seguinte sintaxe: Sub <nome_da_funo> (<lista_de_argumentos>) As <Tipo> <bloco_de_comandos> End Function Observe que alm da <lista_de_argumentos>, onde cada argumento que compor esta funo deve estar associado a um tipo de dados, temos tambm um <tipo>. Este <tipo> esta associado funo e serve para especificar o tipo de dados que a funo ir retornar, caso esteja omitido, ser considerado o tipo default, no caso Variant. Considere o exemplo a seguir:
No exemplo anterior, declaramos uma funo chamada converte_dolar, que espera receber dois argumentos do tipo Currency (valor_real, cotao_dolar) e definimos tambm que a funo ir retornar um valor do mesmo tipo Currency. No momento em que formos chamar esta funo em algum cdigo, devemos utilizar o operador de atribuio, isto , o valor que a funo ir retornar, deve ser atribudo a uma varivel, ou exibido na tela atravs da funo msgbox.
No prximo exemplo, estamos atribuindo a varivel valor_dolar, o valor retornado pela funo converte_dolar.
Ao invs de atribuir o valor de retorno da funo a uma varivel, poderamos exibi-lo na tela usando a funo msgbox.
Para melhor entendermos o funcionamento de uma funo, vamos ao um exemplo prtico: 1. Abra o arquivo Exerccio 6.xls localizado na pasta da turma.
2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
Com isso, sua funo j esta pronta. Vamos agora test-la em uma clula dentro do Excel.
Para utilizar a funo criada no VBA, dentro de uma clula em uma das planilhas do Excel, proceda da seguinte maneira: 1. Selecione a clula D4. 2. Clique o menu Inserir. 3. Clique a sub-opo Funo. Com isso, surgir janela Inserir Funo.
4. Selecione a categoria Definida pelo usurio. 5. Selecione o nome da funo calcula_desconto. 6. Clique o boto OK. Com isso, surgir a tela Argumentos da funo.
7. No campo Salrio, digite B4. 8. No campo Desconto, digite C4. 9. Clique o boto OK. 10. Copie a frmula no intervalo de clulas D4:D10. A planilha dever ser exibida conforme a figura abaixo.
MDULO 5 FUNES INTERNAS DO VBA Neste mdulo apresentaremos algumas funes internas do VBA, funes estas que sero de extrema importncia para a soluo de algumas situaes que encontraremos mais adiante no curso, pois diminuiro muito o tempo para solucionar tais problemas.
Para isto, dividiremos estas funes por categorias para melhor entendimento.
FUNES DE TIPO
Aqui veremos algumas funes para determinar o tipo de dados de uma varivel. FUNO ISDATE Esta funo recebe uma varivel como argumento e determina se esta contm uma data vlida. Caso o argumento passado seja uma data vlida, a funo retornar Verdadeiro, caso contrrio, retornar Falso. A sintaxe desta funo a seguinte: IsDate(<varivel>) Abaixo, segue um exemplo que ilustra o uso desta funo:
FUNO ISNUMERIC Esta funo recebe uma varivel como argumento e determina se o valor atribudo a ela um valor numrico. Caso o valor seja numrico, a funo retornar Verdadeiro, caso contrrio, retornar Falso. A sintaxe desta funo a seguinte: IsNumeric(<varivel>) Abaixo, segue um exemplo que ilustra o uso desta funo:
Aqui veremos algumas funes para tratamento de texto, via programao VBA. FUNO LEN
Esta funo determina o tamanho da String que foi passada como parmetro para a funo. A sintaxe desta funo a seguinte: Len(<varivel>) Abaixo, segue um exemplo que ilustra o uso desta funo:
Na execuo deste procedimento, uma caixa de mensagem surgir, mostrando o nmero de caracteres existente na varivel.
FUNO LCASE Esta funo converte para minsculas, a string que foi passada como parmetro para a funo. A sintaxe desta funo a seguinte: Lcase(<varivel>) Abaixo, segue um exemplo que ilustra o uso desta funo:
FUNO UCASE Esta funo converte para maisculas, a string que foi passada como parmetro para a funo. A sintaxe desta funo a seguinte: Ucase(<varivel>) Abaixo, segue um exemplo que ilustra o uso desta funo:
FUNO MID Esta funo retorna um nmero especificado de caracteres, a partir de uma posio especificada dentro de uma string.Lembre-se que espaos em branco tambm devem ser considerados. A sintaxe desta funo a seguinte: Mid(<string>, <pos_inicial>, <num_caract>) Abaixo, segue um exemplo que ilustra o uso desta funo:
FUNO STRING Esta funo retorna um determinado caractere, um nmero especificado de vezes. A sintaxe desta funo a seguinte: String(<num_repet>, <caractere>) Abaixo, segue um exemplo que ilustra o uso desta funo:
Aqui veremos algumas funes para tratamento de data e hora, via programao VBA.
FUNO DATE Esta funo retorna a data atual do sistema operacional. Esta uma funo que no possui argumentos. A sintaxe desta funo a seguinte: Date() Abaixo, segue um exemplo que ilustra o uso desta funo:
FUNO TIME Esta funo retorna a hora atual do sistema operacional. Esta uma funo que no possui argumentos. A sintaxe desta funo a seguinte: Time() Abaixo, segue um exemplo que ilustra o uso desta funo:
FUNO DAY Esta funo retorna o dia do ms de uma determinada data passada como parmetro. A sintaxe desta funo a seguinte: Day(<data>) Abaixo, segue um exemplo que ilustra o uso desta funo:
FUNO MONTH Esta funo retorna um nmero entre 1 e 12, indicando o ms de uma determinada data passada como parmetro. A sintaxe desta funo a seguinte: Month(<data>) Abaixo, segue um exemplo que ilustra o uso desta funo:
FUNO YEAR Esta funo retorna o ano de uma determinada data passada como parmetro. A sintaxe desta funo a seguinte: Year(<data>) Abaixo, segue um exemplo que ilustra o uso desta funo:
FUNO MONTHNAME Esta funo recebe como parmetro um nmero, que indica o ms do ano (1-Janeiro 2-Fevereiro...). A sintaxe desta funo a seguinte: MonthName(<Num_ms>) Abaixo, segue um exemplo que ilustra o uso desta funo:
FUNO HOUR Esta funo recebe como parmetro uma hora e retorna um nmero entre 0 e 23, indicando a hora atual.
FUNO DATEDIFF Esta funo utilizada para determinar um intervalo entre duas datas, podendo este intervalo ser entre dias, trimestres, semestres, anos e etc. A sintaxe desta funo a seguinte: DateDiff(<intervalo>,<data1>,<data2>)
O argumento <intervalo>, uma string que indica o tipo de intervalo que iremos calcular. Para sabermos como calcular um intervalo entre duas datas devemos conhecer a tabela seguinte: <Intervalo> yyyy q m d w h n s Descrio Anos Trimestres Meses Dias Semanas Horas Minutos Segundos
FUNO DATEADD Esta funo utilizada para determinar uma data futura, com base em uma data fornecida, o tipo de intervalo a ser acrescentado e o nmero a ser acrescentado. Este intervalo pode ser entre dias, trimestres, semestres, anos e etc. A sintaxe desta funo a seguinte: DateAdd (<intervalo>,<acrscimo>,<data>) O argumento <acrscimo>, a ser acrescentado a data para achar a nova data final.
O argumento <intervalo>, uma string que indica o tipo de intervalo que iremos calcular. Para sabermos como calcular um intervalo entre duas datas devemos conhecer a tabela seguinte: <Intervalo> yyyy q m d Descrio Anos Trimestres Meses Dias
w h n s
FUNO WEEKDAY Esta funo utilizada para determinar o dia da semana correspondente a uma data. Esta funo recebe como argumento uma data e um valor opcional que indica o primeiro dia da semana, sendo que se este valor for omitido, o primeiro dia da semana considerado ser Domingo. O valor para indicar o primeiro dia da semana deve ser definido assim: 1 Domingo, 2 Segunda e assim por diante. A sintaxe desta funo a seguinte: WeekDay (<data>,[<1_dia_semana>]) Abaixo, segue um exemplo que ilustra o uso desta funo:
FUNO WEEKDAYNAME Esta funo utilizada para determinar o nome do dia da semana. Esta funo recebe como argumento um nmero que indica o dia da semana e outro argumento opcional que pode ser Verdadeiro ou Falso. Se o segundo argumento for Verdadeiro, o nome do dia da semana ser exibido abreviado. Caso seja omitido o valor Falso ser considerado por padro. A sintaxe desta funo a seguinte: WeekDayName (<num_dia_semana>,[<abreviar>]) Abaixo, segue um exemplo que ilustra o uso desta funo:
Aqui segue uma lista de algumas funes tambm importantes para programao VBA.
Descrio Roda um programa executvel. Retornar um nmero aleatrio entre 0 e 1. Retorna a raiz quadrada de um nmero.
EXERCCIO 1
1. Abra o arquivo, Exerccio 12.xls, localizado na pasta da turma. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e digite o cdigo abaixo:
Pronto! Com isso, ficamos conhecendo algumas funes internas do VBA, que sero de extrema importncia para a soluo de alguns problemas.
MDULO 6 TRATAMENTO DE ERROS Nos cdigos podemos nos deparar com determinados erros a depender de determinadas condies. Podemos nos deparar com um erro de sintaxe, quando um comando do cdigo digitado incorretamente, por exemplo, ao invs de uma vrgula, voc digita ponto e vrgula. Podemos encontrar tambm erros de lgica, erros estes mais difceis de serem identificados, pelo fato do usurio ter falhado no teste de alguma condio do cdigo. Temos tambm os erros chamados de erros em tempo de execuo, onde o erro somente ser identificado durante a execuo da rotina, como por exemplo, tentamos acessar um aplicativo em um diretrio onde este foi movido para outro local. Por isso, devemos sempre utilizar o comando para tratamento de possveis erros que podem acontecer durante a execuo do cdigo. A sintaxe para utilizao deste comando a seguinte: On Error Resume Next Neste comando caso um erro seja encontrado o cdigo deslocado para um bloco especifico onde ocorre o tratamento deste erro, logo em seguida ao trmino deste tratamento, o cdigo retorna para a primeira instruo aps a instruo que gerou o erro. Se no usarmos a instruo On Error, ou seja, caso no faamos os tratamentos dos possveis erros que venham a acontecer, qualquer erro em tempo de execuo que ocorrer, ser fatal, isto , ser exibida uma mensagem de erro e a execuo do procedimento ser encerrada. Abaixo, segue um exemplo que ilustra o uso desta funo:
Neste exemplo, declaramos duas variveis do tipo Double, logo em seguida definimos que em caso de erro, a execuo ser deslocada para o bloco de comandos para tratamento do erro chamado trata_erro. Logo aps foramos um erro, usando o nmero 0 (zero) como denominador de uma diviso, na qual resultar em um erro, da ento a execuo deslocada para o bloco do cdigo chamado trata_erro. L uma caixa de mensagem surge informando que um erro foi encontrado. Ao finalizar o tratamento do erro, a execuo do cdigo retorna para a prxima instruo logo aps a instruo que gerou o erro, no caso uma varivel x recebe o valor 10 (dez), que logo imprimido na tela. Isto acontece, pois logo aps o tratamento do erro temos o Resume Next. Com isso encontra-se o End Sub, finalizando assim a execuo do cdigo. Caso aps a instruo de tratamento do erro no tivssemos o Resume Next, o tratamento seria feito e o cdigo seria imediatamente encerrado, pois encontraria um End Sub.
EXERCCIO 1
1. Abra o arquivo, Exerccio 13.xls, localizado na pasta da turma. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e digite o cdigo abaixo:
4. Execute o procedimento calc. Neste procedimento temos declarado uma varivel RetVal, logo aps definimos que em caso de erro a execuo ser deslocada para o bloco de comandos chamado tratar_erro. A depender do sistema operacional a primeira atribuio a varivel RetVal pode ou no gerar um erro, na verdade esta atribuio faz com que a varivel receba o caminho onde encontra-se a calculadora e logo em seguida a execute. Pronto! Com isso, ficamos conhecendo como tratar possveis erros que venham a acontecer no cdigo.
MDULO 7 ESTRUTURAS DE CONTROLE Alm da declarao de variveis e clculos bsicos, o VBA fornece uma serie de comandos conhecidos como estruturas de controle. Estas so utilizadas no cdigo para a realizao de testes, por exemplo, verificar se o valor de uma varivel maior que x, se for, execute estes comandos, caso contrrio execute outros comandos. Estes testes so muito utilizados em programao, sendo praticamente impossvel no utiliza-los no seu cdigo. Controle VBA IF... Then Objetivo Testa uma condio e executa um determinado conjunto de instrues de acordo com o resultado dessa avaliao. Executa uma determinada tarefa um determinado nmero de vezes. Executa uma tarefa, enquanto que a avaliao de uma condio seja ou torne-se verdadeira.
For... Next
Do... Loop
Uma das estruturas de controle mais conhecidas. Praticamente toda linguagem de programao implementa esta estrutura, sendo utilizada para executar determinados comandos, caso uma condio seja verdadeira. A sintaxe desta estrutura a seguinte: If <condio> Then <bloco_de_comandos> End If Neste caso a <condio> testada, caso esta seja verdadeira, o <bloco_de_comandos> executado. Para melhor entendermos o funcionamento desta estrutura, vamos ao um exemplo prtico: 1. Abra o arquivo Exerccio 7.xls localizado na pasta da turma. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
Com isso, a depender do valor das variveis num1 e num2, uma caixa de mensagem poder ou no surgir, definindo que o valor de num1 maior do que o de num2, logo em seguida ser exibido uma outra caixa de mensagem informando o valor destas variveis. Neste exemplo alm dos recursos j conhecidos, fizemos uso da funo Rnd (), esta funo retorna como resultado um nmero aleatrio. No nosso caso como fizemos Rnd * 50, estamos solicitando um nmero aleatrio entre 0 e Utilizamos tambm a funo Int (), que retorna apenas a parte inteira do valor obtido pela funo Rnd * 50.
50.
Esta estrutura de controle muito interessante, pois acrescenta a estrutura IF... THEN mais uma possibilidade. Muito utilizada para executar comandos, caso uma condio seja verdadeira, ou outros comandos, caso a condio seja falsa. A sintaxe desta estrutura a seguinte: If <condio> Then <bloco_de_comandos_1> Else <bloco_de_comandos_2> End If Neste caso a <condio> testada, caso esta seja verdadeira, o <bloco_de_comandos_1> executado, seno o <bloco_de_comandos_2> que ser executado.
Para melhor entendermos o funcionamento desta estrutura, vamos ao um exemplo prtico: 1. Abra o arquivo Exerccio 8.xls localizado na pasta da turma. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
4. Execute a rotina pontuacao. Com isso, a depender do valor da varivel pontos, uma caixa de mensagem ir surgir, definindo se o valor de pontos esta acima ou abaixo da mdia. Logo em seguida ser mostrada uma nova caixa de mensagem que conter o valor da varivel pontos.
Esta estrutura nos da um maior poder, para testarmos diversas possibilidades, isto , podemos fazer vrios testes e executar diferentes comandos com base no resultado destes testes. Muito utilizada sempre que necessitarmos realizar mais do que um teste lgico, onde em cada novo teste, utilizamos o ElseIf. A sintaxe desta estrutura a seguinte: If <condio_1> Then <bloco_de_comandos_1> ElseIf <condio_2> <bloco_de_comandos_2> ElseIf <condio_3> <bloco_de_comandos_3> ElseIf <condio_n> <bloco_de_comandos_n> Else <bloco_de_comandos_final> End If Neste caso a <condio_1> testada, caso esta seja verdadeira, o <bloco_de_comandos_1> executado, seno a <condio_2> testada, caso esta seja verdadeira, o <bloco_de_comandos_2> ser executado, seno a <condio_3> testada, caso esta seja verdadeira, o <bloco_de_comandos_3> ser executado, seno a <condio_n> testada, caso seja verdadeira, o <bloco_de_comandos_n> ser executado, seno o <bloco_de_comandos_final> que ser executado, pois todas as condies falharam. Somente um dos <bloco_de_comandos> que ser executado. Onde uma condio sendo verdadeira, o <bloco_de_comandos> associado a esta condio ser
executado, ao trmino a execuo segue para o End If, isto , as demais condies da estrutura no sero testadas. Para melhor entendermos o funcionamento desta estrutura, vamos ao um exemplo prtico: 1. Abra o arquivo Exerccio 9.xls localizado na pasta da turma. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
4. Execute a rotina idade. Com isso, a depender do valor armazenado na varivel idade, uma caixa de mensagem surgir informando a classe etria pertencente idade. Ao trmino da estrutura If, aparecer uma outra caixa de mensagem informando o valor da varivel idade.
Na instruo Elseif, sempre que uma condio for avaliada como falsa, uma outra condio avaliada. Caso todas as condies sejam falsas, a condio da instruo Else, que ser executada. J se uma condio for avaliada como verdadeira, as instrues pertencentes a esta condio ser executada e a estrutura If, finalizada.
EXERCICIO 1
1. Criar um procedimento chamado Aposta. 1.1. No procedimento Aposta, declarar duas variveis inteiras chamadas naposta e nsorteio. 1.2. Naposta recebe o valor 30. 1.3. Nsorteio recebe o resultado da funo Sorteio. 1.4. Comparar o valor de naposta com nsorteio, caso sejam iguais, surgir uma mensagem informando que os nmeros so iguais, seno, surgir uma mensagem informando que os nmeros so diferentes. 2. Criar uma funo chamada Sorteio. 2.1. Esta funo dever retornar um nmero randmico inteiro entre 0 e 50. 3. Execute o procedimento Aposta.
Formatado: Fonte: No Negrito
Um comando muito utilizado para repetir um determinado trecho do cdigo um determinado nmero de vezes. Utilizamos esta estrutura, quando j conhecemos o nmero de vezes que devemos repetir determinado trecho de cdigo. Nesta estrutura utiliza-se uma varivel como contador, onde este varia de um valor inicial at um valor final. A sintaxe desta estrutura a seguinte:
4. Execute a rotina somanum. Com isso, surgir uma caixa de mensagem informando o valor da varivel soma.
Neste exemplo, a varivel i inicia com o valor 1 e em cada passo, o valor de i somado com o valor existente na varivel soma. Note tambm que neste exemplo o incremento no foi definido, da o valor ser o padro 1. Com isso, ao final de todos os laos do For... Next, a varivel soma, conter a soma dos dez primeiros nmeros maiores que zero e este valor ser mostrado em uma caixa de mensagem.
EXERCICIO
1. Crie um procedimento que mostre na tela, a soma dos 10 primeiros nmeros mpares.
Esta estrutura deve ser utilizada para repetir um trecho do cdigo, enquanto uma condio seja verdadeira, ou at que ela torne-se verdadeira. Para isto, podemos utilizar dois operadores condicionais diferentes: While ou Until. Estes operadores podem ser utilizados de duas maneiras diferentes: no inicio ou no final do lao. Com isso teremos quatro situaes diferentes. DO WHILE <condio>... LOOP Neste mtodo, estamos utilizando o operador While no inicio do lao. Para esta estrutura, devemos seguir a seguinte sintaxe: Do While <condio> <bloco_de_comandos> Loop Neste tipo de estrutura, enquanto <condio> for verdadeira, o <bloco_de_comandos> ser executado, caso esta seja falsa, o prximo comando aps o lao ser executado. Caso <condio> seja falsa na primeira anlise, o <bloco_de_comandos> no ser executado nenhuma vez. CUIDADO! Dentro do lao do While, deve existir algum cdigo capaz de alterar a condio para que esta se torne falsa, em algum momento, pois caso contrrio a condio sempre estar verdadeira e o <bloco_de_comandos> dentro do lao ficar em execuo infinitamente ou at que o programa trave. A criao de laos infinitos uma causa comum de erros e travamentos. Para melhor entendermos o funcionamento desta estrutura, vamos ao um exemplo prtico: 1. Abra o arquivo Exerccio 11.xls localizado na pasta da turma. 2. Abra o Editor do VBA.
4. Execute o procedimento soma. Com isso, ir aparecer uma caixa de mensagem informando o valor da varivel.
DO... LOOP WHILE <condio> Nesta estrutura, temos a condio do teste no final do lao, com isso, o cdigo dentro do lao ser executado pelo menos uma vez, pois a condio somente ser testada no final do lao, voltando a ser executado, caso a condio seja verdadeira.
Do <bloco_de_comandos> Loop While <condio> Neste tipo de estrutura, enquanto <condio> for verdadeira, o <bloco_de_comandos> ser executado, caso esta seja falsa, o prximo comando aps o lao ser executado. Caso <condio> seja falsa na primeira anlise, o <bloco_de_comandos> ser executado uma nica vez. CUIDADO! Dentro do lao do While, deve existir algum cdigo capaz de alterar a condio para que esta se torne falsa, em algum momento, pois caso contrrio a condio sempre estar verdadeira e o <bloco_de_comandos> dentro do lao ficar em execuo infinitamente ou at que o programa trave. A criao de laos infinitos uma causa comum de erros e travamentos. Para melhor entendermos o funcionamento desta estrutura, vamos ao um exemplo prtico: 1. Abra o arquivo Exerccio 11.xls localizado na pasta da turma. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
4. Execute o procedimento soma. Com isso, ir surgir uma caixa de mensagem informando o valor da varivel soma.
Neste exemplo, a condio contador <= x falsa logo no primeiro teste, pois contador = 12 e x = 10. Neste caso o lao ser executado uma nica vez, pois o teste da condio encontra-se no final do lao.
DO UNTIL <condio>... LOOP Nesta estrutura, estamos utilizando o operador condicional Until, no nicio do lao. Para esta estrutura, devemos seguir a seguinte sintaxe: Do Until <condio> <bloco_de_comandos> Loop Neste tipo de estrutura, enquanto <condio> for falsa, o <bloco_de_comandos> ser executado, caso esta seja verdadeira, o prximo comando aps o lao ser executado. Caso <condio> seja verdadeira na primeira anlise, o <bloco_de_comandos> no ser executado nenhuma vez. CUIDADO! Dentro do lao do Until, deve existir algum cdigo capaz de alterar a condio para que esta se torne verdadeira, em algum momento, pois caso contrrio a condio sempre estar falsa e o <bloco_de_comandos> dentro do lao ficar em execuo infinitamente ou at que o programa trave. A criao de laos infinitos uma causa comum de erros e travamentos. Para melhor entendermos o funcionamento desta estrutura, vamos ao um exemplo prtico: 1. Abra o arquivo Exerccio 11.xls localizado na pasta da turma. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
4. Execute o procedimento soma. Com isso, ir aparecer uma caixa de mensagem informando o valor da varivel.
DO... LOOP UNTIL <condio> Nesta estrutura, temos a condio do teste no final do lao, com isso, o cdigo dentro do lao ser executado pelo menos uma vez, pois a condio somente ser testada no final do lao, voltando a ser executado, caso a condio seja falsa. Para esta estrutura, devemos seguir a seguinte sintaxe: Do <bloco_de_comandos> Loop Until <condio>
Neste tipo de estrutura, enquanto <condio> for falsa, o <bloco_de_comandos> ser executado, caso esta seja verdadeira, o prximo comando aps o lao ser executado. Caso <condio> seja verdadeira na primeira anlise, o <bloco_de_comandos> ser executado uma nica vez. CUIDADO! Dentro do lao do Until, deve existir algum cdigo capaz de alterar a condio para que esta se torne verdadeira, em algum momento, pois caso contrrio a condio sempre estar falsa e o <bloco_de_comandos> dentro do lao ficar em execuo infinitamente ou at que o programa trave. A criao de laos infinitos uma causa comum de erros e travamentos. Para melhor entendermos o funcionamento desta estrutura, vamos ao um exemplo prtico: 1. Abra o arquivo Exerccio 11.xls localizado na pasta da turma. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
Neste exemplo, a condio contador >= x verdadeira logo no primeiro teste, pois contador = 12 e x = 10. Neste caso o lao ser executado uma nica vez, pois o teste da condio encontra-se no final do lao.
EXERCICIO 1
1. Crie um procedimento chamado Loteria. Neste procedimento uma varivel do tipo Integer, dever receber um nmero randmico inteiro entre 0 e 15. Crie um lao de repetio que compara o valor da varivel com o nmero 10, caso sejam iguais, devemos mostrar na tela uma mensagem informando que o nmero foi encontrado e informar tambm o nmero de tentativas at localizar o nmero.
Pronto! Com isso, aprendemos a trabalhar com as estruturas de controle, que nos sero muito teis na resoluo de diversos problemas.
REVISO 1
1. Na pasta da turma, abra o arquivo chamado Reviso 1.xls, abra o Editor do VBA e insira um novo mdulo. Dentro dele, crie uma funo chamada de IRPF que dever calcular o Imposto de renda pessoa fsica. Para isto a funo dever receber como parmetro uma varivel do tipo Currency, que ser base de clculo para o clculo do imposto. Esta funo dever retornar o valor do imposto a ser pago. O clculo a ser feito, dever seguir as condies da tabela oficial para o clculo de imposto de renda no exerccio de 2008, conforme tabela a seguir: Base de clculo anual em R$ At 15.764,28 De 15.764,29 at 31.501,44 Acima de 31.501,44 Alquota % 15,0 27,5 Parcela a deduzir do imposto em R$ 2.364,60 6.302,28
2. Depois de criada a funo IRPF, teste-a na planilha chamada IRPF, para calcular o imposto de cada pessoa.
REVISO 2
1. Na pasta da turma, abra o arquivo chamado Reviso 1.xls, abra o Editor do VBA e insira um novo mdulo. Dentro dele, crie uma funo chamada de CPF que dever receber como parmetro um valor de CPF no formato 111.111.111-11 ou a referncia de uma clula que contm um CPF nesse formato. A funo ir retornar a palavra Vlido se este for vlido, caso contrrio retornar Invlido. A seguir, temos um exemplo de como se calcular o dgito verificador do CPF: Considere o seguinte CPF (sem o DV): 333.444.555 Posio Nmero 1 3 2 3 3 3 4 4 5 4 6 4 7 5 8 5 9 5
Deve-se multiplicar os dgitos do CPF, a partir da posio 9, ou seja, de trs para a frente, por 2,3,4 e assim por diante, conforme a tabela a seguir Posio Nmero Multiplica por: Resultado 1 3 10 30 2 3 9 27 3 3 8 24 4 4 7 28 5 4 6 24 6 4 5 20 7 5 4 20 8 5 3 15 9 5 2 10
Depois, devemos somar os resultados obtidos na quarta linha da tabela anterior: Soma 1 = 30+27+24+28+24+20+20+15+10 Soma 1 = 198 Fao a diviso desta soma por 11 e verifico o resto da diviso: Ex: 198/11 Resulta em uma diviso exata, com resto 0.
Agora, deve-se seguir a seguinte regra: Quando o resto zero ou um, o DV zero Quando o resto diferente de zero ou um, o DV obtido fazendo-se: 11-resto.
Neste caso, como o resto foi zero, o primeiro DV zero: DV1 = 0 Este primeiro dgito verificador (DV1) passa a fazer parte do CPF, conforme a tabela a seguir: Posio Nmero 1 3 2 3 3 3 4 4 5 4 6 4 7 5 8 5 9 5 10 0
Agora, devemos repetir o mesmo processo feito anteriormente, porm j considerando o DV1 como parte integrante do CPF, conforme mostrado na tabela a seguir: Posio Nmero Multiplica por: Resultado 1 3 11 33 2 3 10 30 3 3 9 27 4 4 8 32 5 4 7 28 6 4 6 24 7 5 5 25 8 5 4 20 9 5 3 15 10 0 2 0
Depois, devemos somar os resultados obtidos na quarta linha da tabela anterior: Soma 2 = 33+30+27+32+28+24+25+20+15+0 Soma 2 = 234 Fao a diviso desta soma por 11 e verifico o resto da diviso: Ex: 234/11 Resulta em 21, com resto 3. Agora, deve-se seguir a seguinte regra:
Quando o resto zero ou um, o DV zero Quando o resto diferente de zero ou um, o DV obtido fazendo-se: 11-resto.
Neste caso, como o resto foi 3, o segundo DV : DV2 = 11-3 DV2 = 8 Com isso, temos o CPF com os dois dgitos verificadores: Posio Nmero 1 3 2 3 3 3 4 4 5 4 6 4 7 5 8 5 9 5 10 0 11 8
Ou seja: 33.444.555-08 2. Depois de criada a funo CPF, teste-a na planilha chamada CPF, para verificar se cada cpf da lista vlido ou no.
REVISO 3
1. Na pasta da turma, abra o arquivo chamado Reviso 1.xls, abra o Editor do VBA e insira um novo mdulo. Refazer todo a reviso anterior utilizando Vetores. 2. Depois de criada a funo CPF, teste-a na planilha chamada CPF, para verificar se cada cpf da lista vlido ou no.
MDULO 8 MSGBOX E INPUTBOX Para haver interao entre o usurio e o programa, necessrio que exista uma interface de comunicao. Para isto, temos dois elementos bsicos para estabelecer esta ligao: o InputBox e o MsgBox . InputBox uma funo que permite ao usurio introduzir dados no programa, ou seja, permite que o usurio passe determinadas informaes que podem ser solicitadas pelo programa, portanto, trata-se de um mecanismo de input. J o MsgBox uma funo que permite ao usurio visualizar na tela os dados produzidos pelo programa, portanto, trata-se de um mecanismo output.
A FUNO MSGBOX
Em vrios problemas de mdulos anteriores, fizemos uso da funo msgbox para exibir uma caixa de mensagem. Utilizamos de maneira bsica, para poder exibir trechos de textos e valor de variveis. A funo MsgBox, exibe uma caixa de mensagem e aguarda uma resposta do usurio, atravs do clique em um boto, e retorna um valor do tipo Integer, que indica o boto clicado pelo usurio. Para uso desta funo, deve-se seguir a seguinte sintaxe: MsgBox(prompt, [buttons], [title], [helpfile], [context])
Na tabela a seguir segue uma descrio sobre os argumentos da funo: Parmetro Comentrio
Prompt Texto a ser exibido como mensagem na janela de (Obrigatrio) input. A dimenso mxima de 1024 caracteres. Nmero que identifica o tipo de botes que se Buttons pretende visualizar na janela de output. Se for (Opcional) omitido assumir o valor 0 por defeito. Title Titulo da janela de input. Se este for omitido, (Opcional) aparecer por defeito o nome da aplicao. Nome do arquivo de Help que ser utilizado para dar HelpFile apoio ao preenchimento desta janela. Se for (Opcional) indicado este parmetro o seguinte obrigatrio. Nmero do ndice do tpico de Help constante no Context arquivo HelpFile, e que corresponde janela em (Opcional) questo.
Ateno! Se pretender utilizar mais que um parmetro optativo respeite a ordem atravs do uso de vrgulas. O argumento buttons, um valor numrico. Este pode ser fornecido atravs do valor numrico ou atravs da utilizao de uma das constantes que sero descritas na prxima tabela. Constante Valor Descrio
VbOKOnly VbOKCancel VbAbortRetryIgnore VbYesNoCancel VbYesNo VbRetryCancel VbCritical VbQuestion VbExclamation VbInformation
0 1 2 3 4 5 16 32 48 64
Exibe somente o boto OK. Exibe os botes OK e Cancel. Exibe os botes Abort, Retry, e Ignore. Exibe os botes Yes, No, e Cancel . Exibe os botes Yes e No. Exibe os botes Retry e Cancel. Exibe o cone Critical Message. Exibe o cone Warning Query. Exibe o cone Warning Message. Exibe o cone Information Message.
O primeiro boto o selecionado por padro. O segundo boto o selecionado por VbDefaultButton2 256 padro. O terceiro boto o selecionado por VbDefaultButton3 512 padro. O quarto boto o selecionado por VbDefaultButton4 768 padro. Application modal o usurio s depois de responder MsgBox que poder VbApplicationModal 0 dar continuidade ao trabalho na aplicao corrente. System modal o usurio s depois de responder MsgBox que poder dar VbSystemModal 4096 continuidade ao trabalho em qualquer aplicao em curso no sistema. VbDefaultButton1 0
Analisando esta tabela podemos verificar a existncia de diferentes agrupamentos de cdigos: para definir o tipo de botes (0 5), para definir o tipo de cones (16, 32, 48, 64), para definir o boto selecionado por defeito (0, 256, 512, 768) e para indicar o modo de execuo (0 e 4096). Podemos adicionar os cdigos e assim fazer combinaes entre diversas opes destes 4 grupos, contudo nunca deveremos adicionar mais do que um cdigo por agrupamento.
Aps o aparecimento da caixa de mensagem, a depender do boto clicado pelo usurio, a funo MsgBox pode retornar diferentes valores. O valor retorna pela funo bem como a sua constante associada, esta descrita na tabela seguinte: Constante VBA Valor Boto Acionado
1 2 3 4 5 6 7
Para entendermos melhor o funcionamento do msgbox, proceda da seguinte maneira: 1. Abra uma nova pasta de trabalho do Excel. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
A FUNO INPUTBOX
A funo InputBox, exibe uma janela com uma mensagem e uma caixa de texto para que o usurio digite um valor ou uma entrada de texto. Tambm so exibidos botes como Ok, Sim, No, Cancelar, como no msgbox. O valor digitado na caixa de texto pelo usurio ser o valor de retorno da funo. A principal funcionalidade da funo InputBox, permite que o usurio entre com informaes para o procedimento ou funo. Para uso desta funo, deve-se seguir a seguinte sintaxe: InputBox(prompt, [title], [default], [xpos], [ypos], [helpfile], [context]) Na sintaxe da funo, pode-se perceber que a mesma possui diversos parmetros, mas somente o primeiro obrigatrio, sendo que todos os outros quando ignorados assumem valores atribudos por padro. Na tabela a seguir segue uma descrio sobre os argumentos da funo: Parmetro Comentrio
Prompt (Obrigatrio) Title (Opcional) Default (Opcional) Xpos (Opcional) Ypos (Opcional) HelpFile
Texto a ser exibido como mensagem na janela de input. A dimenso mxima de 1024 caracteres. Titulo da janela de input. Se este for omitido, aparecer por defeito o nome da aplicao. Valor padro da caixa de texto que aparecer no surgimento da janela. Se este parmetro for omitido o valor ser considerado vazio por padro. Nmero que identifica a distncia horizontal entre o lado esquerdo da tela e a janela de input. Se este valor for omitido a janela aparecer centralizada horizontalmente. Nmero que identifica a distncia vertical entre o lado superior da tela e a janela de input. Se este valor for omitido a janela ficar posicionada a 1/3 da parte inferior da tela. Nome do arquivo de Help que ser utilizado para dar
apoio ao preenchimento desta janela. Se for indicado este parmetro o seguinte obrigatrio. Nmero do ndice do tpico de Help constante no arquivo HelpFile, e que corresponde janela em questo.
Para entendermos melhor o funcionamento do inputbox, proceda da seguinte maneira: 1. Abra uma nova pasta de trabalho do Excel. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
Nesta, janela o usurio dever digitar um valor na caixa de texto e clicar o boto Ok. Caso o valor digitado no seja um nmero, aparecer a seguinte mensagem:
Clicando o boto Ok, aparecer uma caixa de mensagem, perguntando se o usurio deseja continuar:
Clicando o boto Sim, surgir novamente a tela solicitando do usurio a digitao de um valor entre 0 e 10. Caso o valor digitado seja um nmero, mas que no esteja entre o intervalo de 0 a 10, surgir seguinte caixa de mensagem:
Clicando o boto Ok, aparecer uma caixa de mensagem, perguntando se o usurio deseja continuar. Clicando em Sim, surgir novamente a tela solicitando do usurio a digitao de um valor entre 0 e 10. Caso o valor digitado seja um nmero e que esteja entre o intervalo de 0 a 10, surgir uma caixa de mensagem informando o valor digitado pelo usurio:
Clicando o boto Ok, aparecer uma caixa de mensagem, perguntando se o usurio deseja continuar. Clicando em No, o procedimento ser encerrado.
EXERCCIO
1. Crie um procedimento chamado de exerccio onde o usurio dever digitar um nmero entre 0 e 10. Em seguida um nmero aleatrio entre 0 e 10 gerado e comparado ao valor digitado pelo usurio at que estes sejam iguais. Esta tarefa dever ser repetida sempre que os valores forem diferentes. Ao trmino, informar o nmero de tentativas at encontrar a igualdade. Pronto! Com isso, aprendemos a utilizar as funes MsgBox e InputBox que sero de grande importncia para os mdulos posteriores.
MDULO 9 MODELOS DE OBJETOS DO EXCEL Objetos so elementos da planilha do Excel, caracterizados por um conjunto de propriedades e que possuem um determinado comportamento. Por exemplo, uma planilha do Excel um objeto, caracterizada por um nome, e que pode ser ativada, excluda e renomeada. Os diversos objetos disponveis e que so oferecidos por um programa esto agrupados em Bibliotecas. Uma Biblioteca um conjunto de objetos que so utilizados para uma determinada funo ou atividade. Por exemplo, temos uma biblioteca com os diversos objetos do Excel, que utilizaremos durante o curso, chamado Excel 11.0 Object Library. Nesta biblioteca encontramos objetos muito importantes para ns como o objeto Application (Aplicao), Workbook (Pasta de Trabalho), Worksheet (Planilha) e Range (Clulas).
Podemos perceber com isso, que os objetos pertencentes a uma biblioteca formam uma espcie de Hierarquia de Objetos.
Na figura anterior, podemos perceber que o objeto mais alto na hierarquia de objetos o objeto Application. Este representa o prprio Excel, ou seja, o aplicativo Excel. Logo abaixo, temos o objeto Workbook, que representa uma pasta de trabalho do Excel. Mais abaixo, encontramos o objeto Worksheet, que representa uma planilha do Excel, onde dentro de cada planilha podemos ter uma faixa de clulas que so representadas pelo objeto Range, objeto este que pode possuir diversas propriedades e mtodos.
PROPRIEDADES, OBJETOS
MTODOS,
EVENTOS
COLEES
DOS
Em cada biblioteca esto disponveis diversos objetos, onde cada um desses utilizado para um conjunto de aes especfico. Uma vez criado um objeto, podemos utilizar os diversos mtodos, propriedades e eventos deste objeto, para isto, precisamos saber o que significam. PROPRIEDADES As propriedades de um objeto constituem um conjunto de caractersticas que definem este objeto. Nome, cor e dimenso, so exemplos das propriedades de um objeto. MTODOS Determinam o comportamento de um objeto, ou seja, representam procedimentos que realizam operaes especificas. A opo de inserir, selecionar e procurar, so exemplos de mtodos pertencentes a objetos. EVENTOS Representam todas as atividades que envolvam o objeto. Estes servem para que possamos ativar uma determinada tarefa, quando houver uma solicitao do usurio. Abrir ou fechar uma pasta de trabalho do Excel, o clique sobre um boto ou uma planilha, so exemplos de eventos. COLEES Constituem um conjunto de elementos do mesmo tipo. Por exemplo, toda pasta de trabalho do Excel, possui uma coleo chamada de Worksheets, que representa todas as planilhas existentes nesta pasta de trabalho.
Nesta parte, conheceremos um pouco sobre os principais objetos disponveis na biblioteca de objetos do Excel, para se ter um entendimento preciso de quando utilizar cada um desses objetos para solucionar problemas prticos que sero abordados em assuntos posteriores. OBJETO APPLICATION Objeto pertencente ao topo hierrquico da biblioteca de objetos do Excel, que representa todo o aplicativo do Excel carregado em memria. Por exemplo, ao abrir o Excel, automaticamente criado na memria da mquina, um objeto Application. Use a propriedade Application para retornar o objeto Application. Quando estivermos trabalhando dentro de uma determinada planilha, no preciso criao explicita de um objeto Application. Por exemplo, se desejarmos fazer referncia dentro do cdigo a uma determinada clula, no precisamos criar um objeto Application, seguido de um Workbook e um Worksheet para poder finalmente acessar as clulas da planilha. Ao invs disso, podemos fazer referncia direta clula desejada. Com isso, o Excel supe que estamos trabalhando com a instncia atual do Excel, dentro da pasta de trabalho atual, dentro de uma das planilhas, o que bastante significativo. Somente precisaramos criar toda esta hierarquia de objetos, caso desejssemos fazer referncia a uma clula de uma planilha de uma pasta de trabalho externa. Por exemplo, caso desejssemos formatar a clula A1 da planilha chamada Plan1, da pasta de trabalho atual, poderamos seguir este cdigo: Application.ActiveWorkbook.Worksheets("Plan1").Range("A1"). Font.Bold = True
Mas se caso desejarmos uma declarao mais simplificada, poderamos simplesmente fazer: Application.Range("A1").Font.Bold = True Simplificando mais ainda, poderamos fazer: Range("A1").Font.Bold = True Observe que ao invs de utilizar toda a hierarquia de objetos para chegar at a clula a ser formatada, podemos apenas definir a clula que ser formatada que o Excel j pressupe que esta clula pertence instncia atual do Excel, da pasta de trabalho atual e da planilha atual. A seguir segue uma lista com as principais propriedades e mtodos deste objeto. Caption Path Propriedades Texto exibido na barra de ttulo do Excel. Nome do diretrio onde o Excel est instalado. O estado da janela da aplicao: XlNormal tamanho normal. XlMaximized tamanho maximizado. XlMinimized tamanho minimizado. Exibe ou oculta a Barra de Status. True exibe Exibe ou oculta a Barra de Formulas True exibe
WindowState
DisplayStatusBar DisplayFormulaBar
Mtodos Implica o clculo de todas as frmulas de todas as Planilhas Calculate e pastas de trabalho abertos. Quit Fecha a aplicao Excel. OBJETO WORKBOOK O objeto Workbook, na hierarquia de objetos, segue de imediato o objeto application e representa uma pasta de trabalho do Excel, ou seja, um arquivo .xls, onde podem haver uma ou mais planilhas. Este objeto membro da coleo Workbooks que possui todos os objetos Workbook atualmente abertos no Excel. Para fazer referncia a um objeto Workbook, podemos utilizar diversas propriedades, como: Propriedade Workbooks Propriedade ActiveWorkbook
Propriedade Workbooks Para fazer referncia ao objeto Workbook atravs do uso desta propriedade, devemos seguir a seguinte sintaxe: Workbooks(ndice) Onde ndice, o nmero de ndice ou o nome da pasta de trabalho que ir retornar um nico objeto Workbook. O exemplo a seguir, salva a pasta de trabalho identificada pelo ndice 1, ou seja, salva a primeira pasta de trabalho que foi aberta. Workbooks(1).Save
Propriedade ActiveWorkbook O uso desta propriedade refere-se pasta de trabalho que esta ativa no momento. O exemplo a seguir, protege a pasta de trabalho que esta ativa. ActiveWorkbook.Protect A seguir segue uma lista com as principais propriedades e mtodos deste objeto. Propriedades Nome do arquivo. No permite a alterao do nome, para isso necessrio utilizar a propriedade SaveAs. Path Diretrio onde o arquivo se encontra. Determina se o arquivo encontra-se salvo. True se no houve nenhuma alterao no arquivo desde a Saved ltima gravao. False caso contrrio. Name
Mtodos
Ativa um documento aberto. Fecha um documento. Protege um documento contra qualquer tipo de Protect alterao. Save Salva a pasta de trabalho. SaveCopyAs Cria uma cpia do documento em questo.
Activate Close
OBJETO WORKSHEET Objeto que esta abaixo do objeto Workbooks na hierarquia de objeto do Excel. Refere-se a uma planilha da pasta de trabalho e membro da coleo Worksheets. Para fazer referncia a um objeto Worksheet, podemos utilizar diversas propriedades, como: Propriedade Worksheets Propriedade ActiveSheet
Propriedade Worksheets Para fazer referncia ao objeto Worksheet atravs do uso desta propriedade, devemos seguir a seguinte sintaxe: Worksheets(ndice) Onde ndice, o nmero de ndice ou o nome da planilha que ir retornar um nico objeto Worksheet. O exemplo a seguir, oculta a planilha 1 (um) da pasta de trabalho ativa. Worksheets(1).Visible = False O nmero de ndice da planilha especifica a posio da planilha na guia de planilhas da pasta de trabalho. Onde Worksheets(1) a primeira planilha (mais esquerda). Podemos tambm usar como ndice o nome da planilha. O exemplo a seguir, protege a planilha chamada Plan1. Worksheets("plan1").Protect
Propriedade ActiveSheet O uso desta propriedade refere-se planilha que esta ativa no momento. O exemplo a seguir, imprime a planilha que esta ativa. ActiveSheet.PrintOut A seguir segue uma lista com as principais propriedades e mtodos deste objeto. Propriedades
Name Visible
Ativa uma determinada planilha. Apaga uma planilha da pasta de trabalho. Protege uma planilha contra qualquer tipo de alterao.
OBJETO RANGE Este um dos objetos mais utilizados no Excel, pois representa uma clula ou uma faixa de clulas em um determinado intervalo. Para fazer referncia a um objeto Range, podemos utilizar diversas propriedades e mtodos, como: Propriedade Range Propriedade Cells Propriedade Offset Mtodo Union
Propriedade Range Para fazer referncia ao objeto Range atravs do uso desta propriedade, devemos seguir a seguinte sintaxe: Range (argumento) Onde argumento, contm o endereo de uma clula ou intervalo de clulas. O exemplo a seguir, copia o valor da clula A3, para a clula A1. Range(A1).Value = Range(A3).Value VBA. O exemplo a seguir, preenche o intervalo de clulas com o texto Range("A1:A8").Value = "VBA" O exemplo a seguir, apaga o contedo do intervalo chamado banco. Range("banco").ClearContents Propriedade Cells Para utilizar esta propriedade, devemos utilizar a seguinte sintaxe: Cells (linha, coluna) Onde linha, contm o ndice da linha e coluna, contm o ndice da coluna para retornar uma clula. Por exemplo: Se desejarmos fazer referncia a clula A1, devemos apenas utilizar Cells (1,1). Ou seja, linha 1 e coluna 1 da planilha (clula A1).
O exemplo a seguir, preenche a clula A1 com um nmero randmico. Cells(1, 1).Formula = "=rand()" Em algumas situaes o uso da propriedade Cells para fazer referncia as clulas mais apropriado do que a utilizao da propriedade Range, pois com a propriedade Cells, podemos utilizar uma varivel para a linha ou a coluna e percorrer todo um intervalo dentro de uma lao de repetio. Para entendermos melhor a explicao, proceda da seguinte maneira: 1. Abra uma nova pasta de trabalho do Excel. 2. Abra o Editor do VBA. 3. Insira um novo mdulo e dentro dele, digite o cdigo a seguir:
O exemplo anterior, preenche todo o intervalo de A1:A10 com nmeros seqenciais de 1 a 10.
Propriedade Offset Utilizado para fazer referncia a um intervalo de clulas, atravs do deslocamento de outro intervalo. Esta propriedade pouco trabalhada se comparada s anteriores. Para utiliz-la devemos seguir a seguinte sintaxe: Offset (linha, coluna) Onde, linha e coluna, so os deslocamentos que iro retornar um intervalo de clulas especifico. Para entender melhor a utilizao desta propriedade, visualize o problema abaixo:
No problema anterior, a clula C2 da planilha 1 selecionada e logo a seguir, 3 linhas abaixo e 1 coluna a direita dela selecionada. Mtodo Union Utilizado para fazer referncia a intervalos de vrias reas, isto , intervalos compostos de dois ou mais blocos de clulas. Para utilizar este mtodo, devemos seguir a seguinte sintaxe: Union (intervalo1, intervalo2, ...) Onde intervalo o intervalo de clulas que se deseja retornar.
No exemplo anterior, criamos um objeto definido pela unio dos intervalos A2:C3 e D4:G7 e em seguida, este selecionado.
Nesta parte, trabalharemos com alguns exemplos na utilizao dos principais objetos do Excel. Exemplo 1 Abrir uma planilha que se encontra gravada no disco rgido: Para este exemplo, faremos uso do mtodo Open:
No exemplo anterior, utilizamos o mtodo Open, da coleo Workbooks do objeto Application, para ter acesso ao arquivo Controle.xls que se encontra gravado no disco rgido (C:).
Exemplo 2 O usurio seleciona a planilha que ser aberta: Para este exemplo, faremos uso do mtodo GetOpenFilename:
No exemplo anterior, utilizamos o mtodo GetOpenFilename, pertencente ao objeto Application que exibe a caixa de dilogo Abrir. Aps o usurio selecionar o arquivo na caixa, o nome deste ser atribudo a varivel caminho. Logo em seguida, testamos para saber se algum arquivo foi selecionado, caso verdadeiro, uma mensagem aparece informando que o arquivo ser aberto. Depois da confirmao da mensagem, o arquivo selecionado abrese para o usurio. MDULO 10 FORMULRIOS NO VBA (USERFORMS)
Neste mdulo, aprenderemos a criar formulrios para serem utilizados nas nossas aplicaes com o objetivo de tornar nosso trabalho mais interativo, ou seja, fazer com que o usurio acesse e manipule as informaes da nossa planilha de forma clara e facilitada.
INTRODUO SOBRE FORMULRIOS
O uso mais comum e prtico para os Userforms a criao de formulrios que atuam como uma interface mais amigvel para o usurio. Na figura a seguir, temos um exemplo de um formulrio, utilizado para a entrada de dados com a finalidade de cadastrar e excluir funcionrios:
Este, no entanto, facilita bastante o trabalho principalmente de um usurio sem experincia no Excel que no sabe manipular planilhas. Observe que, desta maneira, podemos criar um aplicativo bastante parecido com softwares profissionais vistos no dia-a-dia.
CRIANDO UM USERFORM
Para criar um userform, dentro do Editor do VBA, proceda da seguinte maneira: 1. Clique o menu Inserir, do Editor do VBA. 2. Clique a opo Userform. Com isso, surgir o novo userform criado:
Observe que o novo formulrio vem em branco, sem nenhum boto ou controle. Alm disso, podemos visualizar tambm no Project Explorer, o cone referente ao formulrio criado.
CAIXA DE FERRAMENTAS
Depois de inserido o formulrio, precisamos agora decidir quais controles faro parte dele, ou seja, devemos escolher quais botes ou controles desejamos inserir no formulrio, mas para isso, precisamos conhecer a caixa de ferramentas.
A caixa de ferramentas contm diferentes controles nos quais podem ser inseridos no formulrio. Para visualizar a caixa de ferramentas, proceda da seguinte maneira: 1. Clique o menu Exibir. 2. Clique a opo Caixa de Ferramentas.
JANELA DE PROPRIEDADES
Nesta janela encontramos as propriedades pertencentes a cada controle selecionado, atravs dela podemos alterar nos controles a sua cor, dimenso, nome e etc. Para visualizar a janela de propriedades, proceda da seguinte maneira: 1. Clique o menu Exibir. 2. Clique a opo Janela de propriedades.
Antes de comear a trabalhar com os controles, conheceremos algumas de suas propriedades que sero de extrema importncia com o trabalho dos mesmos. PROPRIEDADE AUTOSIZE Esta propriedade determina se o controle pode ser automaticamente redimensionado para exibir todo o seu contedo. Nesta propriedade encontramos dois valores (True ou False). PROPRIEDADE AUTOTAB Esta propriedade determina se ir ocorrer a tabulao automtica quando o usurio digita o nmero mximo de caracteres permitido no controle. Nesta propriedade encontramos dois valores (True ou False).
PROPRIEDADE BACKCOLOR Esta propriedade utilizada para definir a cor do segundo plano do controle. PROPRIEDADE BACKSTYLE Esta propriedade utilizada para definir o estilo do segundo plano do controle. Nesta propriedade encontramos dois valores: fmBackStyleTransparent ou 0: O segundo plano transparente. fmBackStyleOpaque ou 1: O segundo plano opaco (padro). PROPRIEDADE BORDERCOLOR Esta propriedade utilizada para definir a cor da borda do controle. PROPRIEDADE BORDERSTYLE Esta propriedade utilizada para definir o estilo da borda do controle. Nesta propriedade encontramos dois valores: fmBorderStyleNone ou 0: O controle no tem linha de borda visvel. fmBorderStyleSingle ou 1: O controle tem uma borda de linha nica (padro).
PROPRIEDADE BOUNDCOLUMN Esta propriedade identifica a fonte de dados de um controle Caixa de combinao (ComboBox) ou uma Caixa de listagem(ListBox) de varias colunas. Se o controle possuir mais de uma coluna, esta propriedade indica qual valor ser associado ao controle, depois que uma opo da lista for selecionada. Nesta propriedade devemos definir um nmero inteiro que identifica a posio da coluna que dever ter seu valor retornado, por exemplo: 1 para a primeira coluna, 2 para a segunda e assim por diante. PROPRIEDADE COLUMNCOUNT Esta propriedade utilizada para determinar o nmero de colunas a serem exibidas em uma caixa de listagem ou em uma caixa de combinao. Nesta propriedade devemos definir um nmero inteiro que identifica a quantidade de colunas a serem exibidas no controle, por exemplo: 1 para exibir uma coluna, 2 para exibir duas colunas e assim por diante. Se definir valor 0, nenhuma coluna ser mostrada, e se definir o valor -1, todas as colunas sero mostradas. PROPRIEDADE CONTROLTIPTEXT Esta propriedade utilizada para um texto que aparece quando o usurio mantm, durante um momento, o ponteiro do mouse sobre o controle sem clicar. PROPRIEDADE ENABLED Esta propriedade especifica se o controle pode receber o foco e responder aos eventos gerados pelo usurio. Nesta propriedade encontramos dois valores (True ou False).
PROPRIEDADE LISTROWS Esta propriedade especifica o nmero mximo de linhas a exibir na lista de uma caixa de combinao ou caixa de listagem. PROPRIEDADE MAXLENGTH Esta propriedade especifica o nmero mximo de caracteres que o usurio pode digitar em uma caixa de texto ou em uma caixa de combinao. Nesta propriedade devemos definir um nmero inteiro que identifica a quantidade de caracteres a serem exibidas no controle, por exemplo: 1 para exibir um caractere, 2 para exibir dois caracteres e assim por diante. Se definir valor 0, indica que na h limite para digitao alm do criado por restries da memria. PROPRIEDADE ROWSOURCE Esta propriedade especifica a origem que fornece uma lista para o controle caixa de combinao ou caixa de listagem. PROPRIEDADE TABINDEX Esta propriedade especifica a posio do controle selecionado na ordem de tabulao do formulrio. Nesta propriedade devemos definir um nmero inteiro que identifica a ordem de tabulao do controle, por exemplo: 0 para o primeiro objeto, 1 para o segundo e assim por diante. PROPRIEDADE TEXT Esta propriedade utilizada para retornar ou definir o texto em um controle caixa de texto.
CONTROLES DE FORMULRIOS
Depois de ter conhecido as principais propriedades dos controles, iremos agora conhecer estes controles de formulrios importantes para o trabalho no VBA. Nesta parte trabalharemos com os controles: Caixa de Listagem Caixa de Seleo Boto de Opo Boto de Rotao Caixa de Combinao
CONTROLE CAIXA DE LISTAGEM Neste tipo de controle temos uma lista de valores, onde podemos apenas selecionar uma ou mais opes caso o controle tenha sido configurado para isso. Para entendermos o funcionamento deste controle vamos a um exemplo prtico. Iremos selecionar uma opo na caixa de listagem e a opo selecionada aparecer escrita em uma caixa de mensagem. Para isso proceda da seguinte maneira: 1. Abra o arquivo Exerccio 14.xls localizado na pasta da turma. 2. Inicie o Editor do VBA. No editor, voc ver o seguinte formulrio:
4. Execute o formulrio e ao clicar sobre uma das opes da lista o valor aparecer numa caixa de mensagem. CONTROLE CAIXA DE SELEO Este tipo de controle exibido no formulrio no formato de um pequeno quadrado que pode se encontrar marcado ou desmarcado. Para entendermos o funcionamento deste controle vamos a um exemplo prtico. Iremos selecionar algumas opes e logo em seguida as opes selecionadas aparecero em uma caixa de mensagem. Para isso proceda da seguinte maneira: 1. Abra o arquivo Exerccio 15.xls localizado na pasta da turma. 2. Inicie o Editor do VBA. No editor, voc ver o seguinte formulrio:
3. Clique duplamente sobre o boto de comando chamado resultado e digite o seguinte cdigo:
4. Execute o formulrio e ao clicar sobre o boto Resultado, as opes escolhidas aparecero numa caixa de mensagem.
CONTROLE BOTO DE OPO Este tipo de controle exibido no formulrio no formato de um pequeno crculo que pode se encontrar marcado ou desmarcado. Importante! No confundir este controle com o controle caixa de seleo. Neste o usurio pode apenas selecionar uma das opes oferecidas.
Para entendermos o funcionamento deste controle vamos a um exemplo prtico. Iremos selecionar algumas opes e logo em seguida as opes selecionadas aparecero em uma caixa de mensagem. Para isso proceda da seguinte maneira: 1. Abra o arquivo Exerccio 16.xls localizado na pasta da turma. 2. Inicie o Editor do VBA. No editor, voc ver o seguinte formulrio:
3. Clique duplamente sobre o boto de comando chamado resultado e digite o seguinte cdigo:
4. Execute o formulrio e ao clicar sobre o boto Resultado, a opo escolhida aparecer numa caixa de mensagem.
CONTROLE BOTO DE ROTAO Este tipo de controle utilizado para incrementar e decrementar nmeros. Para entendermos o funcionamento deste controle vamos a um exemplo prtico. Iremos indicar a idade, atravs do boto de rotao. Para isso proceda da seguinte maneira: 1. Abra o arquivo Exerccio 17.xls localizado na pasta da turma. 2. Inicie o Editor do VBA. No editor, voc ver o seguinte formulrio:
4. Execute o formulrio e ao clicar sobre o boto de rotao, os nmeros iro aparecendo na caixa de texto.
CONTROLE CAIXA DE COMBINAO Este tipo de controle utilizado para exibir uma lista de opes. Para entendermos o funcionamento deste controle vamos a um exemplo prtico. Iremos selecionar uma opo da lista e esta ser mostrada em uma caixa de mensagem. Para isso proceda da seguinte maneira: 1. Abra o arquivo Exerccio 18.xls localizado na pasta da turma. 2. Inicie o Editor do VBA. No editor, voc ver o seguinte formulrio:
4. Execute o formulrio e ao selecionar um estado na caixa de combinao, este ser informado em uma caixa de mensagem.
PROJETO FINAL Neste projeto, cada aluno dever criar um sistema em Excel utilizando os recursos do VBA vistos durante o curso, para controle de um estabelecimento. Este projeto ir compor a nota final do curso. Solicite ao seu instrutor as informaes necessrias para criao de tal projeto. Fiquem atentos ao prazo de entrega e aos requisitos bsicos para criao do projeto. BOA SORTE!!!