Você está na página 1de 33

Vi s ual Bas i c f or Appl i c at i ons - VBA

Parte I - Fundamentos
Sumrio:
Introduo
Declarao de variveis
Tipos de dados
Constantes
Denominao de variveis e
constantes
Operador de atribuio
Operadores aritmticos
Operadores relacionais
Operadores lgicos
Precedncia dos operadores
Exerccios
Funes de entrada e sada
Comentrios
Codificao de procedimentos
Exerccios
Ponto de acesso

Introduo
A verso Visual Basic para Aplicativos um ambiente completo de desenvolvimento, consistente com a
verso de plataforma nica do Visual Basic e compartilhada por todos os aplicativos do Microsoft Office.
O Visual Basic interpreta um conjunto especial de comandos denominado biblioteca de objetos do Excel.
O Visual Basic que vem com o Excel no a nica linguagem que poder comunicar-se com a biblioteca
de objetos. Qualquer linguagem que oferea suporte automao poder controlar o Excel.
Alguns componentes essenciais da linguagem VBA para Excel so, a seguir, destacados e conceituados:
Objetos
Um objeto um tipo especial de varivel que contm dados e cdigos e representa um elemento
especfico no Excel. O Visual Basic suporta um conjunto de objetos que correspondem diretamente aos
elementos do Microsoft Excel.
Por exemplo, o objeto Workbook representa uma pasta de trabalho, o objeto Worksheet representa
uma planilha e o objeto Range representa um intervalo de clulas.
Uma pasta de trabalho, no Microsoft Excel, corresponde a um arquivo que pode conter diversas
planilhas e folhas de grficos ou planilhas de grficos.
Propriedades e mtodos
Para realizar uma tarefa o Visual Basic retorna um objeto que representa o elemento apropriado do
Excel e depois o manipula usando as propriedades e mtodos daquele objeto.
As propriedades so caractersticas ou atributos de um objeto e os mtodos so aes que os objetos
podem executar.
Mdulos
O cdigo dentro de um mdulo organizado em procedimentos. Um mdulo um conjunto de
procedimentos que realiza tarefas especficas.
Por exemplo, procedimentos que executam vrias tarefas contbeis podem ser agrupados em um
mdulo.
Editor do Visual Basic (VBE)
O VBE a interface de desenvolvimento do VBA e pode ser acessado a partir da planilha Excel,
pressionando as teclas Alt+F11. O VBE abre a janela Cdigo para escrever e editar cdigos do Visual
Basic e, por padro, abre, tambm, a janela do Projeto (VBAProject), encaixada janela Cdigo, que
contm os elementos do projeto como mdulos, formulrios e classes.
Procedimentos

VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
1 de 11 08/08/2011 21:20
Um procedimento uma unidade de cdigo localizada entre instrues Sub e End Sub ou entre
instrues Function e End Function que realiza uma tarefa.
Um procedimento desempenha uma tarefa especfica. Um procedimento Function pode retornar valor,
ao passo que um procedimento Sub no retorna valor.
Para uma viso geral da estrutura de um procedimento Sub, segue um exemplo com breves
comentrios que explicam cada linha:

Declarao de variveis
Uma varivel uma rea na memria, referenciada por um identificador, onde pode ser armazenado um
valor e alterado a qualquer momento.
Um nome de identificador deve comear por uma letra, ser nico dentro do mesmo nvel de escopo, no
pode conter um espao entre caracteres do nome e nem pode ser igual a uma palavra reservada da
linguagem ou que pertence a sintaxe da linguagem. No permitido o uso de caracteres especiais,
exceto de alguns smbolos (_, $, %, #, @, &, !) quando utilizados como ltimo caractere do nome. O
smbolo sublinhado (_) tambm pode ser usado entre palavras do nome da varivel.
Uma varivel pode ser declarada, usando as seguintes palavras-chave para definir seu escopo ou local
(procedimento ou mdulo) onde ela poder ser acessada ou manipulada:
Dim ou Static (no procedimento)
Dim ou Private (no mdulo)
Public (no mdulo)
Dim O valor da varivel retido apenas enquanto o procedimento no qual ela foi declarada estiver em
execuo.
Static a varivel preserva o valor entre as chamadas ao procedimento.
Private o valor fica disponvel a todos os procedimentos dentro do mdulo onde a varivel foi
declarada.
Public a varivel pode ser acessada pelos procedimentos de vrios mdulos de uma pasta de
trabalho.
A varivel pode ser declarada de modo implcito pelo VBA no momento em que ela for referenciada
numa instruo. No entanto, o programa poder tornar-se mais eficiente se as variveis forem
declaradas de modo explcito pelo usurio. A declarao explcita de todas as variveis reduz a
incidncia de erros de conflitos de nomenclatura e de digitao.
Para impedir que o VBA faa declaraes implcitas, deve-se inserir a instruo Option explicit em um
mdulo antes de todos os procedimentos.
Palavras reservadas (Termos que so de uso da linguagem VBA)
as, byref, byval, case, close, const, date, declare, dim, each, else, empty, false, for, friend, function,

VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
2 de 11 08/08/2011 21:20
get, input, if, is, len, let, lock, next, new, nothing, on, open, option, print, public, private, resume, seek,
select, set, static, string, sub, then, to, true, type, variant, with, while, write.

Tipos de dados
O tipo de uma varivel determina a quantidade de memria que ela ocupar, em bytes, e o modo de
armazenamento. O VBA opera com os seguintes tipos bsicos:
Nome Tamanho Intervalo
Integer 2 bytes -32768 a 32767
Long 4 bytes -2.147.483.648 a 2.147.483.467
Single 4 bytes -3,4 x 1038 a 3,4 x 1038
Double 8 bytes 1,7 x 10308 a 1,7 x 10308
Currency 8 bytes -9223372036854,5808 a 9223372036854,5807
String 1 byte por caractere 0 a aproximadamente 65.500
Boolean 2 bytes Verdadeiro ou Falso
Date 8 bytes 01/01/100 a 31/12/9999
Object 4 bytes Qualquer referncia a objeto
Variant
16 bytes + 1 byte para
cada caractere
Vlido para qualquer tipo de dados.
Uma varivel que conter nmero inteiro pode ser declarada como Integer ou Long. Exemplos:
Dim contador As Integer
Private tamMemoria As Long
Uma varivel que conter nmeros fracionrios, pode ser declarada com o tipo de dado Single, Double
ou Currency. Exemplos:
Public lado1 As Single
Private rea As Double
Dim custoProd As Currency
Uma varivel que conter um conjunto de caracteres alfanumricos pode ser declarada com o tipo de
dados String. Exemplos:
Dim descrProd As String
Dim nomeFunc As String
Uma varivel que contm valor lgico (verdadeiro ou falso) pode ser declarada com o tipo de dados
Boolean. O valor padro False. Exemplo:
Dim limExcedido As Boolean
Uma varivel que contm valores de data e hora deve ser declarada com o tipo de dados Date.
Exemplo:
Dim data As Date
Uma varivel que contm uma referncia a um objeto do MS Excel pode ser declarada com tipo de
dados Object. Para atribuir um objeto a uma varivel-objeto, deve-se usar a instruo Set. Exemplos:
Dim plan1 As object
Set plan1 = Worksheets(1)
Uma varivel Variant permite o armazenamento de qualquer tipo de dado. Exemplo:
Dim codMarca 'Variant por padro


Constantes
Uma varivel declarada por meio do qualificador const significa que seu contedo no poder ser
alterado em todo programa. A constante deve ser inicializada, isto , no momento de sua declarao
dever ser atribudo um valor a ela. Exemplos:
Const pi = 3.1416
Const pi2 = pi * 2
Pode ser especificado o escopo de uma constante, como segue:
Private Const Pi = 3.14159
Fica disponvel a todos os procedimentos dentro de um dado mdulo. Deve ser declarada a nvel de
mdulo.
Public Const max = 1024

VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
3 de 11 08/08/2011 21:20
Permanece disponvel a todos os mdulos. Deve ser declarada a nvel de mdulo.
Const idade = 29
Disponvel apenas dentro do procedimento onde foi declarada.

Denominao de variveis e constantes
Recomenda-se para a declarao de variveis a utilizao de letras minsculas. Caso o nome seja
composto de mais de uma palavra, as demais devem ser iniciadas com letras maisculas ou colocar o
smbolo sublinhado entre elas. Exemplos:
total contador
ValorMedio segunda_fase
soma_valor_real contaLinhaRel2
Dica: Utilize nomes significativos na denominao de variveis. D um nome que represente o mais
precisamente possvel o propsito desta varivel. Evite nomes sem significado ou abreviaturas no
usuais.
Exerccios
Quais dos seguintes nomes so vlidos para a declarao de variveis e constantes em VBA?
a) a123 b) 31dezembro c) nome_aluno
d) valor+1 e) 2aFase f) valor-bruto
g) FINAL h) j i) juros_de_5%
j) const k) melhorPreco l) funcionario_novo
m) #9A n) preo o) current
p) nome do aluno q) _linha1 r) maiorNro.
os itens de nomes considerados vlidos.


