Transcript
  • T204D

    VBAFred LucenaErick Franklin

    V i s u a l B a s i c

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Sumrio

    1. INTRODUO 3

    1.1. OBJETIVOS DO CURSO 31.2. O QUE VOC J DEVE ESTAR SABENDO 3

    2. AUTOMATIZANDO TAREFAS 3

    2.1. VINCULANDO MACROS A OUTROS OBJETOS 82.2. FUNES DE USURIO 8

    3. CONHECENDO OS PROCEDIMENTOS DO VBA 10

    3.1. CONSIDERAES SOBRE PROCEDIMENTOS 11

    4. CONHECENDO OS OBJETOS, PROPRIEDADES E MTODOS DO VBA 11

    4.1. UTILIZANDO OS OBJETOS, PROPRIEDADES E MTODOS DO VBA 124.2. OBJETO INTERVALO 124.3. MTODO INTERVALO 134.4. MTODO SELECIONAR 13

    5. ENTENDENDO MELHOR OS CDIGOS DO VBA 13

    5.1. FORMAS DE APRESENTAO DAS INSTRUES 145.1.1. INSTRUO DE ATRIBUIO 145.1.2. INSTRUO PREDEFINIDA 145.1.3. INSTRUO COM TESTE DE CONDIO 145.1.4. INSTRUO DE DEFINIO DE PROPRIEDADES DOS OBJETOS 145.1.5. INSTRUO DE EXECUO DOS MTODOS DOS OBJETOS 145.1.6. OPO EXPLICITA 155.1.7. DIM VALOR 15

    5.2. CONHECENDO AS FERRAMENTAS DE FORMULRIOS 165.2.1. CONHECENDO CADA BOTO 18

    6. PROJETO 44

    6.1. TELA DO MENU 446.2. TELA DO CADASTRO 446.3. PLANILHA OU DOCUMENTO DE DADOS 45

    Fred Lucena / Erick Franklin Pgina: 2

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    1. IntroduoVoc j usurio de planilhas eletrnicas ? Conhece bem os recursos bsicos do Office ? Sabe gerar grficos ? Manipular bancos de dados ? Pois bem. Se voc respondeu sim a todas essas perguntas, est habilitado a fazer este curso. Caso no, aproveite este tempo que antecede ao curso para revisar alguns conceitos, dicas e truques do Office.

    1.1. Objetivos do CursoO que bsico no Office ? Para responder a esta pergunta interessante que faamos uma outra: qual o objetivo deste curso ? Em que devemos estar capacitados a fazer ao trmino deste treinamento?

    O curso de VBA tem como objetivo fazer com que voc consiga sistematizar uma planilha ou documento para que o usurio leigo possa ter acesso sem precisar conhecer o Office. Para isto faremos uso de dois recursos fundamentais do Office:

    Macos

    Cdigos VBA

    Antes porm, voc precisa adquirir a devida habilidade na manipulao de clulas. Faremos portanto uma breve reviso nos recursos mais importantes para agilizar o nosso trabalho de hoje em diante, sempre abordando os temas atravs de dicas e truques.

    1.2. O que voc j deve estar sabendoConsiderando como bsico os temas abaixo, esperamos que voc j os tenha dominado. Caso ainda no tenha segurana nesses tpicos, sugerimos retornar ao curso bsico ou, caso voc tenha total domnio sobre 75% do contedo abaixo, aproveitar as primeiras trs horas deste curso para uma breve reviso.

    2. Automatizando TarefasCom a utilizao do conceito de macros existente no OFFICE, possvel fazer com que aes que executamos com muita freqncia sejam feitas de uma forma mais simples e rpida.

    A ttulo de exemplo utilizando o Office, vamos supor que logo aps digitarmos o ttulo de uma determinada planilha, utilizamos sempre uma formatao do tipo:

    Fonte da letra: Arial

    Tamanho: 18

    Estilo: Negrito

    Bordas: Externas

    Alinhamento: Centralizado em colunas

    Para executar as operaes acima, seria necessrio proceder da seguinte forma:

    Posicionar na clula e digitar o texto;

    Demarcar o intervalo de colunas para a centralizao;

    Clicar no boto centralizar em colunas;

    Selecionar a fonte Arial;

    Selecionar tamanho igual a 18;

    Clicar no boto negrito;

    Fred Lucena / Erick Franklin Pgina: 3

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Selecionar boto de bordas;

    Clicar em bordas externas.Para automatizar todas as operaes de formatao que vimos anteriormente, utilizaremos uma macro que poder ser criada a partir da seqncia abaixo:

    Posicione na clula C5, digite um texto qualquer e tecle ENTER;

    Clique na clula C5 e mantendo o boto pressionado, arraste at a clula F5;

    Selecione no menu Ferramentas o item Macro e depois Gravar Nova Macro;

    Digite o nome da macro que no nosso caso chamaremos de FormataTtulo e Clique em OK;

    Clique no boto Centralizar colunas selecionadas;

    Selecione a fonte Arial;

    Selecione o tamanho 18 para a fonte;

    Clique no boto de borda e selecione borda externa;

    Clique no boto Encerrar Macro.

    Aps executadas as operaes acima, poderemos testar a nossa primeira macro conforme a seqncia abaixo:

    Posicione na clula C5, digite um texto qualquer e tecle ENTER;

    Clique na clula C5 e mantendo o boto pressionado, arraste at a clula F5;

    Selecione no menu Ferramentas o item Macro e clique na opo Macros;

    Clique sobre o nome da nova macro e depois no boto Executar;

    Perceba que para executar a mesma operao feita sem o uso da macro, utilizamos apenas a metade dos procedimentos mostrados anteriormente.

    Esta diferena aumenta a medida que precisamos executar mais alteraes ao mesmo tempo.

    Com a utilizao da macro, foi possvel reduzir bastante o trabalho de formatao como acabamos de constatar.

    possvel tornar este trabalho ainda menor, atravs da utilizao de macros a partir de teclas de atalho como veremos a seguir:

    No menu Ferramentas, selecione o item Macro e clique na opo Macros;

    Selecione a macro que acabamos de criar e Clique em Opes;

    Posicione na rea ao lado de Ctrl + e digite s ( minsculo );

    Clique no boto OK e depois Fechar.

    Para conferir as vantagens da tecla de atalho, faa o seguinte:

    Posicione na clula C5, digite um texto qualquer e tecle ENTER;

    Clique na clula C5 e mantendo o boto pressionado, arraste at a clula F5;

    Mantendo a tecla Ctrl pressionada, digite S.

    Veja como diminumos a quantidade de procedimentos, a partir da implementao da tecla de atalho.

    Sempre que criarmos uma macro, importante informarmos a sua descrio para que possamos manter um bom controle sobre a mesma.

    Ao criarmos uma macro, a mesma ficar vinculada pasta de trabalho atual, ou seja, ao abrirmos esta pasta a macro estar automaticamente disponvel.

    Ative o menu Ferramentas, selecione o item Macro e clique na opo Macros; e em seguida selecione o nome da macro criada e clique no boto Editar.

    Fred Lucena / Erick Franklin Pgina: 4

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Perceba que a janela tem como nome Mdulo1, clique sobre a mesma e perceba que, diferente das outras, esta no contm clulas, mais sim, cdigos em VBA (Visual Basic para Aplicativos) com todas as configuraes criadas quando da gerao da macro.

    Para fazer com que a macro esteja disponvel a qualquer nova pasta de trabalho, necessrio que configuremos um novo local para o seu armazenamento.

    O local de armazenamento ao qual nos referamos a pasta pessoal de macros, e a ttulo de exemplo, criaremos uma nova macro com o intuito de esconder as guias de planilha.

    Para a criao da nova macro, siga os passos abaixo:

    Feche a pasta atual sem gravar a mesma e abra uma nova;

    Selecione no menu Ferramentas o item Macro e depois Gravar Nova Macro;

    Digite o nome da macro que no nosso caso chamaremos de GuiaPlanilha ou documento e aproveite para descrever sua funo;

    Clique no boto Armazenar macro em e selecione o item Pasta de Trabalho Pessoal de Macros;

    Posicione na rea destinada a tecla de atalho e digite g ( minsculo ) ;

    Clique no boto OK;

    Selecione no menu Ferrametas o item Opes e depois estando posicionado na pasta Exibir, desative o item Guias da Planilha ou documento e por ltimo Clique no boto OK;

    Clique no boto Encerrar Macro.

    Para conferirmos a nova macro, primeiro tornaremos as guias novamente visveis atravs do menu Ferramentas / Opes / Guias da Planilha.

    Agora podemos testar a nossa macro, bastando para tanto, acionarmos a tecla de atalho que criamos.

    Ctrl+G.

    Podemos tambm executar a nova macro, atravs do item Ferramentas /Macros / Macros.

    Perceba que o nome da macro passou a ser PESSOAL.XLS!GuiaPlanilha, indicando assim, que ela faz parte das macros pessoais, que por consequncia, pode ser usada em qualquer pasta.

    Se tentarmos enxergar a nova macro no final das guias, verificaremos que a mesma no existe, ou melhor, no est visvel pois no faz parte da pasta atual.

    Para visualizar uma macro pessoal, necessrio selecionar o item Janela / Reexibir / PESSOAL.XLS e depois clicar o boto OK.

    Vamos aproveitar este momento para conhecer melhor o interior de uma macro.

    Na parte superior (em verde) possvel visualizar o cabealho que tem a funo de identificar a macro.

    Este cabealho pode ser alterado a qualquer momento que se queira, bastando clicar e escrever.

    tambm mostrado, nvel de cabealho, a tecla de atalho configurada para a execuo da macro.

    Caso seja configurada a mesma tecla de atalho para mais de uma macro, apenas a primeira prevalecer.A seguir, poderemos encontrar a macro propriamente dita.

    Perceba que toda macro comea com a palavra Sub acompanhada do nome da macro e mais dois parnteses, isto porque, a macro um procedimento desenvolvido em VBA.

    Logo abaixo do nome da macro, encontraremos a seguinte linha de comando:

    ActiveWindow.DisplayWorkbookTabs = False objeto . propriedade = situao

    Aps a linha de comando, encontraremos o comando End Sub que indica o final da macro.

    Fred Lucena / Erick Franklin Pgina: 5

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Quando tornamos falsa a situao da propriedade DisplayWorkbookTabs da ActiveWindow, estamos fazendo com que a sua atuao (ou seja, a apresentao das guias) seja nula.

    At ai tudo bem!

    Mas suponhamos que aps eliminar a apresentao das guias, voc queira torn-las ativas novamente.

    Agora a nossa macro no pode fazer nada j que foi criada apenas para ocultar as guias.

    Por ser uma ferramenta de desenvolvimento, claro, guardando-se as devidas propores, ns podemos fazer com que a macro seja mais abrangente, servindo no s para esconder as guias, como tambm para torn-las visveis.

    Para por em prtica a nossa idia, siga a seqncia abaixo:

    Demarque a parte esquerda da linha de comando conforme mostrado abaixo:

    ActiveWindow.DisplayWorkbookTabs = False

    Copie para a rea de transferncia usando o boto copiar ou as teclas Ctrl+C.

    Demarque a palavra Falso conforme mostrado abaixo:

    ActiveWindow.DisplayWorkbookTabs = False

    Digite a palavra Not e d um espao.

    Clique no boto colar ou utilize as teclas de atalho Ctrl+V.

    Veja se voc obteve a linha abaixo:

    ActiveWindow.DisplayWorkbookTabs = Not ActiveWindow.DisplayWorkbookTabs

    Em caso afirmativo, selecione o item Janela, Ocultar e logo a seguir pressione Ctrl+G vrias vezes e veja as guias sendo apresentadas ou escondidas a medidas que pressionamos.

    Se tivssemos apenas repetido do lado direito do sinal de igual a parte esquerda da linha, no teramos obtido o resultado desejado.

    A presena da linha ActiveWindow.DisplayWorkbookTabs a direita do sinal de igual, faz com que a situao da mesma seja retornada mais no modificada como desejvamos.

    O Not que faz com que a propriedade a esquerda receba o contrrio da situao atual capturada a direita da igualdade.

    Ex1 : ActiveWindow.DisplayWorkbookTabs ( retorna VERDADEIRO se as guias estiverem visveis )

    Ex2 Not ActiveWindow.DisplayWorkbookTabs ( retorna FALSO se as guias estiverem visveis )

    Se observarmos a macro anterior, podemos constatar que a linha de comando ficou um tanto quanto extensa. No VBA, possvel simplificar linhas de comando atravs da palavra chave With, que tem a funo de eliminar a repetio do nome do objeto. Veja como:

    Torne a exibir a janela da macro atravs do item Janela / Reexibir;

    Posicione o cursor logo aps a palavra JanelaAtivas e tecle ENTER;

    Fred Lucena / Erick Franklin Pgina: 6

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Posicione o cursor a esquerda da palavra JanelaAtiva e digite Com dando um espao logo depois;

    D um Clique duplo na palavra JanelaAtiva que encontra-se a direita do No, e pressione a tecla Delete;

    Posicione no fim da linha .Exibio... e tecle ENTER;

    Digite a linha End With.

    Aps feita as alteraes, voc deve ter obtido as linhas abaixo:

    Sub GuiaPlanilha()'' GuiaPlanilha ou documento Macro' Esconde as guias de planilha'' Atalho do teclado: Ctrl+g' With ActiveWindow .DisplayWorkbookTabs = Not .DisplayWorkbookTabs End WithEnd Sub

    Pressione o conjunto de teclas de atalho Ctrl + G, e perceba que a macro continua funcionando normalmente.

    A medida que criamos macros e atalhos, fica cada vez mais difcil memorizar cada uma delas.

    Este problema pode ser solucionado seguindo a mesma filosofia do OFFICE, ou seja, utilizando botes para a execuo das operaes.

    Para a vinculao de uma macro a um boto, proceda da seguinte forma:

    Selecione o item Exibir e depois Barra de Ferramentas;

    Clique no item Personalizar na lateral direita;

    Estando na pasta Personalizar, selecione em Comandos, e na pasta Categoria o item Macros ;

    Clique no item Personalizar boto e pressione arrastando at a barra de ferramentas;

    Aps soltar o boto do mouse, clique no boto Modificar seleo e no item Atribuir macro, ser solicitado o nome da macro a ser vinculada, Clique sobre PESSOAL.XLS!GuiaPlanilha ou documento e depois no boto OK;

    Na janela atual, Clique em Fechar.

    Agora para executar a nossa macro, basta clicar no boto que acabamos de criar.

    Deixar o boto com a figura padro ou utilizar um dos botes com figuras, ainda no resolve o nosso problema.

    O ideal seria que o nosso boto, recentemente criado, tivesse em seu interior, uma figura que identificasse a sua funo.

    Com o intuito de solucionar de uma vez o nosso problema, faremos uma alterao em nosso boto, incluindo uma figura. Repita a seqncia abaixo:

    Selecione o item Exibir e depois Barra de Ferramentas;

    Clique no boto Personalizar na lateral direita;

    Clique com o boto do mouse sobre o boto recentemente criado e em seguida o boto Modificar Seleo;

    Selecione o item Editar Imagem do Boto;

    Com o boto esquerdo do mouse selecione a cor desejada do lado direito e Clique do lado esquerdo desenhando a figura 6;

    Fred Lucena / Erick Franklin Pgina: 7

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Clique no boto OK e na janela seguinte o boto Fechar.

    Teste o boto com a nova apresentao.

    Acho que agora podemos nos dar por satisfeitos, pois conseguimos unir a fcil identificao e o rpido acesso a nossa macro.

    2.1. Vinculando Macros a outros ObjetosVimos anteriormente as facilidades na criao de botes e sua vinculao com as macros.

    Alem da vinculao com botes, possvel fazer com que a macro seja acionada a partir de objetos diversos.

    Faremos agora, alguns exerccios mostrando vinculaes de macros com objetos, comeando por figuras do tipo bmp (BIT MAP).

    Para o nosso primeiro exerccio, siga os passos abaixo:

    A partir do menu Inserir, selecione uma figura qualquer, seja ela do windows ou de outro aplicativo;

    Aps a insero, estando com a figura selecionada, clique com o boto direito do mouse sobre a figura e no item Atribuir Macro;

    Na relao de macros apresentadas, clique sobre PESSOAL.XLS!GuiaPlanilha ou documento e depois no boto OK.

    Perceba que ao aproximar-mos o apontador do mouse da figura inserida, o mesmo se transforma em uma mo com o dedo indicador em riste e que ao pressionar-mos o boto esquerdo do mouse, a macro ser executada da mesma forma que no exerccio anterior.

    Legal no ?

    E para executar o nosso segundo exerccio, siga as orientaes a seguir:

    Utilizando a barra de ferramentas, faa um desenho qualquer;

    Selecione o objeto criado clicando sobre ele com o boto direito do mouse;

    Selecione o item , Atribuir Macro;

    Na relao de macros apresentadas, clique sobre PESSOAL.XLS!GuiaPlanilha ou documento e depois no boto OK.

    2.2. Funes de UsurioTo importante quanto as macros, so as funes definidas pelo usurio.

    A diferena bsica entre essas duas estruturas, encontra-se nas suas aplicaes como poderemos ver no quadro comparativo abaixo:

    Macros FunesExecutam aes de forma automtica Retornam um valor aps execuoSo gravadas automaticamente So criadas em mdulos do Visual BasicSo delimitadas por Sub e End Sub So delimitadas por Function e End Function

    Podemos resumir o quadro acima da seguinte forma:

    Macros: Executam aes que, de alguma forma, modificam uma planilha.

    Funes: Retornam valores aps sua execuo.

    Atravs da utilizao de funes definidas pelo usurio, possvel transformar grandes equaes matemticas em uma funo.

    Fred Lucena / Erick Franklin Pgina: 8

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    A ttulo de exemplo, criaremos uma funo que ter o objetivo de calcular a comisso de um vendedor qualquer, que receber a taxa de 10% sobre o valor total das vendas.

    A fim de materializarmos a nossa funo, siga a seqncia abaixo:

    No menu Ferramentas, selecione Macro e depois Editor do Visual Basic. Em seguinda clique no menu Inserir do Editor selecione Modulo;

    Digite a seqncia de instrues apresentadas abaixo;

    Function Comisso(ValorVenda) Comisso = ValorVenda * 0.1

    End Function

    Torne a selecionar a guia de planilha ou documento Plan1.

    Agora vamos testar a funo que acabamos de criar.

    Digite uma seqncia de valores conforme o exemplo abaixo:

    VENDEDOR VENDAS COMISSOPEDRO 15000JOS 8000MARIA 13000ANTNIO 10000

    Aps digitado os valores, posicione na clula C2 e digite a linha abaixo:

    =Comisso(B2)

    Copie para as clulas seguintes, utilizando a ala de preenchimento.

    Visualize e confira os resultados obtidos.

    A funo que acabamos de criar bastante simples como podemos constatar.

    Faremos agora, uma pequena alterao para fazer um teste de condio dentro da funo Comisso.

    Suponhamos que a empresa queira premiar aqueles vendedores que conseguirem vendas superiores a R$ 10.000,00 pagando segundo a tabela abaixo:

    VALOR DAS VENDAS COMISSESAT R$ 10.000,00 10%ACIMA DE R$ 10.000,00 20% ( SOBRE O EXCEDENTE )

    Para atender a tabela acima, altere a funo conforme seqncia abaixo:

    Torne a selecionar a guia de planilha ou documento Plan1.

    Altere as linhas da funo conforme modelo abaixo.

    Function Comisso(ValorVenda) If ValorVenda > 10000 Then Comisso = 10000 * 0.1 + (ValorVenda - 10000) * 0.2 Else Comisso = ValorVenda * 0.1 End If

    Fred Lucena / Erick Franklin Pgina: 9

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    End Function

    Aps as alteraes, posicione na clula B2 e digite a linha abaixo.

    =Comisso(B2)

    Copie para as clulas seguintes, utilizando a ala de preenchimento.

    Visualize e confira os resultados obtidos.

    Abaixo, mostramos dois exemplos de macros.

    A primeira, tem a funo de colocar em vermelho, todos os valores negativos existentes em um intervalo previamente demarcado.

    A segunda, tem funo semelhante a primeira, com a caracterstica de no precisar demarcar o intervalo de clulas que contem os valores.

    '' MostraNegativo Macro' Macro gravada em 29/11/95 por Fred Jorge Tavares de Lucena'' Funciona em uma rea demarcadaSub MostraNegativo()

    Do While ActiveCell "" If ActiveCell < 0 Then Selection.Font.ColorIndex = 3 End If ActiveCell.Offset(1, 0).Select LoopEnd Sub

    '' MostraNegativo Macro' Macro gravada em 29/11/95 por Fred Jorge Tavares de Lucena' Funciona em uma rea especfica'Sub MostraNegativo() Range("D1:D4").Select

    Do While ActiveCell "" If ActiveCell < 0 Then Selection.Font.ColorIndex = 3

    Else Selection.Font.ColorIndex = xlAutomatic End If ActiveCell.Offset(1, 0).Select

    LoopEnd Sub

    3. Conhecendo os Procedimentos do VBAAgora que j conhecemos bem as macros e funes definidas pelo usurio, poderemos utilizar os recursos de programao VBA.

    Fred Lucena / Erick Franklin Pgina: 10

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Antes de mais nada, importante que saibamos alguns conceitos utilizados pelo VBA como por exemplo: PROCEDIMENTOS.

    O procedimento um bloco de instrues em VBA que alocado em mdulos e executado de forma seqencial.

    O VBA possui dois tipos principais de procedimentos: Sub e Function.

    A Sub, um bloco de instrues com a funo de executar uma determinada ao sem, no entanto, retornar um valor. Seu bloco de instrues delimitado por Sub e End Sub.

    Sub Nome (argumentos) cdigoEnd Sub

    A Function, de forma semelhante a Sub, um bloco de instrues com a funo de executar uma determinada ao com o retorno de um valor. Seu bloco de instrues delimitado por Function e End Function.

    Function Nome (argumentos) cdigo Nome=valor retornadoEnd Function

    As instruses Sub e End Sub ou Function e End Function, so palavras chave do VBA que marcam o incio e o fim do procedimento.

    O nome, o identificador exclusivo do procedimento.

    Argumentos, so os valores fornecidos aos procedimentos e, no caso de mais de um valor, dever ser separado pelo smbolo configurado como separador de lista.

    Cdigo, corresponde a instrues em VBA que indicaro ao procedimento o que fazer.

    3.1. Consideraes sobre procedimentosRelacionaremos abaixo, alguns pontos importantes sobre procedimentos:

    Para executar um procedimento, devemos proceder de forma semelhante a execuo de uma macro;

    Um procedimento pode chamar vrios outros procedimentos, gerando assim, um encadeamento de blocos de instrues;

    Os procedimentos devem ter sempre seu nome acompanhado por parnteses, ainda que ele no possua argumentos;

    No caso dos procedimentos Function, obrigatrio o uso de uma varivel com o mesmo nome do procedimento para o retorno de valores;

    Os procedimentos podem estar dispostos em vrios mdulos do VBA;

    No permitido a utilizao de mais de um procedimento com o mesmo nome em um mesmo mdulo;

    A ordem em que encontra-se o procedimento no afeta a sua execuo.

    4. Conhecendo os Objetos, Propriedades e Mtodos do VBACom a utilizao do VBA, os procedimentos podem ir muito alm do que apenas executar aes gravadas a partir do Microsoft Office.

    Fred Lucena / Erick Franklin Pgina: 11

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Todo o controle proporcionado pelo VBA feito atravs da definio de objetos que podem ser manipulados nos procedimentos.

    Um objeto algo utilizado para a realizao de tarefas e que pode ser controlado atravs do Visual Basic.

    Da mesma forma que em qualquer outro objeto existente na vida, o objeto do Microsoft Office possui as suas caractersticas. Essas caractersticas so chamadas de propriedades.

    As propriedades so atributos que controlam a aparncia ou o comportamento de um objeto.

    Alm das propriedades, os objetos possuem tambm mtodos.

    Os mtodos so aes que os objetos podem executar.

    Para exemplificar, podera-mos relacionar os conceitos anteriormente descritos com um despertador, onde, o despertador seria o objeto, o mostrar a hora uma propriedade e acertar a hora o mtodo.

    Na relao abaixo, mostramos alguns dos objetos, propriedades e mtodos utilizados no Microsoft Office.

    OBJETOS PROPRIEDADES MTODOSPasta de Trabalho PastaTrabalhoAtiva CopiarPlanilhas PlanilhaAtiva VerificarOrtografiaIntervalos ClulaAtiva Limpar

    4.1. Utilizando os Objetos, Propriedades e Mtodos do VBAConheceremos primeiramente, os objetos mais utilizados na programao VBA:

    4.2. Objeto IntervaloUm objeto intervalo, pode consistir em:

    Uma clula.

    Uma linha ou coluna.

    Uma ou mais selees de clulas.

    A partir da utilizao de um objeto intervalo com o mtodo clula, possvel atribuir um valor a uma determinada clula como mostrado no exemplo abaixo:

    Sub Atribui() Cells(1, 1).Value = 100End Sub

    Fred Lucena / Erick Franklin Pgina: 12

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    No exemplo acima, atribudo o valor 100 a clula A1. A linha Cells(1, 1).Value = 100 mostrada acima, pode ser substituda pela linha Cells(1, A).Value = 100. A utilizao de letras ao invs de nmeros para a identificao das colunas, no muito indicado em virtude de algumas estruturas utilizarem variveis para se referir a coordenadas como no exemplo abaixo:

    Sub Atribui() For = 1 to 5 Cells(1, anos).Value = 1990+anos Next anosEnd Sub

    Alm da atribuio direta de valores, possvel, tambm, atribuir a uma clula o contedo de outra. Veja o exemplo abaixo:

    Sub teste() Cells(1, 5).Value = Cells(1, 1).ValueEnd Sub

    No exemplo acima, o contedo da clula E1 preenchido com o contedo da clula A1.

    4.3. Mtodo IntervaloA utilizao do mtodo intervalo, muito importante quando precisamos trabalhar com intervalos retangulares de clulas como no exemplo abaixo:

    Sub Atribui() Range(Cells(1, 1):Cells(5, 5)).Value = "Office"Fim Sub

    O procedimento acima faz com que o intervalo definido da clula A1 at a clula E5, seja preenchido com a palavra Office.

    4.4. Mtodo selecionarComo o prprio nome indica, este mtodo tem a funo de selecionar um intervalo determinado de clulas. Veja o exemplo abaixo:

    Sub Atribui() Range(Cells(1, 1):Cells(5, 5)).SelectionEnd Sub

    O resultado do procedimento acima ser a seleo do intervalo A1 a E5.

    5. Entendendo melhor os cdigos do VBAOs procedimentos que temos gerado, so montados a partir de cdigos do VBA.

    Para que possamos dominar bem a utilizao de procedimentos, necessrio, antes de mais nada, que conheamos bem a estrutura e termos utilizados na programao VBA.

    A unidade fundamental do cdigo VBA a instruo.

    Fred Lucena / Erick Franklin Pgina: 13

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    A instruo a responsvel pela execuo do procedimento, j que, ela quem diz o que fazer e como fazer.

    Uma instruo pode conter outras instrues e funes como por exemplo:

    Se condio Ento funoSeno funoFim Se

    Dependendo da forma em que for usada, uma instruo pode se transformar em uma funo como no exemplo abaixo:

    Data = #01-12-1995# ( instruo )

    DataHoje = Data ( funo )

    5.1. Formas de apresentao das instrues

    5.1.1. Instruo de atribuiovarivel = expresso

    EX: NomeCompleto = CxEntrada(Nome Completo?)

    5.1.2. Instruo predefinidaInstruo lista_argumentos

    EX: Nome ARQVELHO.DOC Como ARQNOVO.DOC

    5.1.3. Instruo com teste de condioFaa at que condio instruoCiclo

    EX: Faa AtQue CxEntrada("Nome:") ""

    Ciclo

    5.1.4. Instruo de definio de propriedades dos objetosObjeto.Propriedade = expresso

    EX: ClulaAtiva.Fonte.Negrito = Verdadeiro

    5.1.5. Instruo de execuo dos mtodos dos objetosObjeto.Mtodo lista_argumentos

    EX: Aplicativo.VerificarOrtografia Palavra:=noradrenalina

    Em um cdigo VBA, a identificao prvia de variveis no obrigatria.

    Vejamos o exemplo abaixo:

    Function RaizQ(numero)

    Fred Lucena / Erick Franklin Pgina: 14

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    RaizQ = Sqr(numero)End Function

    Perceba que a funo acima funciona muito bem, isto , se o parmetro passado for positivo.

    Para evitar o erro na extrao da raiz quadrada de um valor negativo, poderemos criar uma varivel que transformar o valor em positivo, evitando assim, falhas na execuo.

    Function RaizQ(numero) Valor = ABS(numero) RaizQ = Sqr(Valor)End Function

    Ao criar-mos cdigos em VBA, interessante definir-mos as variveis pois, caso contrrio, em caso de algum erro na especificao de uma varivel o VBA poder entender que em vez de erro voc criou uma nova varivel e assim devolver como resultado o valor 0. Altere a funo acima conforme mostrado logo a seguir.

    Function RaizQ(numero) Valor = ABS(numero) RaizQ = Sqr(Valo)End Function

    Perceba que propositadamente, escrevemos na penltima linha valo em vez de valor, o que no ocasionar uma mensagem de erro mais sim um resultado sempre igual a zero.

    Coloque no incio da pasta de macros, a seguinte instruo: Option Explicit

    5.1.6. Opo ExplicitaEsta funo faz com que o VBA exija a prvia definio das variveis a serem utilizadas.

    Tente executar novamente a funo e perceba que agora o VBA enviar uma mensagem de erro pois a varivel no foi previamente definida.

    Para resolver o problema da questo anterior, digite no incio do procedimento a linha abaixo:

    Dim Valor

    5.1.7. Dim ValorAproveite para consertar o nome da varivel valor que alteramos para valo e execute a funo.

    possvel configurar o Office para exigir que toda varivel seja predefinida, bastando para tanto, executar os passos a seguir:

    Escolha Opes no menu Ferramentas;

    Selecione a guia Editor;

    Selecione a caixa de verificao Solicitar declarao de varivel;

    Clique no boto OK.

    A partir de agora, toda a varivel a ser utilizada, deve ser previamente definida.

    Fred Lucena / Erick Franklin Pgina: 15

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    5.2. Conhecendo as ferramentas de formulriosTorna-se praticamente impossvel, tentar desenvolver um aplicativo no Office, sem o conhecimento prvio de todas as opes existentes na barra de ferramentas Formulrios.

    A partir de agora, comearemos a analisar cada boto da barra de formulrios e aproveitar para exercitar a utilizao de cada um deles.

    Para iniciar-mos, ative a barra de ferramentas seguindo a seqncia abaixo:

    No Microsoft Visual Basic, clique na opo Caixa de Ferramentas no menu Exibir;

    Se voc seguiu a risca as instrues acima, deve ter obtido a barra mostrada abaixo.

    Cada boto, seguindo-se a ordem na barra de ferramentas formulrios, tem a seguinte funo:

    Boto "Rtulo"` Cria um rtulo na sua planilha, grfico ou folha de dilogo.

    Boto "Caixa de edio" Cria uma caixa de edio para digitao de texto na sua folha de dilogo.

    Boto "Caixa de grupo" Cria uma caixa de grupo na sua planilha, grfico ou folha de dilogo.

    Boto "Criar boto" Cria um boto na sua planilha, grfico ou folha de dilogo ao qual voc pode atribuir um procedimento do Visual Basic.

    Boto "Caixa de verificao" Cria uma caixa de verificao na sua planilha, grfico ou folha de dilogo.

    Boto "Boto de opo" Cria um boto de opo na sua planilha, grfico ou folha de dilogo.

    Boto "Caixa de listagem" Cria uma caixa de listagem na sua planilha, grfico ou folha de dilogo.

    Boto "Drop-down" Cria uma caixa de listagem "drop-down" na sua planilha, grfico ou folha de dilogo.

    Boto "Combinao caixa de listagem-edio" Cria uma combinao de caixa de listagem e caixa de edio na sua folha de dilogo.

    Boto "Combinao caixa de edio-drop-down" Cria uma combinao de caixa de listagem "drop-down" e caixa de edio na sua folha de dilogo.

    Boto "Barra de rolagem" Cria uma barra de rolagem na sua planilha, grfico ou folha de dilogo.

    Boto "Controle giratrio" Cria um controle de rotao na sua planilha, grfico ou folha de dilogo.

    Boto "Propriedades de controle" Abre a guia "Controle" da caixa de dilogo Formatar Objeto para que voc possa alterar as propriedades dos controles da sua planilha, grfico ou folha de dilogo.

    Boto "Editar cdigo" Edita ou cria um cdigo para o objeto selecionado.

    Boto "Alternar grade"Exibe ou oculta a grade usada para alinhar objetos em uma planilha ou documento ou folha de dilogo.

    Boto "Executar caixa de dilogo" Executa a caixa de dilogo personalizada que estiver sendo editada na folha de dilogo.

    Para iniciar-mos os exerccios sobre formulrios, teremos que utilizar uma caixa de dilogo, que denominamos de UserForm..

    Fred Lucena / Erick Franklin Pgina: 16

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Para criarmos uma caixa de dilogo, proceda conforme a seqncia abaixo:

    Clique na opo Macro / Editor Visual Basic do menu Ferramentas;

    Clique na opo UserForm do menu Inserir;

    Clique sobre Caixa de Dilogo.

    Se toda a seqncia foi seguida a risca, voc deve ter obtido a tela abaixo:

    A partir da criao de uma caixa de dilogo, possvel criar uma interface mais amigvel com o usurio que ir interagir com o aplicativo.

    Comearemos nosso relacionamento com a caixa de dilogo, alterando o nome que aparece em sua barra de ttulos e o nome da guia da caixa de dilogo, para isso, proceda como descrito abaixo:

    Clique na barra de ttulos da caixa de dilogo;

    Na Janela de Propriedades, clique na propriedade Caption e digite Cadastro de Clientes

    Retorne ao Excel (Alt+Tab) e Clique duplamente sobre a guia da planilha e digite Cadastro.

    Alem da troca do ttulo da caixa de dilogo, possvel, tambm, alterar o seu tamanho, bastando para tanto, seguir a seqncia abaixo:

    Clique na barra de ttulos;

    Posicione em um dos pontos existentes na moldura da caixa;

    Com o apontador do mouse em forma de dupla seta, clique o boto esquerdo e redimensione a caixa de dilogo.

    Alm da alterao do tamanho da caixa de dilogo, possvel, tambm, reposion-la clicando-se na barra de ttulo e arrastando-a para outra posio da tela.

    Apesar de poder reposicionar a caixa de dilogo, este processo no tm nenhuma influncia quando da execuo da mesma.

    Para verificar-mos o fato, posicione a caixa de dilogo na parte superior esquerda do vdeo e logo a seguir, clique no boto Executar caixa de dilogo.

    Perceba que aps a execuo, a caixa de dilogo ser mostrada sempre na mesma posio, independente de onde estava posicionada anteriormente.

    Aproveite, agora, para fazer o teste de reposicionamento com a caixa de dilogo em execuo.

    Fred Lucena / Erick Franklin Pgina: 17

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Voc deve ter notado que a caixa de dilogo obedece sempre a ultima posio em execuo.

    5.2.1. Conhecendo cada boto

    5.2.1.1.Boto RtuloO primeiro boto, Rtulo, tem a funo de fornecer ao usurio, instrues sobre a tela atual.

    A ttulo de exerccio, siga os procedimentos abaixo:

    Clique no boto Rtulo e demarque a parte superior esquerda da caixa de dilogo, conforme mostrado acima;

    Escreva, N do CPF;

    Clique fora da regio de edio e execute a caixa de dilogo.

    Caso o tamanho do rtulo fique pequeno, impossibilitando a visualizao total da palavra N do CPF, clique sobre o mesmo e altere o seu tamanho a partir das suas bordas.

    Como o rtulo um objeto, voc pode a qualquer momento da edio, alterar o seu posicionamento e o seu tamanho.

    Para visualizar-mos as alteraes feitas, clique no boto Executar caixa de dilogo.

    5.2.1.2.Boto Caixa de EdioO boto caixa de edio, tem por funo, receber dados digitados pelo usurio.

    Criaremos agora, uma caixa de edio que recebera os dados referente ao n do CPF.

    Siga as etapas abaixo:

    Clique no boto Caixa de Edio e demarque a regio a direita de N do CPF, conforme exemplo a seguir;

    Clique fora da regio de edio e execute a caixa de dilogo;

    Clique no interior da regio de edio criada, e digite algo.

    Finalize a edio clicando no boto fechar.

    Fred Lucena / Erick Franklin Pgina: 18

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Perceba que a caixa de edio funcionou perfeitamente, porm, os dados no foram salvos em nenhum lugar. Para que as informaes digitadas em uma caixa de edio sejam salvas em uma planilha, necessrio vincular a caixa a uma planilha ou documento atravs de uma macro. Faremos agora, uma rotina que guardar o dado digitado, dentro da clula A1 da planilha ou documento Plan1.

    No Editor do Visual Basic, clique sobre a caixa de edio (textbox);

    No menu Exibir, clique na opo Cdigo;

    Ou use o duplo clique sobre a caixa de edio para editar o Cdigo.

    Se voc executou as rotinas corretamente, deve ter obtido a macro mostrada abaixo.

    Private Sub TextBox1_Change()

    Fim Sub

    Perceba que o nome utilizado na macro, pouco elucidativo, dificultando assim, a identificao dos objetos.

    Para solucionar-mos este problema, alteraremos o nome dado a caixa de edio e, aproveitaremos tambm, para alterar o nome da guia de macros.

    Siga os procedimentos abaixo:

    Demarque e exclua o procedimento gerado;

    No menu Exibir, clique na opo objeto para alternar para Caixa de Dilogo;

    Clique no componente TextBox1;

    Na Janela Propriedades, clique na propriedade Name;

    Modifique o nome para Campo_Cpf e tecle ENTER;

    Selecione a caixa de edio e use um duplo clique para editar o Cdigo.

    Se voc executou todos os passos corretamente, deve ter obtido o seguinte cdigo:Private Sub Campo_Cpf_Change()

    End Sub

    Perceba que agora tornou-se mais fcil identificar o relacionamento da macro com a caixa de edio.

    Aproveite para alterar o procedimento existente para o mostrado a seguir.

    Private Sub Campo_Cpf_Change()

    Fred Lucena / Erick Franklin Pgina: 19

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Worksheets(Dados).Select ActiveCell.Valor = UserForm1.Campo_Cpf.TextEnd Sub

    Toda vez que digitar-mos algo dentro da caixa de edio, a macro acima ser executada.

    A linha Worksheets(Plan1).Select, tem a funo de selecionar a planilha ou documento dados que receber os dados includos.

    A linha seguinte, faz com que a clula ativa receba os dados includos na caixa de edio.

    Voc deve estar se perguntado. Que planilha ou documento Dados essa ?

    A planilha ou documento Dados pode ser qualquer uma.

    Selecionaremos a planilha ou documento Plan1 e renomearemos para Dados para que a macro possa localiza-la.

    Vamos agora, visualizar a nossa rotina em execuo, seguindo a ordem abaixo:

    Selecione a caixa de dilogo Cadastro, e execute-a;

    Posicione sobre a rea destinada a incluso do CPF e clique com o boto esquerdo do mouse;

    Digite o primeiro algarismo do CPF e perceba a reao na tela.

    A medida que digitamos, a macro executada fazendo com que os dados sejam automaticamente lanados na clula ativa. Agora finalize a edio da caixa de dilogo.

    Nossa rotina estaria perfeita se no fosse pela redundncia existente na seleo da planilha ou documento Dados.

    Seria interessante que a planilha ou documento Dados, s fosse selecionada no momento em que executasse-mos a caixa de dilogo e l permanecesse at o final dos lanamentos.

    Com o objetivo de resolver este pequeno problema, lembro que cada parte da tela um objeto distinto, sendo assim, possvel utilizar uma macro em qualquer parte como por exemplo a moldura que a primeira a ser executada.

    Siga os procedimentos abaixo para a gerao da nova macro:

    No Editor do Visual Basic, clique sobre a caixa de dilogo Cadastro;

    No menu Exibir, clique na opo Cdigo (F7).

    Agora recorte a linha de seleo de planilha ou documento na macro da caixa de edio e cole na nova macro.

    Se tudo ocorreu bem, sua macro deve estar conforme mostrado abaixo:

    Private Sub Campo_Cpf_Change() Worksheets(Dados).Select ActiveCell.Valor = UserForm1.Campo_Cpf.TextEnd Sub

    Private Sub UserForm_Click() Worksheets(Dados).SelectEnd Sub

    Troque a ordem das macros apenas para melhorar a visualizao da seqncia. A posio da macro no interferir na sua execuo, desde que, no possua duplicidade de nomes.

    Fred Lucena / Erick Franklin Pgina: 20

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Na Sub UserForm_Click(), Click() o evento a ser realizado, neste caso a planilha no ser selecionada at que o usurio clique na caixa de dilogo, para resolvermos este problema substituiremos o evento Click() por Initialize(). O evento Initialize() utilizado quando queremos inicializar instrues logo quando a caixa de dilogo executada. Ento o cdigo ficar assim:

    Private Sub UserForm_Initialize() Worksheets(Dados).SelectEnd Sub

    Agora selecione e execute a caixa de dilogo.

    Voc deve ter percebido que ao executar-mos a caixa de dilogo, a planilha ou documento Dados automaticamente selecionada antes mesmo de comear-mos a digitar alguma coisa. Clique no boto fechar para finalizar.

    5.2.1.3.Boto Caixa de GrupoTm uma funo basicamente esttica. Utilize a caixa de grupo para envolver botes e caixas de verificao.

    Criaremos agora, uma caixa de grupo para envolver os botes OK e Cancelar, para tanto, siga as instrues abaixo:

    Selecione a Caixa de Dilogo Cadastro;

    Clique no boto Caixa de Grupo e logo a seguir clique no que ser o vrtice superior esquerdo e mantendo o boto pressionado, arraste at a parte desejada.

    Perceba que na parte superior da caixa gerada, aparece um ttulo que pode ser alterado ou excludo. No nosso caso excluiremos o ttulo, bastando para tanto, selecionar a caixa de grupo e na Janela de Propriedades exclua o texto da propriedade Caption.

    Clique numa rea vazia da caixa de dilogo e se voc procedeu corretamente, deve ter obtido a tela mostrada acima.

    5.2.1.4.Boto de ComandoCom esta ferramenta, possvel criar botes que ao serem pressionados, executaro uma determinada operao. Para o nosso projeto sero necessrio alguns botes de comando, inicialmente vamos trabalhar com quatro que tero as funes de posicionamento no Primeiro CPF cadastrado, no CPF Anterior, no Prximo CPF e no ltimo CPF.

    Para criar-mos os botes, proceda conforme descrito abaixo:

    Fred Lucena / Erick Franklin Pgina: 21

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Clique no Boto de Comando;

    Posicione no local onde dever ser colocado o boto, Clique, e arraste demarcando o seu tamanho;

    Digite Primeiro e depois clique em uma rea vazia;

    Repita os procedimentos acima, para os demais botes.

    Aproveite para emoldurar os botes, utilizando a caixa de grupo e tambm para renomea-los como Boto_Primeiro, Boto_Anterior, Boto_Prximo e Boto_ltimo.

    Agora que j sabemos como inserir botes, aproveite para redimensionar sua janela e incluir novos botes como no exemplo abaixo.

    Como nos outros objetos, possvel vincular macros aos botes criados, bem como, atribuir propriedades a eles.

    Execute a caixa de dilogo e tente sair atravs do boto Sair.

    Voc deve perceber que no existe resposta, pois o boto sair no possui propriedade para esta operao. Clique no boto fechar para sair.

    Selecione o boto Sair e logo a seguir clique para editar o cdigo. Perceba que este boto no possui instrues de comando, agora, adicione a seguinte linha de comando:

    Private Sub Sair_Click() Unload UserForm1End Sub

    J vimos anteriormente, que a medida que digitamos os dados, estes eram imediatamente jogados na clula ativa.

    Seria interessante, que a gravao dos dados se desse mediante o pressionamento de uma determinado boto, que no nosso caso, chamaremos de gravar.

    Para fazer com que o boto gravar execute esta operao, siga os procedimentos abaixo:

    Fred Lucena / Erick Franklin Pgina: 22

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Clique sobre o boto Gravar e em seguida a tecla para editar o cdigo;

    Faa as alteraes conforme mostrado a seguir:

    Private Sub UserForm_Initialize( ) Worksheets(Plan1).SelectEnd Sub

    Private Sub TextBox1_Change( ) ActiveCell.Valor = UserForm1.TextBox1.TextEnd Sub

    Private Sub Gravar_Click( ) ActiveCell.Valor = UserForm1.TextBox1.TextEnd Sub

    Perceba que no procedimento acima, tiramos da Sub TextBox1_Change a linha responsvel pela gravao dos dados e colocamos na Sub Gravar_Clique, com isso, os dados s sero enviados para a clula ativa, aps o pressionamento do boto Gravar.

    Selecione e execute a caixa de dilogo.

    Veja que ao digitar o dado, nada acontece at que se pressione o boto Gravar.

    No exemplo acima, a nossa rotina s nos d o direito de digitar apenas uma vez dentro da caixa de edio e voc deve estar pensando.

    E se eu quiser lanar vrios dados...?

    Para resolver este problema, teremos que identificar trs outros problemas que so:

    A limpeza do campo aps a entrada;

    O posicionamento sobre a prxima clula;

    O reposicionamento na caixa de edio.

    Para solucionar-mos este problema, teremos que criar um procedimento capaz de limpar o contedo da caixa de edio toda vez que clicar-mos o boto Gravar e automaticamente reposicionar a barra de insero.

    Para conseguir executar a rotina desejada, siga os procedimentos abaixo:

    Clique sobre o boto Gravar;

    No menu Exibir, clique na opo Cdigo.Na janela de macro apresentada, altere o procedimento existente para o mostrado abaixo.

    Private Sub Gravar_Click( ) ActiveCell.Valor = UserForm1.TextBox1.Text ActiveCell.Offset(1, 0).Select UserForm1.TextBox1.Text = UserForm1.TextBox1.SetFocusEnd Sub

    Execute a caixa de dilogo, digite os dados e pressione o boto Gravar.

    O nosso exemplo est funcionando muito bem, porm, s possvel incluir.

    Para que possamos, por exemplo, alterar algum dado, teremos que fazer com que a clula ativa varie de acordo com os botes de navegao que criamos.

    Fred Lucena / Erick Franklin Pgina: 23

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Antes de criar-mos os procedimentos, torna-se necessrio criar-mos variveis que controlaro o registro atual e o nmero de registros.

    Proceda como indicado abaixo:

    Selecione a planilha ou documento controle;

    Digite no incio da planilha ou documento as linhas abaixo.

    Dim OperaoDim RegistroAtualDim NumeroRegistros

    As linhas acima tm respectivamente as seguintes funes:

    Controlar a operao em andamento.

    Controlar o registro atual.

    Controlar o nmero de registros existentes.

    O prximo passo ser alimentar as variveis criadas, para isso, altere os procedimentos conforme mostrado a seguir:

    Private Sub UserForm_Initialize( ) Worksheets(Dados).Select Operao = 0 RegistroAtual = 1 For NmeroRegistros = 1 to 65536 If Cells(NmeroRegistros, 1) = Then If NmeroRegistros > 1 Then NmeroRegistros = NmeroRegistros 1 End If Exit Sub End If NextEnd Sub

    As linhas acima tm respectivamente as seguintes funes:

    Selecionar a planilha ou documento Dados.

    Atribuir o valor zero a varivel Operao.

    Atribuir o valor um a varivel RegistroAtual.

    Contar de 1 at 65536 a fim de localizar o primeiro registro em branco.

    Verificar se a clula atual est vazia.

    Verificar se o valor da varivel NmeroRegistros maior que um.

    Decrementar o valor da varivel NmeroRegistros em um.

    Fechar a instruo Se

    Terminar o processamento da Sub

    Fechar a instruo Se

    Retornar ao incio da instruo Para

    Fred Lucena / Erick Franklin Pgina: 24

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Fechar Sub

    Agora lanaremos as instrues para os botes de navegao.

    Para o boto Primeiro, proceda conforme abaixo:

    Clique sobre o boto Primeiro;

    No menu Exibir, clique na opo Cdigo (F7).

    Altere a Sub gerada para:

    Private Sub Primeiro_Click() Operacao = 0 RegistroAtual = 1 Cells(RegistroAtual, 1).SelectEnd Sub

    Para o boto Anterior, proceda conforme abaixo:

    Selecione a planilha ou documento Cadastro;

    Clique sobre o boto Anterior;

    Clique sobre o boto Editar Cdigo;

    Aps as etapas acima, altere a Sub gerada para:

    Private Sub Anterior_Click() Operacao = 0 If RegistroAtual > 1 Then RegistroAtual = RegistroAtual - 1 End If Cells(RegistroAtual, 1).SelectEnd Sub

    Para o boto Prximo, proceda conforme abaixo:

    Selecione a planilha ou documento Cadastro;

    Clique sobre o boto Prximo;

    Clique sobre o boto Editar Cdigo;Aps as etapas anteriores, altere a Sub gerada para:

    Private Sub Proximo_Click() Operacao = 0 If RegistroAtual < NumeroRegistros Then RegistroAtual = RegistroAtual + 1 End If Cells(RegistroAtual, 1).SelectEnd Sub

    Para o boto ltimo, proceda conforme abaixo:

    Selecione a planilha ou documento Cadastro;

    Fred Lucena / Erick Franklin Pgina: 25

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Clique sobre o boto Ultimo;

    Clique sobre o boto Editar Cdigo;Aps as etapas acima, altere a Sub gerada para:

    Private Sub Ultimo_Click() Operacao = 0 RegistroAtual = NumeroRegistros Cells(RegistroAtual, 1).SelectEnd Sub

    As rotinas criadas para os botes de navegao, no tero nenhuma funo se a medida que posicionar-mos em cada registro no atribuir-mos os dados as caixas de edio.

    Para solucionar-mos este problema, criaremos uma rotina de atribuio, para tanto, selecione a planilha ou documento controle e digite, aps a ltima Sub, as seguintes instrues:

    Sub Atribuir() UserForm1.TextBox1.Text = Cells(RegistroAtual, 1).Value Cells(RegistroAtual, 1).SelectEnd Sub

    Agora, preciso colocar na ltima linha das instrues de navegao, a que acionara o procedimento de atribuio aproveite tambm para eliminar as linhas de posicionamento j que as variveis fazem este trabalho.

    Proceda a alterao conforme mostrado abaixo:

    Private Sub Primeiro_Click() Operacao = 0 RegistroAtual = 1 Cells(RegistroAtual, 1).Select AtribuirEnd Sub

    Private Sub Anterior_Click() Operacao = 0 If RegistroAtual > 1 Then RegistroAtual = RegistroAtual - 1 End If Cells(RegistroAtual, 1).Select AtribuirEnd Sub

    Private Sub Proximo_Click() Operacao = 0 If RegistroAtual < NumeroRegistros Then RegistroAtual = RegistroAtual + 1 End If Cells(RegistroAtual, 1).Select AtribuirEnd Sub

    Private Sub Ultimo_Click() Operacao = 0

    Fred Lucena / Erick Franklin Pgina: 26

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    RegistroAtual = NumeroRegistros Cells(RegistroAtual, 1).Select AtribuirEnd Sub

    Vamos agora, selecionar e executar a caixa de dilogos.

    De imediato, voc deve ter percebido que o dado existente no mostrado, ms, se utilizar-mos os botes de navegao o dado aparece.

    Tal fato acontece em virtude de que ao executar-mos a caixa de dilogo, nenhum comando de atribuio dado, s acontecendo depois de pressionados os botes de navegao.

    Para resolver-mos mais este problema, selecione a planilha ou documento controle, posicione na macro da moldura e altere conforme mostrado a seguir:

    Private Sub UserForm_Initialize( ) Worksheets(Dados).Select Operao = 0 RegistroAtual = 1 For NmeroRegistros = 1 to 65536 If Cells(NmeroRegistros, 1) = Then If NmeroRegistros > 1 Then NmeroRegistros = NmeroRegistros 1 End If Atribuir Exit Sub End If NextEnd Sub

    Execute a caixa de dilogos e utilize os botes de navegao.

    Parece tudo ok at ai no ?

    Tente alterar um dado e depois gravar.

    Voc percebeu que a alterao foi feita, porm, em virtude da rotina de gravao ter sido montada apenas para incluso, a medida que clicamos no boto Gravar, a rotina de gravao jogar na clula atual.

    Com as implementaes feitas no controle da clula atual e da gravao a partir do pressionamento do boto gravar, o deslocamento automtico torna-se dispensvel.

    Vamos agora fazer uma pequena alterao na rotina de gravao para resolver este pequeno problema.

    Selecione o boto Gravar e altere o cdigo conforme abaixo:

    Private Sub Gravar_Click() Cells(RegistroAtual, 1).Value = UserForm1.TextBox1.Text If Operacao = 1 Then

    UserForm1.TextBox1.Text = End If UserForm1.TextBox1.SetFocusEnd Sub

    Selecione e execute a caixa de dilogo.

    Agora voc deve ter notado, que a clula permaneceu no mesmo lugar mesmo aps o pressionamento do boto Gravar.

    Fred Lucena / Erick Franklin Pgina: 27

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Com a alterao acima, ns s podemos alterar dados e no incluir. Para que o processo de incluso seja possvel, criaremos um procedimento para o boto Novo. Siga os procedimentos abaixo:

    Clique sobre o boto Novo na caixa de dilogo;

    Clique sobre o boto Propriedades de Controle, desligue todos os atributos;

    No menu Exibir, clique na opo Cdigo (F7);

    Inclua as linhas abaixo.

    Private Sub Novo_Click() Operacao = 1 UserForm1.TextBox1.Text = "" UserForm1.TextBox1.SetFocusEnd Sub

    Com a criao do boto Novo, a linha de limpeza de caixa de edio do procedimento Gravar, deixa de ter utilidade, portanto, exclua as linhas. Aproveite, Tambm, para incrementar as variveis de controle conforme mostrado abaixo:

    Private Sub Gravar_Click() If Operacao = 1 Then NumeroRegistros = NumeroRegistros + 1 RegistroAtual = NumeroRegistros End If Cells(RegistroAtual, 1).Value = UserForm1.TextBox1.Text UserForm1.TextBox1.SetFocusEnd Sub

    Selecione e execute a caixa de dilogo e aproveite para fazer o seguinte teste:

    Clique no boto Novo e logo a seguir no boto Gravar.

    Voc deve ter percebido que o procedimento gravar aceitou a operao, o que no deveria fazer, portanto, altere novamente o procedimento gravar conforme mostrado abaixo:

    Private Sub Gravar_Click() If UserForm1.TextBox1.Text "" Then If Operacao = 1 Then NumeroRegistros = NumeroRegistros + 1 RegistroAtual = NumeroRegistros End If Cells(RegistroAtual, 1).Value = UserForm1.TextBox1.Text UserForm1.TextBox1.SetFocus Else

    MsgBox "No existe dados a gravar!", vbExclamation, "Mensagem"

    End IfEnd Sub

    Selecione e execute a caixa de dilogos.

    Agora nosso programa est bem melhor, porem, possvel que ns estejamos alterando um determinado dado e de repente verificamos que houve uma dvida sobre o registro a ser alterado.

    Para que o problema acima seja resolvido, ser necessrio a implementao de um procedimento para o boto cancelar, para isso, siga a seqncia abaixo:

    Fred Lucena / Erick Franklin Pgina: 28

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Clique sobre o boto Cancelar na caixa de dilogo;

    No menu Exibir, clique na opo Cdigo (F7);

    Inclua as linhas abaixo.

    Private Sub Cancelar_Click() Operacao = 0 AtribuirEnd Sub

    Selecione e execute a caixa de dilogo.

    Com as alteraes feitas, o nosso programa comea a tomar uma forma profissional, onde, cada detalhe est sendo abordado e resolvido.

    Agora podemos continuar com a verificao dos botes e etapas seguintes.

    J podemos navegar entre os registros, incluir dados, alterar dados, cancelar operaes e sair do sistema. O nosso prximo passo ser criar um procedimento capaz de excluir um registro que no seja mais necessrio. Para criarmos o procedimento de excluso de registros, siga as etapas abaixo:

    Clique sobre o boto Excluir na caixa de dilogo;

    No menu Exibir, clique na opo Cdigo (F7);

    Inclua as linhas a seguir.

    Private Sub Excluir_Click() If MsgBox("Confirma Excluso?", vbYesNo + vbQuestion + vbDefaultButton2, "Mensagem") = vbYes Then Rows(RegistroAtual).Select Selection.Delete If NumeroRegistros > 1 Then NumeroRegistros = NumeroRegistros - 1 End If If RegistroAtual > NumeroRegistros Then RegistroAtual = RegistroAtual - 1 End If Atribuir End IfEnd Sub

    Selecione e execute a caixa de dilogo.

    Exclua todos os dados para ver se o procedimento est funcionando corretamente e verifique que mesmo aps a excluso de todos os dados, o procedimento continua pedindo confirmao para excluso.

    Para resolver-mos o problema acima, teremos que implementar no procedimento de excluso um teste semelhante aquele feito na rotina de gravao.

    Altere o procedimento de excluso seguindo as etapas abaixo mostradas:

    Clique sobre o boto Excluir na caixa de dilogo;

    No menu Exibir, clique na opo Cdigo (F7);

    Altere o procedimento conforme exemplo a seguir.

    Fred Lucena / Erick Franklin Pgina: 29

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Private Sub Excluir_Click() If UserForm1.TextBox1.Text "" Then If MsgBox("Confirma Excluso?", vbYesNo + vbQuestion + vbDefaultButton2, "Mensagem") = vbYes Then Rows(RegistroAtual).Select Selection.Delete If NumeroRegistros > 1 Then NumeroRegistros = NumeroRegistros - 1 End If If RegistroAtual > NumeroRegistros Then RegistroAtual = RegistroAtual - 1 End If Atribuir End If Else MsgBox "No existe dados a excluir!", vbExclamation,

    "Mensagem" End IfEnd Sub

    Selecione e execute a caixa de dilogo.

    A excluso de registros em arquivos pequenos, bastante prtica pois no temos que nos deslocar muito. Agora imagine um arquivo com mais de mil registros para procurar aquele que se deseja excluir.

    A soluo do problema acima, est na criao de um procedimento de consulta que ser vinculado ao boto de mesmo nome.

    Para criar um procedimento de consulta, basta seguir a seqncia abaixo:

    Clique sobre o boto Consultar na caixa de dilogo;

    No menu Exibir, clique na opo Cdigo (F7);

    Altere o procedimento conforme exemplo a seguir.

    Private Sub Consultar_Click() dado = InputBox("Informe nmero do CPF", "Consulta CPF") For n = 1 To NumeroRegistros If Cells(n, 1) = Val(dado) Then RegistroAtual = n Atribuir Exit Sub End If Next MsgBox "Dado inexistente!", vbExclamation, "Mensagem"End Sub

    Selecione e execute a caixa de dilogo. Parece que o nosso sistema esta caminhando para a sua finalizao, porm, gostaria de propor uma pequena implementao, no nos procedimentos, ms nos atributos dos botes.

    Selecione a caixa de dilogo e o boto Novo, logo a seguir, clique na Janela de Propriedades. Perceba que na parte superior da janela, existe uma opo chamada de Accelerator (Tecla de Acelerao), esta tecla tambm chamada de tecla de atalho e tem a funo de executar atravs do teclado, as operaes que so feitas a partir do mouse. Criaremos para todos os botes existentes, uma tecla de atalho, tomado o

    Fred Lucena / Erick Franklin Pgina: 30

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    cuidado, para no repetir a mesma tecla pois isso acarretaria o acionamento de um boto que no o desejado.

    Posicione na rea destinada a tecla de acelerao e digite N para o acionamento do boto Novo.

    Repita os passos acima para todos os botes.

    O boto ser acionado pelo pressionamento da tecla ALT acompanhada da tecla de acelerao.Selecione e execute a caixa de dilogo. Perceba que aps a configurao feita, todos os botes apresentam uma letra sublinhada que exatamente a tecla de acelerao. Aproveite para tentar acionar todos os botes, um de cada vez claro, no esquecendo de manter a tecla ALT pressionada, antes da tecla de acelerao. Agora que voc j sabe trabalhar bem com as caixas de edio, aproveite para incluir mais algumas, conforme modelo abaixo:

    Aps criadas as caixas de edio, selecione e execute a caixa de dilogo.

    O primeiro problema que podemos constatar, a ordem dos campos, pois, ao pressionar-mos a tecla Tab, o posicionamento fica em objeto diferente do prximo, que no nosso caso o campo Nome.

    No VBA possvel reposicionar a ordem de edio de cada objeto, bastando para isso, seguir a seqncia abaixo:

    Estando posicionado na caixa de dilogo Cadastro de Clientes, selecione a caixa de edio Nome em seguir, na Janela de Propriedades clique na propriedade TabIndex e digite 0. A ordem de tabulao iniciada por zero, um, dois, e assim sucessivamente, repita esta operao para os demais objetos da caixa de dilogo.

    Selecione e execute a caixa de dilogo.

    Utilize a tecla Tab para verificar se a ordem dos objetos est correta, caso contrrio, volte a reordenar os itens.

    Outro problema que teremos que resolver, a gravao dos novos itens, para isso, teremos que alterar alguns procedimentos conforme mostrado abaixo:

    Private Sub Gravar_Click() If UserForm1.TextBox1.Text "" Then If Operacao = 1 Then NumeroRegistros = NumeroRegistros + 1 RegistroAtual = NumeroRegistros End If

    Fred Lucena / Erick Franklin Pgina: 31

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Cells(RegistroAtual, 1).Value = UserForm1.TextBox1.Text Cells(RegistroAtual, 2).Value = UserForm1.TextBox2.Text Cells(RegistroAtual, 3).Value = UserForm1.TextBox3.Text UserForm1.TextBox1.SetFocus Else MsgBox "No existe dados a gravar!", vbExclamation,

    "Mensagem" End IfEnd Sub

    Private Sub Novo_Click() If NumeroRegistros < 65536 Then Operacao = 1 UserForm1.TextBox1.Text = "" UserForm1.TextBox2.Text = "" UserForm1.TextBox3.Text = "" UserForm1.TextBox1.SetFocus Else MsgBox "Nmero Mximo de Registros Excedido!", vbExclamation,

    "Mensagem" End IfEnd Sub

    Sub Atribuir() UserForm1.TextBox1.Text = Cells(RegistroAtual, 1).Value UserForm1.TextBox2.Text = Cells(RegistroAtual, 2).Value UserForm1.TextBox3.Text = Cells(RegistroAtual, 3).ValueEnd Sub

    Selecione e execute a caixa de dilogo. Agora que nosso programa est funcionando perfeitamente, podemos incrementar alguns outros objetos.

    5.2.1.5.Caixa de VerificaoEste boto tem por objetivo, Criar uma caixa que indicar atravs de um smbolo de seleo, se uma opo foi ou no especificada. Para testar-mos a utilizao do boto Caixa de Verificao, criaremos cinco caixas de verificao que tero a funo de indicar as preferencias de passa tempo da pessoa cadastrada.

    Para criar uma Caixa de Verificao, siga a seqncia abaixo:

    Selecione a caixa de dilogo (UserForm);

    Na Caixa de Ferramentas, clique no boto Caixa de Verificao e demarque a regio onde ele dever aparecer;

    Digite a palavra Cinema na propriedade Caption do objeto;

    Clique numa rea vazia da caixa.Aproveite e digite mais trs caixas de seleo e contorne-as com a utilizao do boto caixa de grupo conforme mostrado abaixo:

    Fred Lucena / Erick Franklin Pgina: 32

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    A caixa de verificao tem uma propriedade bastante interessante. Ela pode ser vinculada a uma clula de uma planilha ou documento do Excel.

    Para vincular uma caixa de verificao a uma determinada clula, proceda conforme mostrado abaixo:

    Clique na primeira caixa de verificao e logo a seguir, na Caixa Propriedades;

    Posicione na rea intitulada ControlSource e digite a referncia da clula, para nosso exemplo utilizaremos F1;Selecione e execute a caixa de dilogo.

    Perceba que ao clicar na primeira caixa de verificao, a clula F1 recebe a palavra VERDADEIRO, indicando que a caixa foi ativada.

    No nosso sistema, porem, no trabalharemos com o vnculo, mais sim, com as macros existentes.

    Antes da alterao das macros, proceda conforme abaixo:

    Selecione a caixa de cdigo (F7) e altere as subrotinas conforme abaixo.

    Private Sub Gravar_Click() If UserForm1.TextBox1.Text "" Then If Operacao = 1 Then NumeroRegistros = NumeroRegistros + 1 RegistroAtual = NumeroRegistros End If Cells(RegistroAtual, 1).Value = UserForm1.TextBox1.Text Cells(RegistroAtual, 2).Value = UserForm1.TextBox2.Text Cells(RegistroAtual, 3).Value = UserForm1.TextBox3.Text Cells(RegistroAtual,4).Value=Abs(UserForm1.CheckBox1.Value) Cells(RegistroAtual,5).Value=Abs(UserForm1.CheckBox2.Value) Cells(RegistroAtual,6).Value=Abs(UserForm1.CheckBox3.Value) Cells(RegistroAtual,7).Value=Abs(UserForm1.CheckBox4.Value) Cells(RegistroAtual,8).Value=Abs(UserForm1.CheckBox5.Value) UserForm1.TextBox1.SetFocus Else MsgBox "No existe dados a gravar!", vbExclamation, "Mensagem" End IfEnd Sub

    Fred Lucena / Erick Franklin Pgina: 33

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Private Sub Novo_Click() If NumeroRegistros < 65536 Then Operacao = 1 With UserForm1 .TextBox1.Text = "" .TextBox2.Text = "" .TextBox3.Text = "" .CheckBox1.Value = 0 .CheckBox2.Value = 0 .CheckBox3.Value = 0 .CheckBox4.Value = 0 .CheckBox5.Value = 0 .TextBox1.SetFocus End With Else MsgBox "Nmero Mximo de Registros Excedido!", vbExclamation,

    "Mensagem" End IfEnd Sub

    Sub Atribuir() With UserForm1 .TextBox1.Text = Cells(RegistroAtual, 1).Value .TextBox2.Text = Cells(RegistroAtual, 2).Value .TextBox3.Text = Cells(RegistroAtual, 3).Value .CheckBox1.Value = Cells(RegistroAtual, 4).Value .CheckBox2.Value = Cells(RegistroAtual, 5).Value .CheckBox3.Value = Cells(RegistroAtual, 6).Value .CheckBox4.Value = Cells(RegistroAtual, 7).Value .CheckBox5.Value = Cells(RegistroAtual, 8).Value End WithEnd Sub

    Selecione e execute a caixa de dilogo.

    Agora toda vez que selecionar-mos uma caixa de verificao e gravar-mos a alterao, verificaremos que quando ligada a caixa de verificao, o valor 1 ser introduzido na clula, se desligada, o valor 0 ser gravado.

    5.2.1.6.Boto de OpoPara exemplificar a utilizao do Boto de Opo, criaremos dois deles que indicar o sexo da pessoa cadastrada, envolvida por uma caixa de grupo.

    Para criar os botes, siga a seqncia abaixo:

    Clique no boto de opo e demarque a regio onde dever ser apresentado;

    Digite a palavra Masculino e logo a seguir, clique em uma rea vazia;

    Repita os passos acima, s que em vez de Masculino, digite Feminino;

    Clique sobre o boto Caixa de Grupo, e contorne as duas opes inseridas;

    Digite a palavra Sexo e clique em uma rea vazia da caixa de dilogo;

    Execute a caixa de dilogo e clique sobre as opes.Cuidado para no colocar os botes de opes muito prximo um do outro, pois ao selecionar uma opo a outra tambm ser selecionada.

    Fred Lucena / Erick Franklin Pgina: 34

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Aproveite para inserir uma coluna na quarta posio da planilha ou documento Dados que receber o sexo selecionado.

    Voc dever ter obtido uma tela semelhante a mostrada abaixo:

    Agora altere os procedimentos conforme modelo a seguir :

    Private Sub Gravar_Click() If UserForm1.TextBox1.Text "" Then If Operacao = 1 Then NumeroRegistros = NumeroRegistros + 1 RegistroAtual = NumeroRegistros End If Cells(RegistroAtual, 1).Value = UserForm1.TextBox1.Text Cells(RegistroAtual, 2).Value = UserForm1.TextBox2.Text Cells(RegistroAtual, 3).Value = UserForm1.TextBox3.Text Cells(RegistroAtual,4).Value=Abs(UserForm1.CheckBox1.Value) Cells(RegistroAtual,5).Value=Abs(UserForm1.CheckBox2.Value) Cells(RegistroAtual,6).Value=Abs(UserForm1.CheckBox3.Value) Cells(RegistroAtual,7).Value=Abs(UserForm1.CheckBox4.Value) Cells(RegistroAtual,8).Value=Abs(UserForm1.CheckBox5.Value) If UserForm1.OptionButton1.Value = True Then Cells(RegistroAtual, 9) = "M" Else Cells(RegistroAtual, 9) = "F" End If UserForm1.TextBox1.SetFocus Else MsgBox "No existe dados a gravar!", vbExclamation, "Mensagem" End IfEnd Sub

    Private Sub Novo_Click() If NumeroRegistros < 65536 Then Operacao = 1 With UserForm1

    Fred Lucena / Erick Franklin Pgina: 35

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    .TextBox1.Text = "" .TextBox2.Text = "" .TextBox3.Text = "" .CheckBox1.Value = 0 .CheckBox2.Value = 0 .CheckBox3.Value = 0 .CheckBox4.Value = 0 .CheckBox5.Value = 0 .OptionButton1.Value = 1 .TextBox1.SetFocus End With Else MsgBox "Nmero Mximo de Registros Excedido!", vbExclamation,

    "Mensagem" End IfEnd Sub

    Sub Atribuir() With UserForm1 .TextBox1.Text = Cells(RegistroAtual, 1).Value .TextBox2.Text = Cells(RegistroAtual, 2).Value .TextBox3.Text = Cells(RegistroAtual, 3).Value .CheckBox1.Value = Cells(RegistroAtual, 4).Value .CheckBox2.Value = Cells(RegistroAtual, 5).Value .CheckBox3.Value = Cells(RegistroAtual, 6).Value .CheckBox4.Value = Cells(RegistroAtual, 7).Value .CheckBox5.Value = Cells(RegistroAtual, 8).Value End With If Cells(RegistroAtual, 9) = "M" Then UserForm1.OptionButton1.Value = 1 Else UserForm1.OptionButton2.Value = 1 End IfEnd Sub

    Selecione e execute a caixa de dilogo.

    5.2.1.7.Boto Drop Down uma lista de opes que no podem ser editadas, apenas selecionadas atravs de uma seta posicionada do lado direito.

    No nosso aplicativo, utilizaremos o objeto drop down para a seleo do estado a que pertence a pessoa cadastrada.

    Precisaremos de uma outra planilha ou documento onde colocaremos a relao de estados utilizados pelo objeto drop down.

    Para darmos incio a nossa implementao, siga as etapas abaixo:

    Selecione a opo Inserir da barra de menu;

    Clique na opo Planilha;

    Clique duplamente na guia da nova planilha ou documento e digite Tabelas;

    Posicione na clula A1 e digite ao longo desta coluna a sigla dos Estados;

    Demarque o intervalo com os estados e clique na opo Inserir na barra de menu;

    Clique na opo Nome e logo a seguir em Definir;

    Digite na janela aberta a palavra Estados e logo a seguir OK.

    Fred Lucena / Erick Franklin Pgina: 36

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Aproveite para incluir o rotulo Estado a esquerda do objeto Drop Down. Com a etapa acima acabamos de criar a lista de informaes que far parte do objeto Drop Down.

    Agora basta clicar no boto Drop Down e demarcar a regio onde dever ser apresentada a lista de Estados. Veja modelo abaixo:

    Agora teremos que vincular ao objeto Drop Down a lista de estados criada na planilha ou documento estados. Para fazer a vinculao, proceda conforme a seguir:

    Clique sobre o objeto Drop Down;

    Na Janela Propriedades, selecione a propriedade RowSource;

    Digite Estados;

    Com as etapas acima, conclumos a configurao da ferramenta Drop Down.

    Selecione e execute a caixa de dilogo. A lista Drop Down funcionou bem, porem, ser preciso implementar os procedimentos Novo, Gravar e Atribuir.

    Comece inserindo uma coluna na posio quatro da planilha ou documento Dados onde guardaremos a referencia ao estado selecionado e efetue a alterao dos procedimentos conforme mostrado abaixo:

    Private Sub Gravar_Click() If UserForm1.TextBox1.Text "" Then If Operacao = 1 Then NumeroRegistros = NumeroRegistros + 1 RegistroAtual = NumeroRegistros End If Cells(RegistroAtual, 1).Value = UserForm1.TextBox1.Text Cells(RegistroAtual, 2).Value = UserForm1.TextBox2.Text Cells(RegistroAtual, 3).Value = UserForm1.TextBox3.Text Cells(RegistroAtual,4).Value=Abs(UserForm1.CheckBox1.Value) Cells(RegistroAtual,5).Value=Abs(UserForm1.CheckBox2.Value) Cells(RegistroAtual,6).Value=Abs(UserForm1.CheckBox3.Value) Cells(RegistroAtual,7).Value=Abs(UserForm1.CheckBox4.Value) Cells(RegistroAtual,8).Value=Abs(UserForm1.CheckBox5.Value) Cells(RegistroAtual,10).Value = UserForm1.ComboBox1.Text If UserForm1.OptionButton1.Value = True Then Cells(RegistroAtual, 9) = "M"

    Fred Lucena / Erick Franklin Pgina: 37

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Else Cells(RegistroAtual, 9) = "F" End If UserForm1.TextBox1.SetFocus Else MsgBox "No existe dados a gravar!", vbExclamation, "Mensagem" End IfEnd Sub

    Private Sub Novo_Click() If NumeroRegistros < 65536 Then Operacao = 1 With UserForm1 .TextBox1.Text = "" .TextBox2.Text = "" .TextBox3.Text = "" .CheckBox1.Value = 0 .CheckBox2.Value = 0 .CheckBox3.Value = 0 .CheckBox4.Value = 0 .CheckBox5.Value = 0 .OptionButton1.Value = 1 .ComboBox1.Text = "PE" .TextBox1.SetFocus End With Else MsgBox "Nmero Mximo de Registros Excedido!", vbExclamation,

    "Mensagem" End IfEnd Sub

    Sub Atribuir() With UserForm1 .TextBox1.Text = Cells(RegistroAtual, 1).Value .TextBox2.Text = Cells(RegistroAtual, 2).Value .TextBox3.Text = Cells(RegistroAtual, 3).Value .CheckBox1.Value = Cells(RegistroAtual, 4).Value .CheckBox2.Value = Cells(RegistroAtual, 5).Value .CheckBox3.Value = Cells(RegistroAtual, 6).Value .CheckBox4.Value = Cells(RegistroAtual, 7).Value .CheckBox5.Value = Cells(RegistroAtual, 8).Value .ComboBox1.Text = Cells(RegistroAtual, 10).Value End With If Cells(RegistroAtual, 9) = "M" Then UserForm1.OptionButton1.Value = 1 Else UserForm1.OptionButton2.Value = 1 End IfEnd Sub

    Selecione e execute a caixa de dilogo.

    5.2.1.8.Boto de RotaoCom este objeto possvel incrementar ou decrementar valores em uma determinada clula.

    A primeira coisa a fazer vincular o controle a uma clula, para tanto, siga a seqncia abaixo:

    Fred Lucena / Erick Franklin Pgina: 38

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    No Excel, clique na guia da planilha Tabelas;

    No Editor do VBA, clique sobre o objeto Boto de Rotao e insira-o conforme a figura abaixo;

    Clique na Janela Propriedades;

    Clique na rea ao lado da propriedade ControlSource;

    Digite B1 e em seguida clique numa rea vazia.

    Com a seqncia acima, geramos um vnculo do controle com a clula B1, agora, nos resta gerar a macro que ficar responsvel pelo controle giratrio e alterar os outros procedimentos que sofrero influencia do controle.

    Com o controle giratrio selecionado, clique no boto Editar Cdigo e proceda as alteraes conforme mostrado abaixo:

    Private Sub SpinButton1_Change() UserForm1.TextBox4.Text = UserForm1.SpinButton1.ValueEnd Sub

    Private Sub Gravar_Click() If UserForm1.TextBox1.Text "" Then If Operacao = 1 Then NumeroRegistros = NumeroRegistros + 1 RegistroAtual = NumeroRegistros End If Cells(RegistroAtual, 1).Value = UserForm1.TextBox1.Text Cells(RegistroAtual, 2).Value = UserForm1.TextBox2.Text Cells(RegistroAtual, 3).Value = UserForm1.TextBox3.Text Cells(RegistroAtual,4).Value=Abs(UserForm1.CheckBox1.Value) Cells(RegistroAtual,5).Value=Abs(UserForm1.CheckBox2.Value) Cells(RegistroAtual,6).Value=Abs(UserForm1.CheckBox3.Value) Cells(RegistroAtual,7).Value=Abs(UserForm1.CheckBox4.Value) Cells(RegistroAtual,8).Value=Abs(UserForm1.CheckBox5.Value) Cells(RegistroAtual, 10).Value = UserForm1.ComboBox1.Text Cells(RegistroAtual, 11).Value = UserForm1.TextBox4.Text If UserForm1.OptionButton1.Value = True Then Cells(RegistroAtual, 9) = "M" Else Cells(RegistroAtual, 9) = "F" End If UserForm1.TextBox1.SetFocus Else MsgBox "No existe dados a gravar!", vbExclamation, "Mensagem" End IfEnd Sub

    Private Sub Novo_Click() If NumeroRegistros < 65536 Then Operacao = 1 With UserForm1 .TextBox1.Text = "" .TextBox2.Text = "" .TextBox3.Text = "" .CheckBox1.Value = 0 .CheckBox2.Value = 0 .CheckBox3.Value = 0 .CheckBox4.Value = 0 .CheckBox5.Value = 0

    Fred Lucena / Erick Franklin Pgina: 39

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    .OptionButton1.Value = 1 .ComboBox1.Text = "PE" .SpinButton1.Value = 0 .TextBox1.SetFocus End With Else MsgBox "Nmero Mximo de Registros Excedido!", vbExclamation,

    "Mensagem" End IfEnd Sub

    Sub Atribuir() With UserForm1 .TextBox1.Text = Cells(RegistroAtual, 1).Value .TextBox2.Text = Cells(RegistroAtual, 2).Value .TextBox3.Text = Cells(RegistroAtual, 3).Value .CheckBox1.Value = Cells(RegistroAtual, 4).Value .CheckBox2.Value = Cells(RegistroAtual, 5).Value .CheckBox3.Value = Cells(RegistroAtual, 6).Value .CheckBox4.Value = Cells(RegistroAtual, 7).Value .CheckBox5.Value = Cells(RegistroAtual, 8).Value .ComboBox1.Text = Cells(RegistroAtual, 10).Value .SpinButton1.Value = Cells(RegistroAtual, 11).Value End With If Cells(RegistroAtual, 9) = "M" Then UserForm1.OptionButton1.Value = 1 Else UserForm1.OptionButton2.Value = 1 End IfEnd Sub

    Selecione e execute a caixa de dilogo.

    Como o nosso sistema um cadastro de clientes, nada mais lgico que incluir uma caixa de edio para telefones, assim sendo, inclua uma caixa de edio e um rtulo conforme modelo abaixo:

    Agora faremos as implementaes necessrias nos procedimentos conforme modelo abaixo:

    Fred Lucena / Erick Franklin Pgina: 40

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Private Sub Gravar_Click() If UserForm1.TextBox1.Text "" Then If Operacao = 1 Then NumeroRegistros = NumeroRegistros + 1 RegistroAtual = NumeroRegistros End If Cells(RegistroAtual, 1).Value = UserForm1.TextBox1.Text Cells(RegistroAtual, 2).Value = UserForm1.TextBox2.Text Cells(RegistroAtual, 3).Value = UserForm1.TextBox3.Text Cells(RegistroAtual,4).Value=Abs(UserForm1.CheckBox1.Value) Cells(RegistroAtual,5).Value=Abs(UserForm1.CheckBox2.Value) Cells(RegistroAtual,6).Value=Abs(UserForm1.CheckBox3.Value)

    Cells(RegistroAtual,7).Value=Abs(UserForm1.CheckBox4.Value) Cells(RegistroAtual,8).Value=Abs(UserForm1.CheckBox5.Value) Cells(RegistroAtual, 10).Value = UserForm1.ComboBox1.Text Cells(RegistroAtual, 11).Value = UserForm1.TextBox4.Text Cells(RegistroAtual, 12).Value = UserForm1.TextBox5.Text If UserForm1.OptionButton1.Value = True Then Cells(RegistroAtual, 9) = "M" Else Cells(RegistroAtual, 9) = "F" End If UserForm1.TextBox1.SetFocus Else MsgBox "No existe dados a gravar!", vbExclamation, "Mensagem" End IfEnd Sub

    Private Sub Novo_Click() If NumeroRegistros < 65536 Then Operacao = 1 With UserForm1 .TextBox1.Text = "" .TextBox2.Text = "" .TextBox3.Text = "" .TextBox5.Text = "" .CheckBox1.Value = 0 .CheckBox2.Value = 0 .CheckBox3.Value = 0 .CheckBox4.Value = 0 .CheckBox5.Value = 0 .OptionButton1.Value = 1 .ComboBox1.Text = "PE" .SpinButton1.Value = 0 .TextBox1.SetFocus End With Else MsgBox "Nmero Mximo de Registros Excedido!", vbExclamation,

    "Mensagem" End IfEnd Sub

    Sub Atribuir() With UserForm1 .TextBox1.Text = Cells(RegistroAtual, 1).Value .TextBox2.Text = Cells(RegistroAtual, 2).Value

    Fred Lucena / Erick Franklin Pgina: 41

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    .TextBox3.Text = Cells(RegistroAtual, 3).Value .TextBox5.Text = Cells(RegistroAtual, 12).Value .CheckBox1.Value = Cells(RegistroAtual, 4).Value .CheckBox2.Value = Cells(RegistroAtual, 5).Value .CheckBox3.Value = Cells(RegistroAtual, 6).Value .CheckBox4.Value = Cells(RegistroAtual, 7).Value .CheckBox5.Value = Cells(RegistroAtual, 8).Value .ComboBox1.Text = Cells(RegistroAtual, 10).Value .SpinButton1.Value = Cells(RegistroAtual, 11).Value End With If Cells(RegistroAtual, 9) = "M" Then UserForm1.OptionButton1.Value = 1 Else UserForm1.OptionButton2.Value = 1 End IfEnd Sub

    Selecione e execute a caixa de dilogo.

    O nosso sistema est praticamente acabado, s falta agora, a incluso de um procedimento para o boto Imprimir.

    Para a implementao do procedimento de impresso, proceda conforme abaixo:

    Clique no boto Imprimir;

    Clique no boto Editar Cdigo;

    Altere o procedimento conforme modelo abaixo.

    Private Sub Imprimir_Click() ActiveSheet.PrintOutEnd Sub

    Selecione e execute a caixa de dilogo.

    Depois de termos feito toda a parte bsica do nosso sistema, poderemos agora, fazer algumas implementaes, como por exemplo, a incluso de um menu que ter a funo de gerenciar este e outros sistemas que por ventura venham a ser includos. A incluso de uma caixa de dilogo que funcionar como menu, servir para revisar-mos alguns conceitos bsicos.

    Para darmos incio a criao do menu, proceda conforme abaixo:

    No Editor do Visual Basic, selecione o item Inserir da barra de menu;

    Clique sobre o item UserForm;

    Selecione o item Caixa de Dilogo e depois clique em OK.

    Agora aproveite para os procedimentos abaixo:

    Alterar a barra de ttulos (Propriedade Caption) para Menu;

    Insira na caixa de dilogo 03 (trs) botes de comando;

    Altere os nomes dos botes para Cadastro, Outros e Finalizar;

    O nosso prximo passo ser fazer com que o boto Cadastro, acione a guia cadastro, para isso, proceda conforme mostrado abaixo:

    Selecione o boto Cadastro e em seguida clique em Exibir / Cdigo;

    Altere o cdigo como mostrado abaixo:

    Fred Lucena / Erick Franklin Pgina: 42

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    Private Sub Cadastro_Click() UserForm1.ShowEnd Sub

    No menu Exibir, clique na opo Objeto;

    Selecione o boto Finalizar e pressione as teclas Shift+F7 (Editar Cdigo);

    Altere o cdigo como mostrado abaixo:

    Private Sub Finalizar_Click() Unload UserForm2End Sub

    Selecione e execute a caixa de dilogo.

    Se os botes no esto bem posicionados, clique em finalizar e torne a reposicion-nos.

    Selecione e execute a caixa de dilogo Menu.

    Clique no boto Cadastro e perceba que a caixa de dilogo Cadastro automaticamente acionada, ao clicar o boto Sair, o processamento volta para o Menu.

    Para fechar-mos com chave de ouro, criaremos um procedimento capaz de executar ou fechar automaticamente o sistema quando da sua carga ou da sua finalizao.

    Inclua o procedimento abaixo na planilha ou documento controle.

    Sub Abrir_Auto() UserForm2.Show ActiveWorkbook.Save ActiveWorkbook.CloseEnd Sub

    Salve e depois feche a pasta atual, depois, torne a abrir a pasta novamente e perceba que o sistema foi automaticamente executado.

    Agora clique no boto finalizar e veja que o sistema salvar a pasta e a fechar automaticamente.

    Aqui encerramos o nosso sistema e espero que voc tenha tido uma boa idia dos recursos que o Office possui, ms, eles no terminam ai, cabe a voc estudar, pesquisar e usar a sua imaginao.

    Boa sorte!

    Fred Lucena / Erick Franklin Pgina: 43

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    6. Projeto

    6.1. Tela do Menu

    6.2. Tela do Cadastro

    Fred Lucena / Erick Franklin Pgina: 44

  • E S C O L A T C N I C A D E I N F O R M T I C A

    Visual Basic Application - VBA

    6.3. Planilha ou documento de Dados

    Fred Lucena / Erick Franklin Pgina: 45

    1. Introduo1.1. Objetivos do Curso1.2. O que voc j deve estar sabendo

    2. Automatizando Tarefas2.1. Vinculando Macros a outros Objetos2.2. Funes de Usurio

    3. Conhecendo os Procedimentos do VBA3.1. Consideraes sobre procedimentos

    4. Conhecendo os Objetos, Propriedades e Mtodos do VBA4.1. Utilizando os Objetos, Propriedades e Mtodos do VBA4.2. Objeto Intervalo4.3. Mtodo Intervalo4.4. Mtodo selecionar

    5. Entendendo melhor os cdigos do VBA5.1. Formas de apresentao das instrues5.1.1. Instruo de atribuio5.1.2. Instruo predefinida5.1.3. Instruo com teste de condio5.1.4. Instruo de definio de propriedades dos objetos5.1.5. Instruo de execuo dos mtodos dos objetos5.1.6. Opo Explicita5.1.7. Dim Valor

    5.2. Conhecendo as ferramentas de formulrios5.2.1. Conhecendo cada boto5.2.1.1. Boto Rtulo5.2.1.2. Boto Caixa de Edio5.2.1.3. Boto Caixa de Grupo5.2.1.4. Boto de Comando5.2.1.5. Caixa de Verificao5.2.1.6. Boto de Opo5.2.1.7. Boto Drop Down5.2.1.8. Boto de Rotao

    6. Projeto6.1. Tela do Menu6.2. Tela do Cadastro6.3. Planilha ou documento de Dados