You are on page 1of 45

V is u a l B a s ic

T204D

VBA
Fred Lucena
Erick Franklin

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

Fred Lucena / Erick Franklin

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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.

O que voc j deve estar sabendo


Considerando 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 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

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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;

Fred Lucena / Erick Franklin

Pgina: 7

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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 Objetos


Vimos 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 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

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

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
AT R$ 10.000,00
ACIMA DE R$ 10.000,00

COMISSES
10%
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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

3. Conhecendo os Procedimentos do VBA


Agora que j conhecemos bem as macros e funes definidas pelo usurio, poderemos utilizar os recursos
de programao VBA.

Fred Lucena / Erick Franklin

Pgina: 10

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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.

Consideraes sobre procedimentos


Relacionaremos 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 VBA


Com 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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
Pasta de Trabalho
Planilhas
Intervalos

4.1.

PROPRIEDADES
PastaTrabalhoAtiva
PlanilhaAtiva
ClulaAtiva

MTODOS
Copiar
VerificarOrtografia
Limpar

Utilizando os Objetos, Propriedades e Mtodos do VBA


Conheceremos primeiramente, os objetos mais utilizados na programao VBA:

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

Fred Lucena / Erick Franklin

Pgina: 12

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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.

5. Entendendo melhor os cdigos do VBA


Os 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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 )

Formas de apresentao das instrues


5.1.1. Instruo de atribuio

varivel = expresso
EX: NomeCompleto = CxEntrada(Nome Completo?)

5.1.2. Instruo predefinida

Instruo lista_argumentos
EX: Nome ARQVELHO.DOC Como ARQNOVO.DOC

5.1.3. Instruo com teste de condio

Faa at que condio


instruo
Ciclo
EX: Faa AtQue CxEntrada("Nome:") <> ""
Ciclo

5.1.4. Instruo de definio de propriedades dos objetos

Objeto.Propriedade = expresso
EX: ClulaAtiva.Fonte.Negrito = Verdadeiro

5.1.5. Instruo de execuo dos mtodos dos objetos

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)

Fred Lucena / Erick Franklin

Pgina: 14

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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 Explicita


Esta 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 Valor


Aproveite 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

5.2.

Conhecendo as ferramentas de formulrios


Torna-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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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 Rtulo
O 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 Edio


O 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

Private Sub UserForm_Click()


Worksheets(Dados).Select
End 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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.3.Boto Caixa de Grupo


Tm 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 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:

Fred Lucena / Erick Franklin

Pgina: 21

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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 UserForm1
End 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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:

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.SetFocus
End 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

Fred Lucena / Erick Franklin

Pgina: 24

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

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).Select
End Sub
Para o boto ltimo, proceda conforme abaixo:

Selecione a planilha ou documento Cadastro;


Fred Lucena / Erick Franklin

Pgina: 25

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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).Select
End 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).Select
End 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
Atribuir
End Sub
Private Sub Anterior_Click()
Operacao = 0
If RegistroAtual > 1 Then
RegistroAtual = RegistroAtual - 1
End If
Cells(RegistroAtual, 1).Select
Atribuir
End Sub
Private Sub Proximo_Click()
Operacao = 0
If RegistroAtual < NumeroRegistros Then
RegistroAtual = RegistroAtual + 1
End If
Cells(RegistroAtual, 1).Select
Atribuir
End Sub
Private Sub Ultimo_Click()
Operacao = 0

Fred Lucena / Erick Franklin

Pgina: 26

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

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.SetFocus
End 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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:

Fred Lucena / Erick Franklin

Pgina: 28

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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
Atribuir
End 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 If
End 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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 If
End 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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 If
End 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 If
End Sub
Sub Atribuir()
UserForm1.TextBox1.Text = Cells(RegistroAtual, 1).Value
UserForm1.TextBox2.Text = Cells(RegistroAtual, 2).Value
UserForm1.TextBox3.Text = Cells(RegistroAtual, 3).Value
End Sub
Selecione e execute a caixa de dilogo.
incrementar alguns outros objetos.

Agora que nosso programa est funcionando perfeitamente, podemos

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:

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

A caixa de verificao tem uma propriedade bastante interessante.


uma planilha ou documento do Excel.

Ela pode ser vinculada a uma clula de

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 If
End Sub

Fred Lucena / Erick Franklin

Pgina: 33

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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 If
End Sub
Sub Atribuir()
With UserForm1
.TextBox1.Text =
.TextBox2.Text =
.TextBox3.Text =
.CheckBox1.Value
.CheckBox2.Value
.CheckBox3.Value
.CheckBox4.Value
.CheckBox5.Value
End With
End Sub

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

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 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;

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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 If
End Sub

Private Sub Novo_Click()


If NumeroRegistros < 65536 Then
Operacao = 1
With UserForm1

Fred Lucena / Erick Franklin

Pgina: 35

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

.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 If
End 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 If
End 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

Aproveite para incluir o rotulo Estado a esquerda do objeto Drop Down.


de criar a lista de informaes que far parte do objeto Drop Down.

Com a etapa acima acabamos

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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

Else
Cells(RegistroAtual, 9) = "F"
End If
UserForm1.TextBox1.SetFocus

Else

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


End If
End 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 If
End 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 If
End Sub
Selecione e execute a caixa de dilogo.

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:

Fred Lucena / Erick Franklin

Pgina: 38

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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.Value
End 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 If
End 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

.OptionButton1.Value = 1
.ComboBox1.Text = "PE"
.SpinButton1.Value = 0
.TextBox1.SetFocus
End With
Else

MsgBox "Nmero Mximo de Registros Excedido!", vbExclamation,


"Mensagem"
End If
End 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 If
End 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

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 If
End 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 If
End Sub
Sub Atribuir()
With UserForm1
.TextBox1.Text = Cells(RegistroAtual, 1).Value
.TextBox2.Text = Cells(RegistroAtual, 2).Value

Fred Lucena / Erick Franklin

Pgina: 41

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

.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 If
End 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.PrintOut
End 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

Private Sub Cadastro_Click()


UserForm1.Show
End 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 UserForm2
End 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.Close
End 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

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

6. Projeto
6.1.

Tela do Menu

6.2.

Tela do Cadastro

Fred Lucena / Erick Franklin

Pgina: 44

Visual Basic Application - VBA


E S C O L A T C N IC A D E IN F O R M T IC A

6.3.

Planilha ou documento de Dados

Fred Lucena / Erick Franklin

Pgina: 45

You might also like