Operador de atribuio
O operador de atribuio representado por = (sinal de igualdade). Atribui varivel a expresso
direita do sinal de igualdade.
Declarao Atribuio
dim resto as integer resto = 120 49
dim salario as double salario = 510.00
dim cidade as string cidade = 'Blumenau'
Aps a execuo dos comandos de atribuio, o local da mmria RAM de endereo denominado resto
passa a armazenar o valor 71, o local de endereo de nome salario, 510.00 e o de nome cidade,
Blumenau.


Operadores aritmticos
As variveis e constantes numricas podem ser utilizadas em clculos matemticos, utilizando funes
matemticas ou aplicando os operadores. A tabela, a seguir, apresenta as operaes, os smbolos
respectivos e as sintaxes dos operadores aritmticos:
Operao Operador Sintaxe
Multiplicao * r = n1 * n2
Diviso / r = n1 / n2
Adio + r = n1 + n2
Subtrao r = n1 n2
Potenciao ^ r = b ^ e
Diviso (retorna o resto) Mod r = n1 Mod n2
Diviso (retorna o quoc. inteiro) \ r = n1 \ n2
Funes matemticas intrnsecas mais utilizadas:
Operao Exemplo Resultado
Raiz quadrada sqr(9.0) 3
Parte inteira int(7.8) 7
Valor absoluto abs(-5) 5

VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
4 de 11 08/08/2011 21:20
Nmero aleatrio rnd(12) ?
Seno sin(3.7) 0,53
Co-seno cos(4.1) 0,57
Tangente tan(6.8) 0,56

Operadores relacionais
Operadores relacionais fazem comparaes, ou seja, verificam a relao de magnitude e igualdade entre
dois valores.Indicam a comparao a ser realizada por uma expresso lgica.
So seis os operadores relacionais:
Operao Operador
Igual a =
Maior que >
Menor que <
Diferente de <>
Maior ou igual a >=
Menor ou igual a <=


Operadores lgicos
Utilizados em expresses lgicas compostas ou para inverter o estado lgico de uma condio.
Retornam o valor verdadeiro ou falso.
Expresso usual Operao Operador
e Conjuno and
ou Disjuno or
no Negao not
Os operadores and e or so binrios e o operador not unrio.
Estes operadores avaliam os operandos como lgicos (0 ou 1), sendo o valor lgico 0 considerado
falso (false) e o valor lgico 1, verdadeiro (true). O VBA conta ainda com os operadores lgicos
eqv (equivalncia), imp (implicao) e xor (excluso lgica) que aqui no sero estudados por serem
de pouco uso.
As tabela verdade, a seguir, expressa operaes lgicas:
conjuno (and) disjuno (or) negao (not)
V e V = V V ou V = V no V = F
V e F = F V ou F = V no F = V
F e V = F F ou V = V
F e F = F F ou F = F
V = verdadeiro; F = falso.


Precedncia dos operadores
A precedncia o critrio que especifica a ordem de avaliao dos operadores de uma expresso
qualquer. O VBA prioriza as operaes de acordo com a ordem das categorias listadas abaixo. Os
operadores entre parnteses possuem a mesma prioridade e so executados na ordem em que so
escritos na instruo da esquerda para direita:
Categorias e operadores:
1. Aritmticos: ^ , (*, /), (+, -)
2. Relacionais (avaliados da esquerda para a direita na ordem em que aparecem)
3. Lgicos: not, and e or
(Parnteses podem ser utilizados para determinar uma forma especfica de avaliao de uma
expresso.)


Exerccios (Para obter as respostas posicione o cursor sobre a letra da expresso)
a = (2 + 1) * 6

f = 5 < 8 and 2 > 4

x=0: y=1: z=2

VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
5 de 11 08/08/2011 21:20
b = 20 / (-2) / 5
c = (5 + 1) / 2 * 3
d = 2 + 6 / 4 * 8
e = 18 11 mod 3
g = 6 > 2 or 10 = 12
h = not 12 > 30
i = 5 < 8 and 2 > 4
j = 8 <> 18 or 12 > 4 * 5
k = x > y and y < x
l = x > z or z >= y
m = x < y and not y = y
n = false and z > y
o = y = x + 1 or y + 3 > 4
dim ano as integer: ano=2012 (Verifica se o ano 2012 bissexto)
u = (ano Mod 4)= 0 And (ano Mod 100) > 0 Or (ano Mod 400) = 0

Funes de entrada e sada
Permitem obter dados do ambiente exterior para a memria do computador e fornecer dados do
computador ao mundo exterior.
Funo InputBox (caixa de entrada)
Apresenta uma caixa de dilogo para que o usurio possa introduzir o dado de entrada. Ela exibe um
aviso em uma caixa de dilogo, aguarda at que o usurio insira um texto ou clique em um boto para
retornar o contedo da caixa de dilogo.
Sintaxe:
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
onde,
prompt
argumento obrigatrio e representa a mensagem que ser exibida na
caixa de dilogo;
title opcional; texto a ser exibido na barra de ttulo da caixa de dilogo;
default opcional; dado padro de entrada a ser exibido na caixa de texto;
xpos e ypos
opcionais; especificam as coordenadas para posicionamento da caixa
de dilogo na tela;
helpfile e context
opcionais; identifica o arquivo de ajuda do usurio e o nmero de
contexto atribudo ao tpico da ajuda.
Funo MsgBox (caixa de sada)
Mostra uma caixa de dilogo contendo o boto OK e o valor do dado de sada.
Sintaxe:
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
onde,
prompt
argumento obrigatrio; mensagem que ser exibida na caixa de
dilogo;
buttons opcional; especifica o tipo de boto a ser exibido na caixa de dilogo;
title opcional; texto a ser exibido na barra de ttulo da caixa de dilogo;
helpfile e context
opcionais; identifica o arquivo de ajuda do usurio e o nmero de
contexto atribudo ao tpico da ajuda.
As palavras destacadas em itlico so os argumentos nomeados da funo. Os argumentos colocados
entre colchetes so opcionais. Os argumentos das funes podem ser especificados pela posio e
seguem a ordem apresentada na sintaxe sparados por uma vrgula. Para omitir alguns argumentos
posicionais, deve-se incluir o delimitador de vrgula correspondente. Para especificar um argumento pelo
nome, utilizar o nome do argumento seguido por dois-pontos e um sinal de igualdade (:=) e o valor do
argumento. Pode-se especificar os argumentos nomeados em qualquer ordem. Exemplo: Title:="caixa
de nomes", Prompt:="Seu nome " & nome
Exemplo das funes InputBox e MsgBox com argumentos posicionais:
A instruo Option Explicit fora a declarao explcita de todas as variveis do mdulo e deve

VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
6 de 11 08/08/2011 21:20
Resultado:
aparecer antes de qualquer procedimento. O nome do comando Sub dado pelo programador e segue
as convenes de nomenclatura de variveis. A primeira instruo do procedimento, denominado
exemplo01, declara a varivel nome de tipo string atravs da instruo Dim. A esta varivel atribudo
o nome que ser digitado pelo usurio na caixa de dilogo que aberta pela funo InputBox. A
seguir, a funo MsgBox mostrar o contedo da varivel nome na caixa de mensagem.
Na funo InputBox, foram codificados o prompt "Qual o seu nome" e o title, opcional, "Entrada de
nomes". A funo MsgBox exibe o argumento prompt "Seu nome " e o title "Caixa de nomes",
antecedido por uma vrgula, indicando a ausncia do argumento buttons e a varivel nome, escrita aps
o prompt, concatenada pelo smbolo ampersand ou e-comercial (&).
Resultado da execuo do cdigo acima:

Para separar em linhas o texto inserido no prompt pode-se faz-lo atravs dos caracteres:
Chr(13) de retorno de carro ou
Chr(10) de alimentao de linha ou, ainda, combinados
Chr(13) & Chr(10).
Exemplo de como a funo Msgbox do procedimento acima poderia ser codificada para exibir o resultado
em duas linhas:
MsgBox " Seu nome " & chr(13) & nome, , "Caixa de nomes"

