T204D
VBA
Fred Lucena
Erick Franklin
Sumrio
1. INTRODUO
1.1. OBJETIVOS DO CURSO
1.2. O QUE VOC J DEVE ESTAR SABENDO
2. AUTOMATIZANDO TAREFAS
2.1. VINCULANDO MACROS A OUTROS OBJETOS
2.2. FUNES DE USURIO
3. CONHECENDO OS PROCEDIMENTOS DO VBA
3.1. CONSIDERAES SOBRE PROCEDIMENTOS
4. CONHECENDO OS OBJETOS, PROPRIEDADES E MTODOS DO VBA
4.1. UTILIZANDO OS OBJETOS, PROPRIEDADES E MTODOS DO VBA
4.2. OBJETO INTERVALO
4.3. MTODO INTERVALO
4.4. MTODO SELECIONAR
5. ENTENDENDO MELHOR OS CDIGOS DO VBA
5.1. FORMAS DE APRESENTAO DAS INSTRUES
5.1.1. INSTRUO DE ATRIBUIO
5.1.2. INSTRUO PREDEFINIDA
5.1.3. INSTRUO COM TESTE DE CONDIO
5.1.4. INSTRUO DE DEFINIO DE PROPRIEDADES DOS OBJETOS
5.1.5. INSTRUO DE EXECUO DOS MTODOS DOS OBJETOS
5.1.6. OPO EXPLICITA
5.1.7. DIM VALOR
5.2. CONHECENDO AS FERRAMENTAS DE FORMULRIOS
5.2.1. CONHECENDO CADA BOTO
6. PROJETO
6.1. TELA DO MENU
6.2. TELA DO CADASTRO
6.3. PLANILHA OU DOCUMENTO DE DADOS
3
3
3
3
8
8
10
11
11
12
12
13
13
13
14
14
14
14
14
14
15
15
16
18
44
44
44
45
Pgina: 2
1. Introduo
Voc 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 Curso
O 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.
2. Automatizando Tarefas
Com 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
Pgina: 3
Digite o nome da macro que no nosso caso chamaremos de FormataTtulo e Clique em OK;
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.
Pgina: 4
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:
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;
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;
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.
Pgina: 5
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;
Pgina: 6
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 With
End 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;
Pgina: 7
2.1.
2.2.
Funes de Usurio
To 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
Executam aes de forma automtica
So gravadas automaticamente
So delimitadas por Sub e End Sub
Funes
Retornam um valor aps execuo
So criadas em mdulos do Visual Basic
So delimitadas por Function e End Function
Pgina: 8
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
PEDRO
JOS
MARIA
ANTNIO
VENDAS
COMISSO
15000
8000
13000
10000
=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
AT R$ 10.000,00
ACIMA DE R$ 10.000,00
COMISSES
10%
20% ( SOBRE O EXCEDENTE )
Pgina: 9
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 demarcada
Sub MostraNegativo()
Do While ActiveCell <> ""
If ActiveCell < 0 Then
Selection.Font.ColorIndex = 3
End If
ActiveCell.Offset(1, 0).Select
Loop
End 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
Loop
End Sub
Pgina: 10
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)
cdigo
End 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 retornado
End 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.
Pgina: 11
Todo o controle proporcionado pelo VBA feito atravs da definio de objetos que podem ser
manipulados nos procedimentos.
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.
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
Pasta de Trabalho
Planilhas
Intervalos
4.1.
PROPRIEDADES
PastaTrabalhoAtiva
PlanilhaAtiva
ClulaAtiva
MTODOS
Copiar
VerificarOrtografia
Limpar
4.2.
Objeto Intervalo
Um 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 = 100
End Sub
Pgina: 12
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 anos
End Sub
Alm da atribuio direta de valores, possvel, tambm, atribuir a uma clula o contedo de outra.
o exemplo abaixo:
Veja
Sub teste()
Cells(1, 5).Value = Cells(1, 1).Value
End Sub
No exemplo acima, o contedo da clula E1 preenchido com o contedo da clula A1.
4.3.
Mtodo Intervalo
A 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 selecionar
Como 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)).Selection
End Sub
O resultado do procedimento acima ser a seleo do intervalo A1 a E5.
Pgina: 13
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
funo
Seno
funo
Fim 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
5.1.
( funo )
varivel = expresso
EX: NomeCompleto = CxEntrada(Nome Completo?)
Instruo lista_argumentos
EX: Nome ARQVELHO.DOC Como ARQNOVO.DOC
Objeto.Propriedade = expresso
EX: ClulaAtiva.Fonte.Negrito = Verdadeiro
Objeto.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)
Pgina: 14
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
Pgina: 15
5.2.
Boto "Rtulo"`
Cria uma caixa de edio para digitao de texto na sua folha de dilogo.
Cria um boto na sua planilha, grfico ou folha de dilogo ao qual voc pode
atribuir um procedimento do Visual Basic.
Boto "Drop-down"
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"
Para iniciar-mos os exerccios sobre formulrios, teremos que utilizar uma caixa de dilogo, que
denominamos de UserForm..
Pgina: 16
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.
Pgina: 17
Voc deve ter notado que a caixa de dilogo obedece sempre a ultima posio em execuo.
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.
Pgina: 18
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()
Pgina: 19
Worksheets(Dados).Select
ActiveCell.Valor = UserForm1.Campo_Cpf.Text
End 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.Text
End Sub
Pgina: 20
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).Select
End 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.4.Boto de Comando
Com 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:
Pgina: 21
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:
Pgina: 22
Clique sobre o boto Gravar e em seguida a tecla <F7> para editar o cdigo;
Faa as alteraes conforme mostrado a seguir:
Private Sub UserForm_Initialize( )
Worksheets(Plan1).Select
End Sub
Private Sub TextBox1_Change( )
ActiveCell.Valor = UserForm1.TextBox1.Text
End Sub
Private Sub Gravar_Click( )
ActiveCell.Valor = UserForm1.TextBox1.Text
End 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:
Pgina: 23
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 Operao
Dim RegistroAtual
Dim 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
Next
End 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
Pgina: 24
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).Select
End 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).Select
End Sub
Pgina: 25
Pgina: 26
RegistroAtual = NumeroRegistros
Cells(RegistroAtual, 1).Select
Atribuir
End 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
Next
End Sub
Pgina: 27
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.SetFocus
End 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.SetFocus
End 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 If
End 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:
Pgina: 28
Pgina: 29
Pgina: 30
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:
Pgina: 31
Else
5.2.1.5.Caixa de Verificao
Este 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:
Pgina: 32
Para vincular uma caixa de verificao a uma determinada clula, proceda conforme mostrado abaixo:
Pgina: 33
Cells(RegistroAtual, 1).Value
Cells(RegistroAtual, 2).Value
Cells(RegistroAtual, 3).Value
= Cells(RegistroAtual, 4).Value
= Cells(RegistroAtual, 5).Value
= Cells(RegistroAtual, 6).Value
= Cells(RegistroAtual, 7).Value
= Cells(RegistroAtual, 8).Value
5.2.1.6.Boto de Opo
Para 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;
Pgina: 34
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:
Pgina: 35
.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
Pgina: 36
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"
Pgina: 37
Else
Cells(RegistroAtual, 9) = "F"
End If
UserForm1.TextBox1.SetFocus
Else
5.2.1.8.Boto de Rotao
Com 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:
Pgina: 38
Pgina: 39
.OptionButton1.Value = 1
.ComboBox1.Text = "PE"
.SpinButton1.Value = 0
.TextBox1.SetFocus
End With
Else
Pgina: 40
Pgina: 41
Pgina: 42
Pgina: 43
6. Projeto
6.1.
Tela do Menu
6.2.
Tela do Cadastro
Pgina: 44
6.3.
Pgina: 45