Comentrios
So utilizados com a finalidade de documentar o programa-fonte. Eles no so tratados pelo compilador.
Um apstrofo (') introduz comentrios no cdigo.
Exemplo: ' Isto um comentrio.


Codificao de procedimentos
Ambiente de programao VBA
O Editor do Visual Basic Applications integrado ao Excel e, assim, ao adquirir o Microsoft Excel est-se
adquirindo tambm o VBA.
Para abrir o editor, a partir do Microsoft Excel clique em Exibir Macros e na caixa de dilogo Macros d
um nome para a Macro ou Procedimento e, em seguida, clique no boto Criar para abrir o editor j com
um mdulo na janela Cdigo e com as instrues Sub e End Sub. O editor VBA tambm pode ser
ativado a partir do Microsoft Excel pressionado-se as teclas Alt+F11.
Considerar que para executar uma macro ou procedimento necessrio que o curso de execuo de
macros no Excel esteja habilitado.
Digite a codificao mostrada abaixo, compile e execute o programa e, em seguida, examine
atentamente seu contedo e resultado.
Enunciado do problema a codificar
Calcular e imprimir a mdia aritmtica de trs notas de provas de um aluno a serem fornecidas pelo
usurio atravs do teclado.

VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
7 de 11 08/08/2011 21:20
Implementao em VBA
Para compilar e executar o programa, basta pressionar a tecla F5 ou clicar no boto verde com formato
de cabea de seta direita (Executar Sub/UserForm) na Barra de ferramentas ou a partir do menu
Executar. Para ocorrer uma execuo direta de um procedimento ao pressionar F5 ou o boto da Barra
de ferramentas, o cursor do mouse deve estar posicionado em qualquer lugar entre as instrues Sub e
End Sub do procedimento a ser executado.
Segue-se um exemplo de codificao do mesmo problema no mesmo Mdulo1 do projeto Pasta1,
considerando como entrada das notas as clulas C1, C2 e C3 da planilha Excel Plan1 e como sadas as
clulas A4 e C4 dessa mesma planilha. (A clula A4 conter a expresso: Mdia aritmtica e a C4, o
valor da mdia).
Para codificar novo procedimento no mesmo mdulo, clique no menu Inserir da janela de cdigo e em
Procedimento. Na caixa de dilogo "Adicionar procedimento", digite o nome do procedimento
calcMedia2, selecione o tipo Sub e o escopo Pblico. (Procedimento Sub sem especificao de escopo
explcito considerado Pblico por padro).
VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
8 de 11 08/08/2011 21:20
A proriedade Range pode ser substituda pela propriedade Cells apresentada no procedimento
CalcMedia2 como comentrio. O uso destas propriedades sem um qualificador de objeto representa as
clulas da planilha ativa, ou seja, a planilha que se encontra aberta no Excel. Considerando como
exemplo apenas a linha da varivel nt1, equivale escrever: nt1 = ActiveSheet.Range("C1").Value ou
nt1 = ActiveSheet.Cells(1, 3).Value. Para se referir a uma outra planilha que no a ativa deve ser
usado o objeto Worksheets e entre parnteses o nome ou o ndice da planilha requisitada. Exemplo:
Worksheets("Plan3").Range("A1").Value = 3.14159.
A propriedade Cells especifica a clula da planilha utilizando indices de linha e coluna ou estilo de
referncia L1C1, ao passo que a propriedade Range usa letras para identificar as colunas e nmeros
para as linhas.
Antes de executar o procedimento CalcMedia2, certifique-se de ter preenchido as clulas C1, C2 e C3 da
planilha com valores de notas e que essa planilha do Excel permanea ativa. Seguem recortes de
exemplos da planilha de dados mostrando as posies antes e depois da execuo do procedimento
CalcMedia2:
Antes Depois

A seguir apresentado outro modo de obter o mesmo resultado a partir da mesma fonte de dados,
mostrada acima, e sem utilizar variveis para auxiliar no processamento:
VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
9 de 11 08/08/2011 21:20
A mdia apurada a partir das clulas da planilha, sem transferir seus valores para variveis e o
resultado da mdia atribudo diretamente na clula da linha 4 coluna 3.
Os procedimentos podem ser salvos a partir da planilha do Excel como se procede para o salvamento de
qualquer planilha de uso habitual, podendo fechar a janela do editor VBA a qualquer momendo que nada
perdido enquanto a planilha correspondente estiver aberta. Se a janela do editor for fechada, para
abri-la novamente basta teclar Alt+F11. Caso a codificao dos procedimentos no sejam exibidos,
clique em Mdulo1, no painel Projeto esquerda, com o boto direito do mouse e, no menu de
contexto, em Exibir cdigo.

Exerccios
Os exerccios, a seguir, podem ser todos desenvolvidos no mesmo mdulo e na mesma pgina de cdigo
do Microsoft Visual Basic e referirem-se quando necessrio mesma planilha do Excel:
Dados os comprimentos dos catetos de um tringulo retngulo, fazer um procedimento para
determinar e imprimir o comprimento da hipotenusa. Utilizar a funo InputBox e a MsgBox
para entrada e sada de dados.
(Frmula do tringulo retngulo: a2 = b2 + c2. Para extrair a raiz quadrada de um nmero ou
expresso numrica pode ser utilizada a funo Sqr).
1.
Em certa disciplina a nota semestral do aluno calculada com base em seu desempenho
verificado atravs de trs provas. A primeira prova tem peso 3, a segunda, peso 4 e a terceira,
peso 5. Elaborar um procedimento para calcular e apresentar a mdia do semestre, tendo como
entrada as notas referentes as trs provas nas clulas A3, A4 e A5 de Plan1 e como sada a mdia
do semestre exibida nas clulas A6 e B6 da mesma planilha. Apresentar os dados de sada em
negrito e na cor vermelha.
2.
Escrever um procedimento para efetuar o clculo da quantidade de litros de combustvel gastos
em uma viagem e da distncia percorrida, sabendo-se que o veculo faz 10 km/litro. O usurio
informar a velocidade mdia na clula C3 e o tempo despendido na viagem nas clulas C4
(horas cheias) e C5 (minutos). Mostrar a quantidade de litros gastos e a distncia percorrida na
caixa de mensagem do Visual Basic (MsgBox).
3.
Sabendo-se que o KWh custa R$ 0,40, elaborar um procedimento para obter a partir de uma
caixa de entrada a quantidade de quilowatts consumida por uma residncia e calcular e escrever
na planilha, na clula G4, o valor bruto a ser pago e, em G5, o valor lquido caso seja aproveitado
um desconto de 15%. Na clula F4, escrever a expresso "Valor bruto" e na clula F5, "Valor
lquido".
4.
Elaborar um programa para calcular a diferena de preos de um determinado produto,
comparando os preos de compra anterior e atual. Obter os preos anterior e atual das clulas
B11 e B12 e imprimir a diferena algbrica e percentual dos preos nas clulas B13 e B14,
respectivamente.
5.
Elaborar um programa para ler a idade de uma pessoa em numero de anos, meses e dias a partir
da clulas B11, B12 e B13, respectivamente, calcular e imprimir essa idade em Meses, Dias,
Horas e Minutos e apresentar o resultado atravs da funo MsgBox.
6.
Para apresentar a codificao dos exerccios acima considerou-se uma mesma planilha do Excel como
base de dados. Ela contm exemplos de dados de entrada e resultados dos processos, quando for o
caso, e pode ser vista ao se sobrepor o ponteiro do mouse na palavra Planilha que aparece na linha
abaixo junto aos exerccios resolvidos, a qual, alis, a mesma apresentada na seo seguinte sem o

VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
10 de 11 08/08/2011 21:20
objeto grfico ou boto de acesso designado Idade.
(Fecha) Exerc.1 Exerc.2 Exerc.3 Exerc.4 Exerc.5 Exerc.6 Planilha
Ponto de acesso
Um procedimento ou uma macro pode ser executada a partir de vrios meios como atravs de uma
tecla de atalho, de um boto na barra de ferramentas ou de um objeto grfico, entre outros.
Pode-se executar um procedimento a partir do corpo da planilha Excel onde se encontram os dados de
entrada ou onde ser exibido o resultado.
Para criar um boto ou ponto de acesso, clique em inserir e depois em Formas, selecione uma Forma e
desenhe-a arrastando o ponteiro do mouse no corpo da planilha. Em seguida, clique com o boto direito
do mouse na Forma ou ponto de acesso criado e, no menu de contexto, em Atribuir Macro. Na caixa
de dilogo "Atribuir macro", selecione o nome da macro ou procedimento e clique em OK.
A seguir, apresentada a planilha dos exerccios com um exemplo de boto ou ponto de acesso
referente ao procedimento exerc6_idade:

VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
11 de 11 08/08/2011 21:20


Vi s ua l Ba s i c f o r Appl i c a t i ons - VBA


Parte II - Estruturas de controle
Sumrio:
Introduo
Estruturas de seleo
Seleo simples
Seleo composta
Seleo composta encadeada
Seleo de miltipla escolha
Estruturas de repetio
Repetio com teste no incio
Repetio com teste no final
Repetio com varivel de controle
Repetio com objetos de coleo
Saindo de loops e procedimentos
Exerccios

Introduo
As estruturas de controle determinam o curso de aes de um algoritmo ou programa.A lgica do
procedimento flui atravs das instrues da esquerda para a direita e de cima para baixo. As
instrues de controle, ou seja, os comandos que controlam a tomada de decises e as iteraes
podem alterar a ordem de execuo das instrues.


Estruturas de seleo
As instrues condicionais avaliam se uma condio verdadeira ou falsa, e em seguida especificam
uma ou mais instrues a serem executadas, dependendo do resultado dessa avaliao.
Comandos de seleo:
if...then / if...then...else/elseif / select...case...else


Seleo simples
(If ... Then) testa uma condio nica e executa uma instruo ou um bloco de instrues.
Sintaxe: If condio Then
Instrues
End If
Exemplo:
O procedimento abaixo obtem dois valores numricos, efetua a soma e apresenta a mensagem "soma
maior que dez", caso o resultado da adio seja maior que 10.
Sub Adio()
Dim num1 As Integer, num2 As Integer
Dim soma As Integer
num1= InputBox("Informe o 1o. valor")
num2 = InputBox("Informe o 2o. valor")
soma = num1 + num2
if (soma > 10) then
MsgBox "Soma maior que dez"
end if
End Sub
A instruo If do exemplo acima que contm mais de uma linha de cdigo conhecida como sintaxe

VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php
1 de 7 08/08/2011 21:23
de linha mltipla. O comando de linha nica no usa a instruo End If. A instruo If desse exemplo
tambm poderia ter sido codificada assim:
If (soma > 10) then MsgBox "Soma maior que dez"
Seleo composta
(If Then Else) testa uma condio nica e executa um entre dois blocos de instrues.
Sintaxe: If condio Then
Instrues
Else
Instrues
End If
Exemplo:
O procedimento a seguir efetua o clculo da mdia aritmtica das notas de trs provas de uma aluno e
avalia a situao quanto aprovao.
Sub mediaProvas()
Dim nt1 As single, nt2 As Single
Dim nt3 As Single, media As Single
nt1 = InputBox("Informe a 1a. nota")
nt2 = InputBox("Informe a 2a. nota")
nt3 = InputBox("Informe a 3a. nota")
media = (nt1 + nt2 + nt3) / 3
if (media >= 6.0) then
MsgBox "Aprovado"
else
MsgBox "Reprovado"
end if
End Sub

Seleo composta encadeada
(If Then ElseIf) testa mais de uma condio e executa um dos vrios blocos de instrues.
Sintaxe: If condio Then
Instrues
ElseIf condio Then
Instrues

. . .
Else
Instrues
End If
Exemplo:
O procedimento abaixo calcula e mostra o valor do bonus com base no cargo e salrio do funcionrio.
Sub mediaProvas()
Dim cargo As Integer
Dim salario As Currency, bonus As Currency
salario = InputBox("Informe o salario: ")
cargo = InputBox("Informe o cargo: ")
If cargo = 1 Then
bonus = salario * 0.15
ElseIf cargo = 2 Then
bonus = salario * 0.10
ElseIf cargo = 3 Then
bonus = salario * 0.08
Else
bonus = 0
End If
MsgBox "Cargo: " & cargo & " Bonus: " & bonus

VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php
2 de 7 08/08/2011 21:23
End Sub
Nota: se cada instruo ElseIf testar a mesma expresso com valores diferentes mais prtico utilizar
a seleo de mltipla escolha como no exemplo da prxima seo.

Seleo de mltipla escolha
(Select Case) testa uma condio nica e executa um dos vrios blocos de instrues.
Sintaxe: Select Case var
(1)
Case expr
(2)
: instrues
. . .
Case Else: instrues
End Select
(1)
var = varivel
(2)
expr = expresso numrica ou de sequncia de caracteres.
Exemplo:
O procedimento abaixo calcula e mostra o valor do bonus com base no cargo e salrio do funcionrio.
( o mesmo exemplo da seo anterior apenas este apresenta mais opes de cargo e salrio.)
Sub bonus()
Dim cargo As Integer
Dim salario As Currency, bonus As Currency
salario = InputBox("Informe o salario: ")
cargo = InputBox("Informe o cargo: ")
Select Case cargo
Case 1: bonus = salario * 0.15
Case 2: bonus = salario * 0.10
Case 3: bonus = salario * 0.08
Case 4, 5: bonus = salario * 0.05
Case 6 To 8: bonus = salario * 0.01
Case Is < 12: bonus = salario * 0.005
Case Else: bonus = 0
End Select
MsgBox ("Cargo: " & cargo & " Bonus: " & bonus)
End Sub
A instruo Case pode avaliar valores separados por vrgula, sequncias de valores - de at - e
comparar com outros valores como aparece no exemplo a instruo Case Is.
Nota: Para melhor legibilidade, vale a pena usar a estrutura Select Case em lugar da If ... Then ...
ElseIf quando a instruo ElseIf avaliar a mesma expresso vrias vezes.


Estruturas de repetio
Permitem a execuo de um grupo ou bloco de instrues repetidamente. As intrues podem ser
repetidas at que uma condio seja falsa ou at que seja verdadeira.
Tambm h loops que repetem instrues um nmero especfico de vezes ou em cada objeto de uma
coleo.
Do...Loop Faz um loop enquanto ou at que uma condio seja verdadeira (True).
For...Next Utiliza um contador para executar instrues um determinado nmero de vezes.
For Each...Next Repete um grupo de instrues para cada objeto em uma coleo.


Repetio com teste no incio
Do While ... Loop testa uma condio no incio do loop e executa o loop enquanto a condio for
verdadeira (True).
Sintaxe: Do While condio
Instrues
Loop

VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php
3 de 7 08/08/2011 21:23
Exemplo:
O procedimento abaixo multiplica dois valores fornecidos pelo usurio e apresenta o resultado,
repetindo esse processamento por tantas vezes quantas o usurio desejar.
Sub multiplica()
Dim produto As Integer, resp As Integer
Dim salario As Currency, bonus As Currency
resp = vbYes
Do while (resp = vbYes)
valor1 = InputBox("1o. nmero")
valor2 = InputBox("2o. nmero")
produto = valor1 * valor2
MsgBox "Resultado: " & produto
resp = MsgBox("Deseja continuar?", vbYesNo)
Loop
End Sub
A funo MsgBox, codificada em duas linhas neste procedimento, exibe na primeira o produto dos
valores informados pelo usurio e na segunda mostra a mensagem "Deseja continuar?" e dois botes
"Sim" e "No". A execuo s encerrada quando o usurio pressionar o boto "No".
Do Until ... Loop testa uma condio no incio do loop e executa o loop enquanto a condio for
falsa (False).
Sintaxe: Do Until condio
Instrues
Loop
Exemplo:
O procedimento a seguir conta o nmero de vezes que ele executado pelo o usurio.
Sub conta()
Dim soma As Integer
resp = vbYes
Do Until resp = vbNo
soma = soma + 1
resp = MsgBox ("Deseja continuar?", vbYesNo)
Loop
MsgBox "Total = " & soma
End Sub
O procedimento apresenta a caixa de mensagem com a informao: Deseja continuar? e dois botes
diferenciados pelos textos: "Sim" e "No". O sistema adiciona uma unidade na varivel soma e volta a
exibir a caixa de mensagem at que o usurio clique no boto "No", quando ento a funo aps o
comando Loop mostrar o contedo da varivel soma.

Repetio com teste no final
Do ... Loop While testa uma condio no final do loop e continua a execuo enquanto a condio
for verdadeira (True).
Sintaxe: Do
Instrues
Loop While condio
Exemplo:
O procedimento abaixo converte para o sistema binrio um nmero decimal informado pelo usurio.
Sub converte()
Dim dec As Integer, bin As String
Dim resto As Integer, sResto As String
dec = InputBox("Informe um num.", , 19)
Do
resto = dec Mod 2 ' retorna o resto da diviso
sResto = CStr(resto) ' converte o resto para o tipo string
bin = sResto + bin ' concatena o resto com o contedo de bin

VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php
4 de 7 08/08/2011 21:23
dec = dec \ 2 ' retorna o quociente inteiro da diviso
Loop While dec > 0
MsgBox "Valor em binrio: " & bin
End Sub
O usurio informa um nmero decimal na caixa de entrada, caso no queira o valor default 19
sugerido e o sistema o converte para o binrio correspondente. A execuo do loop tem lugar
enquanto a varivel dec for maior que zero.
Do ... Loop Until testa uma condio no final do loop e continua a execuo enquanto a condio
for falsa (False).
Sintaxe: Do
Instrues
Loop Until condio
Exemplo:
O procedimento abaixo calcula e mostra o fatorial de um nmero fornecido pelo usurio.
Sub fatorial()
Dim num As Integer, fat As Integer, i As Integer
num = InputBox("Informe um num.", , 5)
fat = 1: i = 1
Do
fat = fat * i
i = i + 1
Loop Until i > num
MsgBox "Fatorial de " & num & ": " & fat
End Sub
A execuo prossegue at que a varivel ndice i for maior do que a varivel num, contedo informado
na caixa de entrada.

Repetio com varivel de controle
For ... Next executa as instrues do loop enquanto a varivel contadora no atingir o valor
especificado.
Sintaxe: For var = inicial To final [Step passo]
Instrues
Next var
Exemplo:
O procedimento abaixo efetua a soma dos nmeros pares at 10.
Sub soma()
Dim total As Integer, j As Integer
For j = 2 To 10 Step 2
total = total + j
Next j
MsgBox "O total " & total
End Sub
A varivel j recebe o valor inicial 2 e a cada loop incrementada de 2 unidades at atingir o valor final
10. O comando Step opcional e se ele no for especificado assumido o valor padro 1.


Repetio com objetos de coleo
For Each... Next executa as instrues do loop para cada objeto de uma coleo.
Sintaxe: For Each var in grupo
Instrues
Next var
Exemplo:
O procedimento abaixo preenche com o valor 100 as clulas A1:D10 de Plan1 que apresentarem valor
menor do que 1.

VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php
5 de 7 08/08/2011 21:23
Sub preenche()
Dim intervalo As Range, c As Range
Set intervalo = Worksheets(1).Range("A1:D10")
For Each c In intervalo
If c.Value < 1 Then
c.Value = 100
End If
Next c
End Sub
As variveis intervalo e c so declaradas como objeto Range. A instruo Set atribui varivel
intervalo referncias do objeto Range da primeira planilha. O loop da instruo For Each escreve em
cada elemento da coleo c que se refere ao intervalo de clulas A1:D10 o valor 100 se o contedo do
elemento da coleo for menor que 1.

Saindo de loops e preocedimentos
As intruo Exit permite abandonar uma estrutura de controle. Apesar dessa instruo ser
conveniente, deve-se restringir seu uso uma vez que o excesso de sua utilizao pode dificultar a
leitura e a depurao do cdigo.
Para sair diretamente de uma estrutura de repetio For, utiliza-se a instruo Exit For e para sair
diretamente de um repetio Do usa-se a instruo Exit Do.
As instrues Exit Sub e Exit Function podem ser usadas para abandonar procedimento e funo.


Exerccios
Elaborar um procedimento para calcular e escrever a mdia ponderada de trs notas de um
aluno e a mensagem de aprovado para mdia maior ou igual a 6,0 ou, caso contrrio, a
mensagem de reprovado.
1.
Dados os valores dos lados de um tringulo, verificar se os lados realmente formam um
tringulo (o valor de cada lado deve ser menor que a soma dos outros dois lados). Se esta
condio for verdadeira, indicar que tipo de tringulo: issceles, escaleno ou eqiltero. Emitir
uma mensagem, caso os valores dos lados fornecidos no formarem um tringulo.
2.
Escrever um procedimento para calcular a soma dos N primeiros nmeros naturais. (Soma = 0
+ 1 + 2 + 3 + ... + N). O programa deve ler o valor de N, que equivale ao ltimo nmero da
srie, atravs da funo InputBox e apresentar o resultado em uma caixa de mensagem
utilizando a funo MsgBox.
3.
Dado um conjunto de valores inteiros e positivos, como descritos na planilha abaixo, determinar
qual o maior e menor valor do conjunto. Encerrar a leitura ao encontrar o valor 0. O maior e
menor valor do conjunto deve ser exibido em uma caixa de mensagem por meio da funo
MsgBox.
4.
Em uma pesquisa realizada junto aos habitantes de uma regio foram coletados os seguintes
dados: idade, sexo (M/F) e salrio. Fazer um procedimento para calcular e informar:
maior e menor idade do grupo;
mdia salarial do grupo;
percentual de homens.
Encerrar a leitura de dados da planilha ao detectar zero na idade.
5.
Fazer um programa para escrever a tabuada de 1 a 10 do nmero fornecido pelo usurio,
utilizando as estruturas de repetio For...Next e Do while...Loop. Utilize o mtodo InputBox
para retornar um nmero que ser informado pelo usurio. Mostrar o resultado de acordo com
o exemplo contido na ilustrao, utilizando a propriedade Cells do objeto Worksheets
6.

VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php
6 de 7 08/08/2011 21:23
(Fecha) Exerc.1 Exerc.2 Exerc.3 Exerc.4 Exerc.5 Exerc.6

Os exemplos dos exerccios acima foram desenvolvidos numa mesma planilha conforme ilustrao
abaixo. As informaes na cor vermelha referem-se aos cabealhos e as informaes em azul
referem-se aos exemplos de dados para os procedimentos. Elas foram digitadas na planilha e,
portanto, no so resultados dos procedimentos.


VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php
7 de 7 08/08/2011 21:23


Vi s ua l Ba s i c f o r Appl i c a t i ons - VBA


Parte III - Vetores e matrizes
Sumrio:
Introduo
Vetores
Matrizes bidimensionais
Matrizes fixas e dinmicas
Exerccios

Introduo
Vetores e matrizes so estruturas de dados homogneas conhecidas como Arrays, matrizes, variveis
indexadas, variveis subscritas ou tabelas em memria, so conjunto de elementos
de mesma natureza. Cada elemento da matriz pode ser distinguido de outros elementos por um ou
mais ndices inteiros. As estruturas homogneas ou arrays so divididas em unidimensionais e
multidimensionais. Geralmente, as estruturas unidimensionais so chamadas de vetores e as
multidimensionais so chamadas de matrizes. Um vetor tambm pode ser considerado uma matriz,
variando apenas numa dimenso.


Vetores
O vetor ou matriz unidimensional exatamente uma seqncia linear de elementos armazenados
consecutivamente na memria. So variveis do mesmo tipo declaradas com o mesmo identificador e
referenciadas por um ndice para determinar sua localizao dentro da estrutura.
Ilustrao de um vetor:
dom seg ter qua qui sex sab
1 2 3 4 5 6 7
<-- diasSem (nome do vetor)
<-- ndice
Operaes bsicas:
Declarao: Dim diasSem (1 To 7) As string
Inicializao: diasSem(1) = "dom": diasSem(2) = "seg": ...
Atribuio: diasSem(4) = "qua"
Escrita: MsgBox diasSem(5)
Exemplos de declarao de vetores:
1 Dim valor(10) As integer
2 Dim soma (1 To 15) As integer
3 Dim nome (10 To 30) As string
No primeiro exemplo acima o ndice da matriz vai de 0 a 10 contm 11 elementos. O ndice inicial de
indexao de um vetor ou a matriz depende da definio da instruo Option Base, na seo de
declarao do mdulo. Se o comando Option Base 1 for especificado, todos os ndices iniciam em 1,
caso contrrio, em 0. No segundo e terceiro exemplos os ndices variam de 1 a 15 e de 10 a 30,
respectivamente.
Exemplo:
O procedimento a seguir calcula a mdia aritmtica das notas de uma classe com dez alunos,
apresenta a mdia da turma e as notas que esto acima dessa mdia.

VBA - vetores e matrizes http://bianchi.pro.br/vba/vba_p3.php
1 de 5 08/08/2011 21:24
No primeiro loop For Next o sistema obtm as dez notas, armazena-as no vetor de nome notas e
efetua a soma para no final calcular a mdia das notas. No loop For Next seguinte relacionado na
planilha apenas as notas de valor maior que a mdia apurada.
O exemplo a seguir atribui um valor randmico para os elementos do vetor. O comando Debug.Print
envia a sada para a janela verificao imediata que pode ser aberta a partir do menu Exibir do
programa editor Visual Basic:

Matrizes bidimensionais
No Visual Basic, pode-se declarar matrizes com at 60 dimenses. A instruo a seguir declara uma
matriz bidimensional de 3 por 5:
ou
Dim matriz (1 To 3, 1 To 5) As Single

Dim matriz (3, 5) As Single
No primeiro exemplo os ndices da matriz iniciam em 1 e no segundo, em 0 se no for declarada no
nvel de mdulo a opo Option Base 1. A primeira dimenso da matriz se refere linha e a segunda,
dimenso coluna, no primeiro exemplo tem-se uma matriz de 3 linhas por 5 colunas e no segundo, 4
linhas por 6 colunas na ausncia do comando Option Base 1.
Para processar matrizes multidimensionais, utiliza-se instrues For...Next aninhadas. O
procedimento, a seguir, preenche cada elemento da matriz bidimensional com base no valor de sua
localizao dentro da matriz:
Sub exemplo3_matriz()
Dim i As Integer, j As Integer
Dim matriz(3, 5) As Single

VBA - vetores e matrizes http://bianchi.pro.br/vba/vba_p3.php
2 de 5 08/08/2011 21:24
' Preenche a matriz com valores e os imprime na janela
' de verificao imediata.
For i = 1 To 3
For j = 1 To 5
matriz(i, j) = i * j
Debug.Print matriz(i, j)
Next j
Debug.Print ' imprime branco ao completar uma linha.
Next i
End Sub
Matrizes fixas e dinmicas
As matrizes declaradas acima so exemplos de matrizes fixas. A matriz dinmica declarada
deixando-se vazios os parnteses como no exemplo que segue:
Dim matDinamica ( ) As Integer
Posteriormente, no procedimento, pode ser especificado o nmero de elementos atravs da instruo
ReDim. Segue um exemplo de declarao e redimensionamento de uma matriz dinmica:
Sub redimatriz()
Dim dinamica () As Integer ' declara uma matriz dinmica
Dim i As Integer ' declara a varivel i (ndice)
ReDim dinamica (5) ' faz a alocao de cinco elementos
For i = 1 To 5 ' faz o loop 5 vezes
dinamica (i) = i ' inicializa a matriz
Next i
' A prxima instruo redimensiona a matriz e apaga os elementos.
ReDim dinamica (10) ' redimensiona para 10
For i = 1 To 10 ' faz o loop 10 vezes
dinamica (i) = i ' inicializa a matriz
Next i
' A instruo a seguir redimensiona a matriz sem apagar os elementos.
ReDim Preserve dinamica (15) ' redimensiona para 15
End Sub

Exerccios
Fazer um programa para obter dez nmeros inteiros, armazen-los em um vetor e escrev-los
na ordem inversa de sua leitura.
Para a entrada dos nmeros utilizar a funo InputBox e para a sada, a janela de verificao
imediata, atravs do mtodo Print do objeto Debug.
1.
Fazer um procedimento para receber as notas da primeira e da segunda prova de cinco alunos.
Armazenar as notas da primeira e da segunda prova em vetores distintos. Calcular e escrever a
mdia de cada aluno na coluna A partir da linha 4 de Plan1.
2.
Numa pesquisa realizada com um grupo de pessoas pretende-se relacionar as pessoas que tm
altura acima da mdia das pessoas pesquisadas. Elaborar um procedimento para armazenar as
alturas e os nomes das pessoas em vetores distintos e exibir a altura mdia e os nomes das
pessoas com altura maior do que a altura mdia. Obs.: Encerrar a entrada de dados ao ser
digitado o valor 0 para a altura. Cada vetor pode ter no mximo 20 ocorrncias.
3.
Fazer um programa para pesquisar o nmero listado na coluna G da planilha e retornar o
contedo correspondente da coluna H atravs da funo MsgBox. O usurio digitar o nmero
desejado na caixa de entrada (InputBox). Caso o argumento no seja encontrado, informar esta
condio numa caixa de mensagem.
Criar um boto na planilha para executar o programa.
4.

VBA - vetores e matrizes http://bianchi.pro.br/vba/vba_p3.php
3 de 5 08/08/2011 21:24
Efetuar a soma dos elementos situados abaixo da diagonal principal da matriz mostrada em
Plan2, incluindo os elementos da prpria diagonal principal. Mostrar o resultado numa caixa de
mensagem. A matriz deve ser previamente construda na planilha de nome "Plan2".
(Diagonal principal formada pelos elementos A[ij], tais que i = j. Correspondem aos
elementos da linha que une o canto superior esquerdo ao canto inferior direito).
5.
Gerar uma matriz identidade de ordem 5, apresentando o resultado em "Plan2", conforme
planilha abaixo. Ajustar a largura das colunas atravs da aplicao do mtodo AutoFit.
(Matriz identidade uma matriz quadrada em que todos os elementos da diagonal principal so
iguais a 1 e os demais so nulos ou iguais a 0).
6.
(Fecha) Exerc.1 Exerc.2 Exerc.3 Exerc.4 Exerc.5 Exerc.6

Os exemplos dos exerccios acima foram desenvolvidos numa mesma pasta de planilhas conforme
ilustrao abaixo. As informaes na cor vermelha referem-se aos cabealhos e as informaes em
azul referem-se aos exemplos de dados para os procedimentos. Elas foram digitadas na planilha e,
portanto, no so resultados dos procedimentos.
Planilha Plan1:
Planilha Plan2:

VBA - vetores e matrizes http://bianchi.pro.br/vba/vba_p3.php
4 de 5 08/08/2011 21:24

VBA - vetores e matrizes http://bianchi.pro.br/vba/vba_p3.php
5 de 5 08/08/2011 21:24


Vi s ua l Ba s i c f o r Appl i c a t i ons - VBA


Parte IV - Formulrios (UserForm)
Sumrio:
Introduo
Projeto
Editor do Visual Basic VBE
Formulrio
Ttulo do formulrio
Caixa de texto
Rtulo ou label
Demais caixas de texto e rtulos
Alinhamento
Botes de comando
Tabulao
Cdigos dos botes de comando
Teste do projeto
Boto X do formulrio
Macro incio
Boto de execuo
Exerccios

Introduo
Um formulrio de usurio uma caixa de dilogo personalizada que pode ser usada quando as caixas
das funes MsgBox e InputBox no so suficientes. Os objetos em um formulrio de usurio do Excel,
como botes e caixas de texto, caixas de combinao e outros so chamados de controles. O
formulrio usado principalmente como uma plataforma na qual so adicionados os controles
necessrios para sua funcionalidade.


Projeto
Para o aprendizado bsico ser criado um projeto exemplo bastante simples que tem como objetivo
apenas efetuar o registro de entrada de peas para suprimentos de uma Loja de materiais eltricos
numa planilha.
Abra o aplicativo Excel e na planilha Plan1 digite o cabealho da aplicao como mostrado na figura 1
e salve a planilha na pasta de sua preferncia com o nome Materiais:
Figura 1
Editor do Visual Basic VBE
O VBE a interface de desenvolvimento do VBA e pode ser acessado a partir da planilha Excel,
pressionando as teclas Alt+F11. O VBE abre a janela Cdigo para escrever e editar cdigos do Visual
Basic e, por padro, abre, tambm, a janela do Projeto (VBAProject) que contm os elementos do
projeto como mdulos, formulrios, classes e outros e podendo abrir, ainda, a Janela 'Propriedades'
utilizada para alterar as propriedades ou caractersticas dos objetos. Essas janelas possuem a
particularidade de serem encaixveis janela do Editor do Visual Basic.
conveniente dizer que a planilha ou o arquivo do Excel tratado como pasta uma vez que o VBA
considera cada planilha aberta um projeto, podendo encerrar formulrios, mdulos, grficos, cdigos e
macros. Assim, para salvar um projeto, basta gravar a planilha inicialmente aberta no Excel.
Formulrio

VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php
1 de 10 08/08/2011 21:24
No Excel pressione as teclas Alt+F11 para abrir o Editor do Visual Basic VBE. Para criar a caixa de
dilogo personalizada, no Editor do Visual Basic, clique no menu Inserir e, em seguida, na opo
UserForm. Surge na tela um formulrio vazio e uma Caixa de ferramentas contendo os controles a
serem utilizados para a elaborao do formulrio, figura 2. Caso a Caixa de ferramentas no aparea
automaticamente na tela ao inserir o UserForm, clique em Caixa de ferramentas no menu Inserir.
Figura 2
Ttulo do formulrio
Clique no boto Janela 'Propriedades' na Barra de ferramentas
Padro ou pressione F4 para abrir a janela, Figura 3, a qual
possibilita nomear e inicializar propriedades dos controles do objeto
formulrio.
Para mudar o ttulo do formulrio, d um clique na barra de nome
do formulrio UserForm1 para selecion-lo, em seguida, um duplo
clique na propriedade Caption e troque o valor desta propriedade
para Entrada de peas e d Enter.
A barra de ttulo do formulrio mostrar a nova legenda.
Caixa de Texto
Inicialmente, clique no formulrio para exibir a Caixa de
ferramentas, caso ela no esteja visvel. Na Caixa de ferramentas,
selecione o boto Caixa de texto e clique no formulrio na posio
superior do lado direito para criar a primeira caixa de texto de
tamanho padro deste projeto como mostrado na figura 4.
Figura 3
Com a caixa de texto selecionada d um duplo clique na propriedade (Name) da Janela 'Propriedades'
e mude o valor para txtPeca e d Enter.
Clique em uma parte vazia do formulrio para selecion-lo e exibir a Caixa de ferramentas.
Rtulo ou Label
Para descrever ou nomear a caixa de texto, clique no boto Rtulo na Caixa de ferramentas e depois
clique no formulrio esquerda da caixa de texto, e em seguida, clique duas vezes na propriedade
Caption e modifique o valor para Nmero da pea e tecle Enter.
Se necessrio, redimensione o rtulo, arrastando a ala de seleo para perfazer um tamanho
apropriado.
Clique em uma parte vazia do formulrio para selecion-lo e exibir a Caixa de ferramentas.
VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php
2 de 10 08/08/2011 21:24
Demais caixas de Texto e rtulos
Proceda de maneira semelhante para as outras duas caixas
de texto e para os rtulos correspondentes.
Para a propriedade (Name) da caixa texto Descrio digite
txtDescr e para a caixa de texto Quantidade, txtQuant.
Na propriedade Caption dos rtulos digite os valores
Descrio e Quantidade como aparecem nas figuras ao
lado.
Alinhamento
Para fazer o alinhamento das caixas de texto, selelecione as
trs caixas, clicando ao lado na parte superior esquerda da
primeira caixa de texto e arraste um retngulo at a parte
inferior direita da ltima caixa de texto ou, se preferir,
mantenha pressionada a tecla Ctrl e clique em cada uma
das caixas de texto, figura 4.
A partir do menu Formatar, clique em Alinhar e, em
seguida, na opo Esquerdas. Para alinhar os rtulos,
proceda de modo anlogo ao das caixas de texto. A figura 5
mostra o resultado deste procedimento.
Botes de comando
Para permitir a execuo de aes, insira no formulrio trs
botes de comando: um para dar entrada de dados, outro
para apagar o contedo das caixas de texto do formulrio e
o terceiro para encerrar o processo de entrada de dados.
Para criar o primeiro boto, clique no Boto de comando
na Caixa de ferramentas e em seguida no formulrio.
Figura 4
Figura 5
Figura 6
Com o boto selecionado, mude o valor da propriedade (Name) para btnEntra e da propriedade
Caption para Entra e tecle Enter.
Redimencione o boto, clicando nele para selecion-lo e, em seguida, arraste a ala do lado direito ou
esquerdo do retngulo de seleo at alcanar um tamanho apropriado, Figura 6. Se for necessrio,
reposicione o boto no espao do formulrio, arrastando-o de um local para outro.
Clique em uma parte vazia do formulrio para exibir a Caixa de ferramentas. Proceda de forma
semelhante para a criao dos dois botes restantes, alterando os valores das propriedades como
segue:
Boto Limpa propriedade (Name) para btnLimpa e Caption para Limpa;
Boto Fim propriedade (Name) para btnFim e Caption para Fim.
Redimensione tambm esses dois botes de modo a obter tamanhos proporcionais, figura 6.
Selecione os trs botes para alinh-los a partir do menu Formatar.
VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php
3 de 10 08/08/2011 21:24
Figura 7
Salve a pasta de trabalho. Lembre-se que o salvamento do projeto pode ser feito em cada etapa
subsequente do desenvolvimento do projeto.
Pressione F5 ou clique no menu Executar e depois em Executar Sub/UseForm para ver o aspecto
da caixa de texto no modo de execuo. Clique nos botes para testar seu funcionamento e depois
feche a janela do formulrio para voltar ao modo de desenvolvimento.
Tabulao
Pressione repetidamente a tecla TAB e observe que a caixa de seleo se movimenta de controle para
controle, mudando seu foco ou ponto sobre o qual recair a ao do usurio. Tecle F5 para entrar em
modo de execuo e verifique a ordem de sequncia do foco ao pressionar a tecla TAB.
A ordem de tabulao impotante para quem utiliza o
teclado. Se a atual no for a ordem de tabulao lgica
ela pode ser mudada. Clique no plano de fundo do
formulrio e a partir do menu Exibir clique na opo
Ordem de tabulao. A caixa de dilogo, Figura 8,
mostra nove controles cuja sequncia pode ser alterada,
simplesmente, selecionando o controle desejado e
clicando no boto Mover para cima ou Mover para baixo
para posicion-lo corretamente.
Figura 8
Cdigos dos botes de comando
Boto Entra (btnEntra)
Selecione o boto Entra e no menu Exibir escolha Cdigo ou, se preferir um atalho, clique duas vezes
no boto Entra. aberta uma janela para inserir as instrues de funcionalidade. Segue o cdigo do
procedimento que adiciona registros das entradas de materiais na planilha:
VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php
4 de 10 08/08/2011 21:24
Figura 9
Para retornar ao formulrio, clique no menu Exibir e depois em Objeto ou, pegando um atalho, clique
com o boto direito do mouse em UserForm1 no painel esquerda e, no menu de contexto, escolha
Exibir objeto.
Boto Limpa (btnLimpa)
D um duplo clique no boto Limpa para abrir a janela de cdigo. Segue o cdigo relativo a esse
boto:
Figura 10
Para retornar ao formulrio, clique no menu Exibir e depois em Objeto ou atravs do atalho, clicando
com o boto direito do mouse em UserForm1 e, em seguida, em Exibir objeto.
Boto Fim (btnFim)
D um duplo clique no boto Fim para abrir a janela de cdigo. Segue o cdigo relativo a esse boto:
Figura 11
VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php
5 de 10 08/08/2011 21:24
Para retornar ao formulrio, clique no menu Exibir e depois em Objeto ou faa-o via atalho.
O fechamento do formulrio tambm pode ser efetivado teclando Esc. Para tanto, selecione o boto
Fim do formulrio e na Janela 'Propriedades' mude o valor da propriedade Cancel para True.
Teste do projeto
Para fazer o teste do projeto, pressione a tecla F5 ou clique no boto (com forma de cabea de seta
direita) na barra de ferramentas padro ou, ainda, se preferir, clique no menu Executar e depois em
Executar Sub/Userform.
Boto X do formulrio
Para que o usurio no encerre o trabalho, usando o boto fechar (X) do formulrio, clique em Inserir
e depois em Cdigo ou use o atalho a partir do UserForm1, subordinado pasta Formulrios do
painel esquerda, e, no final da janela de Cdigo, digite o procedimento conforme figura 12 a seguir:
Figura 12
Macro incio
Para iniciar a execuo do projeto a partir de um boto ou ponto de acesso contido na planilha de
dados, clique no menu Inserir e depois em Mdulo. Na rea de cdigo digite as instrues conforme
figura 13.
Figura 13
Boto de execuo
Para facilitar o comando de execuo pelo usurio, clique na Planilha do Excel e crie um boto ou
ponto de acesso, conforme figura 14. Para tanto, clique em Inserir e depois em Formas, selecione
uma Forma e desenhe-a arrastando o ponteiro do mouse no corpo da planilha. Em seguida, clique com
o boto direito do mouse na Forma e, no menu de contexto, em Atribuir Macro. Na caixa de dilogo
Atribuir macro, selecione o nome da macro inicioMat e clique em OK. Insira o texto na Forma,
clicando com o boto direito do mouse na borda da forma e, no menu de contexto, clique em Editar
Texto. Digite o texto Entrada de materiais e para sair do modo de edio, clique num espao em
branco da planilha.
Salve o projeto. Para finalizar esse estudo, faa agora o teste final, iniciando o processo de execuo a
partir do boto Entrada de materiais.
VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php
6 de 10 08/08/2011 21:24
Figura 14
Exerccios
Desenvolver um projeto para fazer uma relao de pagamentos, contendo o cdigo do
funcionrio, sexo e salrio, na planilha Plan1 do Excel (figura 15) e mostrar os totais dos
salrios listados.
Para tanto, elabore um formulrio para dar entrada dos dados (figura 16) e outro formulrio
para apresentar a soma dos salrios (figura 17) quando o usurio pressionar o boto Fim.
1.
Figura 15
Figura 16
Figura 17
Segue um exemplo da execuo deste projeto-exerccio que mostra alguns dados de entrada (figura
VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php
7 de 10 08/08/2011 21:24
18) e o resumo final do processamento contendo os totais dos salrios no segundo formulrio (figura
19).
Figura 18
Figura 19
Download do arquivo do exerccio n 1:
Fazer um programa para converter para o sistema numrico decimal um nmero escrito em
binrio. Formulrio deste exerccio (figura 20):
2.
Figura 20
Segue um exemplo de execuo deste exerccio (figura 21):
VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php
8 de 10 08/08/2011 21:24
Figura 21
Download do arquivo do exerccio n 2:
Criar um projeto para converter valores numricos entre os sistemas decimal, binrio e
hexadecimal. O formulrio para este projeto pode ser definido como segue (figura 22):
3.
Figura 22
Exemplo de uma converso efetuada atravs do projeto deste exerccio(figura 23):
Figura 23
Download do arquivo do exerccio n 3:
VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php
9 de 10 08/08/2011 21:24

VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php
10 de 10 08/08/2011 21:24

Você também pode gostar