Upload
renatoword
View
371
Download
3
Embed Size (px)
DESCRIPTION
Bem complexo.
V i s u a l B a s i c f o r A p p l i c a t i o n s - V BA
Parte I - Fundamentos
Sumário:
Introdução
Declaração de variáveis
Tipos de dados
Constantes
Denominação de variáveis e
constantes
Operador de atribuição
Operadores aritméticos
Operadores relacionais
Operadores lógicos
Precedência dos operadores
Exercícios
Funções de entrada e saída
Comentários
Codificação de procedimentos
Exercícios
Ponto de acesso
Introdução
A versão Visual Basic para Aplicativos é um ambiente completo de desenvolvimento, consistente com a
versão 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 não é a única linguagem que poderá comunicar-se com a biblioteca
de objetos. Qualquer linguagem que ofereça suporte à automação poderá controlar o Excel.
Alguns componentes essenciais da linguagem VBA para Excel são, a seguir, destacados e conceituados:
Objetos
Um objeto é um tipo especial de variável que contém dados e códigos e representa um elemento
específico 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 células.
Uma pasta de trabalho, no Microsoft Excel, corresponde a um arquivo que pode conter diversas
planilhas e folhas de gráficos ou planilhas de gráficos.
Propriedades e métodos
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 métodos daquele objeto.
As propriedades são características ou atributos de um objeto e os métodos são ações que os objetos
podem executar.
Módulos
O código dentro de um módulo é organizado em procedimentos. Um módulo é um conjunto de
procedimentos que realiza tarefas específicas.
Por exemplo, procedimentos que executam várias tarefas contábeis podem ser agrupados em um
módulo.
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 Código para escrever e editar códigos do Visual
Basic e, por padrão, abre, também, a janela do Projeto (VBAProject), encaixada à janela Código, que
contém os elementos do projeto como módulos, formulários 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 código localizada entre instruções Sub e End Sub ou entre
instruções Function e End Function que realiza uma tarefa.
Um procedimento desempenha uma tarefa específica. Um procedimento Function pode retornar valor,
ao passo que um procedimento Sub não retorna valor.
Para uma visão geral da estrutura de um procedimento Sub, segue um exemplo com breves
comentários que explicam cada linha:
Declaração de variáveis
Uma variável é uma área na memória, referenciada por um identificador, onde pode ser armazenado um
valor e alterado a qualquer momento.
Um nome de identificador deve começar por uma letra, ser único dentro do mesmo nível de escopo, não
pode conter um espaço entre caracteres do nome e nem pode ser igual a uma palavra reservada da
linguagem ou que pertence a sintaxe da linguagem. Não é permitido o uso de caracteres especiais,
exceto de alguns símbolos (_, $, %, #, @, &, !) quando utilizados como último caractere do nome. O
símbolo sublinhado (_) também pode ser usado entre palavras do nome da variável.
Uma variável pode ser declarada, usando as seguintes palavras-chave para definir seu escopo ou local
(procedimento ou módulo) onde ela poder ser acessada ou manipulada:
Dim ou Static (no procedimento)
Dim ou Private (no módulo)
Public (no módulo)
Dim – O valor da variável é retido apenas enquanto o procedimento no qual ela foi declarada estiver em
execução.
Static – a variável preserva o valor entre as chamadas ao procedimento.
Private – o valor fica disponível a todos os procedimentos dentro do módulo onde a variável foi
declarada.
Public – a variável pode ser acessada pelos procedimentos de vários módulos de uma pasta de
trabalho.
A variável pode ser declarada de modo implícito pelo VBA no momento em que ela for referenciada
numa instrução. No entanto, o programa poderá tornar-se mais eficiente se as variáveis forem
declaradas de modo explícito pelo usuário. A declaração explícita de todas as variáveis reduz a
incidência de erros de conflitos de nomenclatura e de digitação.
Para impedir que o VBA faça declarações implícitas, deve-se inserir a instrução Option explicit em um
módulo antes de todos os procedimentos.
Palavras reservadas (Termos que são 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 variável determina a quantidade de memória que ela ocupará, em bytes, e o modo de
armazenamento. O VBA opera com os seguintes tipos básicos:
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 referência a objeto
Variant 16 bytes + 1 byte para
cada caractere Válido para qualquer tipo de dados.
Uma variável que conterá número inteiro pode ser declarada como Integer ou Long. Exemplos:
Dim contador As Integer
Private tamMemoria As Long
Uma variável que conterá números fracionários, 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 variável que conterá um conjunto de caracteres alfanuméricos pode ser declarada com o tipo de
dados String. Exemplos:
Dim descrProd As String
Dim nomeFunc As String
Uma variável que contém valor lógico (verdadeiro ou falso) pode ser declarada com o tipo de dados
Boolean. O valor padrão é False. Exemplo:
Dim limExcedido As Boolean
Uma variável que contém valores de data e hora deve ser declarada com o tipo de dados Date.
Exemplo:
Dim data As Date
Uma variável que contém uma referência a um objeto do MS Excel pode ser declarada com tipo de
dados Object. Para atribuir um objeto a uma variável-objeto, deve-se usar a instrução Set. Exemplos:
Dim plan1 As object
Set plan1 = Worksheets(1)
Uma variável Variant permite o armazenamento de qualquer tipo de dado. Exemplo:
Dim codMarca 'Variant por padrão
Constantes
Uma variável declarada por meio do qualificador const significa que seu conteúdo não poderá ser
alterado em todo programa. A constante deve ser inicializada, isto é, no momento de sua declaração
deverá ser atribuído 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 disponível a todos os procedimentos dentro de um dado módulo. Deve ser declarada a nível de
módulo.
Public Const max = 1024
VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
3 de 11 08/08/2011 21:20
Permanece disponível a todos os módulos. Deve ser declarada a nível de módulo.
Const idade = 29
Disponível apenas dentro do procedimento onde foi declarada.
Denominação de variáveis e constantes
Recomenda-se para a declaração de variáveis a utilização de letras minúsculas. Caso o nome seja
composto de mais de uma palavra, as demais devem ser iniciadas com letras maiúsculas ou colocar o
símbolo sublinhado entre elas. Exemplos:
total contador
ValorMedio segunda_fase
soma_valor_real contaLinhaRel2
Dica: Utilize nomes significativos na denominação de variáveis. Dê um nome que represente o mais
precisamente possível o propósito desta variável. Evite nomes sem significado ou abreviaturas não
usuais.
Exercícios
Quais dos seguintes nomes são válidos para a declaração de variáveis 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) preço o) current
p) nome do aluno q) _linha1 r) maiorNro.
os itens de nomes considerados válidos.
Operador de atribuição
O operador de atribuição é representado por = (sinal de igualdade). Atribui à variável a expressão à
direita do sinal de igualdade.
Declaração Atribuição
dim resto as integer resto = 120 – 49
dim salario as double salario = 510.00
dim cidade as string cidade = 'Blumenau'
Após a execução dos comandos de atribuição, o local da mémória RAM de endereço denominado resto
passa a armazenar o valor 71, o local de endereço de nome salario, 510.00 e o de nome cidade,
Blumenau.
Operadores aritméticos
As variáveis e constantes numéricas podem ser utilizadas em cálculos matemáticos, utilizando funções
matemáticas ou aplicando os operadores. A tabela, a seguir, apresenta as operações, os símbolos
respectivos e as sintaxes dos operadores aritméticos:
Operação Operador Sintaxe
Multiplicação * r = n1 * n2
Divisão / r = n1 / n2
Adição + r = n1 + n2
Subtração – r = n1 – n2
Potenciação ^ r = b ^ e
Divisão (retorna o resto) Mod r = n1 Mod n2
Divisão (retorna o quoc. inteiro) \ r = n1 \ n2
Funções matemáticas intrínsecas mais utilizadas:
Operação 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
Número aleatório 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 comparações, ou seja, verificam a relação de magnitude e igualdade entre
dois valores.Indicam a comparação a ser realizada por uma expressão lógica.
São seis os operadores relacionais:
Operação Operador
Igual a =
Maior que >
Menor que <
Diferente de <>
Maior ou igual a >=
Menor ou igual a <=
Operadores lógicos
Utilizados em expressões lógicas compostas ou para inverter o estado lógico de uma condição.
Retornam o valor verdadeiro ou falso.
Expressão usual Operação Operador
e Conjunção and
ou Disjunção or
não Negação not
Os operadores and e or são binários e o operador not é unário.
Estes operadores avaliam os operandos como lógicos (0 ou 1), sendo o valor lógico 0 considerado
falso (false) e o valor lógico 1, verdadeiro (true). O VBA conta ainda com os operadores lógicos
eqv (equivalência), imp (implicação) e xor (exclusão lógica) que aqui não serão estudados por serem
de pouco uso.
As tabela verdade, a seguir, expressa operações lógicas:
conjunção (and) disjunção (or) negação (not)
V e V = V V ou V = V não V = F
V e F = F V ou F = V não F = V
F e V = F F ou V = V
F e F = F F ou F = F
V = verdadeiro; F = falso.
Precedência dos operadores
A precedência é o critério que especifica a ordem de avaliação dos operadores de uma expressão
qualquer. O VBA prioriza as operações de acordo com a ordem das categorias listadas abaixo. Os
operadores entre parênteses possuem a mesma prioridade e são executados na ordem em que são
escritos na instrução da esquerda para direita:
Categorias e operadores:
1. Aritméticos: ^ , (*, /), (+, -)
2. Relacionais (avaliados da esquerda para a direita na ordem em que aparecem)
3. Lógicos: not, and e or
(Parênteses podem ser utilizados para determinar uma forma específica de avaliação de uma
expressão.)
Exercícios (Para obter as respostas posicione o cursor sobre a letra da expressão)
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
Funções de entrada e saída
Permitem obter dados do ambiente exterior para a memória do computador e fornecer dados do
computador ao mundo exterior.
Função InputBox (caixa de entrada)
Apresenta uma caixa de diálogo para que o usuário possa introduzir o dado de entrada. Ela exibe um
aviso em uma caixa de diálogo, aguarda até que o usuário insira um texto ou clique em um botão para
retornar o conteúdo da caixa de diálogo.
Sintaxe:
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
onde,
prompt argumento obrigatório e representa a mensagem que será exibida na
caixa de diálogo;
title opcional; texto a ser exibido na barra de título da caixa de diálogo;
default opcional; dado padrão de entrada a ser exibido na caixa de texto;
xpos e ypos opcionais; especificam as coordenadas para posicionamento da caixa
de diálogo na tela;
helpfile e context opcionais; identifica o arquivo de ajuda do usuário e o número de
contexto atribuído ao tópico da ajuda.
Função MsgBox (caixa de saída)
Mostra uma caixa de diálogo contendo o botão OK e o valor do dado de saída.
Sintaxe:
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
onde,
prompt argumento obrigatório; mensagem que será exibida na caixa de
diálogo;
buttons opcional; especifica o tipo de botão a ser exibido na caixa de diálogo;
title opcional; texto a ser exibido na barra de título da caixa de diálogo;
helpfile e context opcionais; identifica o arquivo de ajuda do usuário e o número de
contexto atribuído ao tópico da ajuda.
As palavras destacadas em itálico são os argumentos nomeados da função. Os argumentos colocados
entre colchetes são opcionais. Os argumentos das funções podem ser especificados pela posição e
seguem a ordem apresentada na sintaxe sparados por uma vírgula. Para omitir alguns argumentos
posicionais, deve-se incluir o delimitador de vírgula 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 funções InputBox e MsgBox com argumentos posicionais:
A instrução Option Explicit força a declaração explícita de todas as variáveis do módulo 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 convenções de nomenclatura de variáveis. A primeira instrução do procedimento, denominado
exemplo01, declara a variável nome de tipo string através da instrução Dim. A esta variável é atribuído
o nome que será digitado pelo usuário na caixa de diálogo que é aberta pela função InputBox. A
seguir, a função MsgBox mostrará o conteúdo da variável nome na caixa de mensagem.
Na função InputBox, foram codificados o prompt "Qual é o seu nome" e o title, opcional, "Entrada de
nomes". A função MsgBox exibe o argumento prompt "Seu nome é" e o title "Caixa de nomes",
antecedido por uma vírgula, indicando a ausência do argumento buttons e a variável nome, escrita após
o prompt, concatenada pelo símbolo ampersand ou e-comercial (&).
Resultado da execução do código acima:
Para separar em linhas o texto inserido no prompt pode-se fazê-lo através dos caracteres:
Chr(13) de retorno de carro ou
Chr(10) de alimentação de linha ou, ainda, combinados
Chr(13) & Chr(10).
Exemplo de como a função Msgbox do procedimento acima poderia ser codificada para exibir o resultado
em duas linhas:
MsgBox " Seu nome é " & chr(13) & nome, , "Caixa de nomes"
Comentários
São utilizados com a finalidade de documentar o programa-fonte. Eles não são tratados pelo compilador.
Um apóstrofo (') introduz comentários no código.
Exemplo: ' Isto é um comentário.
Codificação de procedimentos
Ambiente de programação VBA
O Editor do Visual Basic Applications é integrado ao Excel e, assim, ao adquirir o Microsoft Excel está-se
adquirindo também o VBA.
Para abrir o editor, a partir do Microsoft Excel clique em Exibir Macros e na caixa de diálogo Macros dê
um nome para a Macro ou Procedimento e, em seguida, clique no botão Criar para abrir o editor já com
um módulo na janela Código e com as instruções Sub e End Sub. O editor VBA também pode ser
ativado a partir do Microsoft Excel pressionado-se as teclas Alt+F11.
Considerar que para executar uma macro ou procedimento é necessário que o curso de execução de
macros no Excel esteja habilitado.
Digite a codificação mostrada abaixo, compile e execute o programa e, em seguida, examine
atentamente seu conteúdo e resultado.
Enunciado do problema a codificar
Calcular e imprimir a média aritmética de três notas de provas de um aluno a serem fornecidas pelo
usuário através do teclado.
VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
7 de 11 08/08/2011 21:20
Implementação em VBA
Para compilar e executar o programa, basta pressionar a tecla F5 ou clicar no botão verde com formato
de cabeça de seta à direita (Executar Sub/UserForm) na Barra de ferramentas ou a partir do menu
Executar. Para ocorrer uma execução direta de um procedimento ao pressionar F5 ou o botão da Barra
de ferramentas, o cursor do mouse deve estar posicionado em qualquer lugar entre as instruções Sub e
End Sub do procedimento a ser executado.
Segue-se um exemplo de codificação do mesmo problema no mesmo Módulo1 do projeto Pasta1,
considerando como entrada das notas as células C1, C2 e C3 da planilha Excel Plan1 e como saídas as
células A4 e C4 dessa mesma planilha. (A célula A4 conterá a expressão: Média aritmética e a C4, o
valor da média).
Para codificar novo procedimento no mesmo módulo, clique no menu Inserir da janela de código e em
Procedimento. Na caixa de diálogo "Adicionar procedimento", digite o nome do procedimento
calcMedia2, selecione o tipo Sub e o escopo Público. (Procedimento Sub sem especificação de escopo
explícito é considerado Público por padrão).
VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
8 de 11 08/08/2011 21:20
A proriedade Range pode ser substituída pela propriedade Cells apresentada no procedimento
CalcMedia2 como comentário. O uso destas propriedades sem um qualificador de objeto representa as
células da planilha ativa, ou seja, a planilha que se encontra aberta no Excel. Considerando como
exemplo apenas a linha da variável nt1, equivale escrever: nt1 = ActiveSheet.Range("C1").Value ou
nt1 = ActiveSheet.Cells(1, 3).Value. Para se referir a uma outra planilha que não a ativa deve ser
usado o objeto Worksheets e entre parênteses o nome ou o índice da planilha requisitada. Exemplo:
Worksheets("Plan3").Range("A1").Value = 3.14159.
A propriedade Cells especifica a célula da planilha utilizando indices de linha e coluna ou estilo de
referência L1C1, ao passo que a propriedade Range usa letras para identificar as colunas e números
para as linhas.
Antes de executar o procedimento CalcMedia2, certifique-se de ter preenchido as células C1, C2 e C3 da
planilha com valores de notas e que essa planilha do Excel permaneça ativa. Seguem recortes de
exemplos da planilha de dados mostrando as posições antes e depois da execução 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 variáveis para auxiliar no processamento:
VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
9 de 11 08/08/2011 21:20
A média é apurada a partir das células da planilha, sem transferir seus valores para variáveis e o
resultado da média é atribuído diretamente na célula 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 codificação dos procedimentos não sejam exibidos,
clique em Módulo1, no painel Projeto à esquerda, com o botão direito do mouse e, no menu de
contexto, em Exibir código.
Exercícios
Os exercícios, a seguir, podem ser todos desenvolvidos no mesmo módulo e na mesma página de código
do Microsoft Visual Basic e referirem-se quando necessário à mesma planilha do Excel:
Dados os comprimentos dos catetos de um triângulo retângulo, fazer um procedimento para
determinar e imprimir o comprimento da hipotenusa. Utilizar a função InputBox e a MsgBox
para entrada e saída de dados.
(Fórmula do triângulo retângulo: a2 = b2 + c2. Para extrair a raiz quadrada de um número ou
expressão numérica pode ser utilizada a função Sqr).
1.
Em certa disciplina a nota semestral do aluno é calculada com base em seu desempenho
verificado através de três provas. A primeira prova tem peso 3, a segunda, peso 4 e a terceira,
peso 5. Elaborar um procedimento para calcular e apresentar a média do semestre, tendo como
entrada as notas referentes as três provas nas células A3, A4 e A5 de Plan1 e como saída a média
do semestre exibida nas células A6 e B6 da mesma planilha. Apresentar os dados de saída em
negrito e na cor vermelha.
2.
Escrever um procedimento para efetuar o cálculo da quantidade de litros de combustível gastos
em uma viagem e da distância percorrida, sabendo-se que o veículo faz 10 km/litro. O usuário
informará a velocidade média na célula C3 e o tempo despendido na viagem nas células C4
(horas cheias) e C5 (minutos). Mostrar a quantidade de litros gastos e a distância 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 residência e calcular e escrever
na planilha, na célula G4, o valor bruto a ser pago e, em G5, o valor líquido caso seja aproveitado
um desconto de 15%. Na célula F4, escrever a expressão "Valor bruto" e na célula F5, "Valor
líquido".
4.
Elaborar um programa para calcular a diferença de preços de um determinado produto,
comparando os preços de compra anterior e atual. Obter os preços anterior e atual das células
B11 e B12 e imprimir a diferença algébrica e percentual dos preços nas células 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 células B11, B12 e B13, respectivamente, calcular e imprimir essa idade em Meses, Dias,
Horas e Minutos e apresentar o resultado através da função MsgBox.
6.
Para apresentar a codificação dos exercícios acima considerou-se uma mesma planilha do Excel como
base de dados. Ela contém 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 exercícios resolvidos, a qual, aliás, é a mesma apresentada na seção seguinte sem o
VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php
10 de 11 08/08/2011 21:20
objeto gráfico ou botão 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 vários meios como através de uma
tecla de atalho, de um botão na barra de ferramentas ou de um objeto gráfico, 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 botão 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 botão direito
do mouse na Forma ou ponto de acesso criado e, no menu de contexto, em Atribuir Macro. Na caixa
de diálogo "Atribuir macro", selecione o nome da macro ou procedimento e clique em OK.
A seguir, é apresentada a planilha dos exercícios com um exemplo de botão 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
V i s u a l B a s i c f o r A pp l i c a t i o n s - V BA
Parte II - Estruturas de controle
Sumário:
Introdução
Estruturas de seleção
Seleção simples
Seleção composta
Seleção composta encadeada
Seleção de múiltipla escolha
Estruturas de repetição
Repetição com teste no início
Repetição com teste no final
Repetição com variável de controle
Repetição com objetos de coleção
Saindo de loops e procedimentos
Exercícios
Introdução
As estruturas de controle determinam o curso de ações de um algoritmo ou programa.A lógica do
procedimento flui através das instruções da esquerda para a direita e de cima para baixo. As
instruções de controle, ou seja, os comandos que controlam a tomada de decisões e as iterações
podem alterar a ordem de execução das instruções.
Estruturas de seleção
As instruções condicionais avaliam se uma condição é verdadeira ou falsa, e em seguida especificam
uma ou mais instruções a serem executadas, dependendo do resultado dessa avaliação.
Comandos de seleção:
if...then / if...then...else/elseif / select...case...else
Seleção simples
(If ... Then) — testa uma condição única e executa uma instrução ou um bloco de instruções.
Sintaxe: If condição Then
Instruções
End If
Exemplo:
O procedimento abaixo obtem dois valores numéricos, efetua a soma e apresenta a mensagem "soma
maior que dez", caso o resultado da adição seja maior que 10.
Sub Adição()
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 instrução If do exemplo acima que contém mais de uma linha de código é 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 múltipla. O comando de linha única não usa a instrução End If. A instrução If desse exemplo
também poderia ter sido codificada assim:
If (soma > 10) then MsgBox "Soma maior que dez"
Seleção composta
(If … Then … Else) — testa uma condição única e executa um entre dois blocos de instruções.
Sintaxe: If condição Then
Instruções
Else
Instruções
End If
Exemplo:
O procedimento a seguir efetua o cálculo da média aritmética das notas de três provas de uma aluno e
avalia a situação quanto à aprovação.
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
Seleção composta encadeada
(If … Then … ElseIf) — testa mais de uma condição e executa um dos vários blocos de instruções.
Sintaxe: If condição Then
Instruções
ElseIf condição Then
Instruções
. . .
Else
Instruções
End If
Exemplo:
O procedimento abaixo calcula e mostra o valor do bonus com base no cargo e salário do funcionário.
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 instrução ElseIf testar a mesma expressão com valores diferentes é mais prático utilizar
a seleção de múltipla escolha como no exemplo da próxima seção.
Seleção de múltipla escolha
(Select Case) — testa uma condição única e executa um dos vários blocos de instruções.
Sintaxe: Select Case var(1)
Case expr(2): instruções
. . .
Case Else: instruções
End Select(1)var = variável(2)expr = expressão numérica ou de sequência de caracteres.
Exemplo:
O procedimento abaixo calcula e mostra o valor do bonus com base no cargo e salário do funcionário.
(É o mesmo exemplo da seção anterior apenas este apresenta mais opções de cargo e salário.)
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 instrução Case pode avaliar valores separados por vírgula, sequências de valores - de até - e
comparar com outros valores como aparece no exemplo a instrução Case Is.
Nota: Para melhor legibilidade, vale a pena usar a estrutura Select Case em lugar da If ... Then ...
ElseIf quando a instrução ElseIf avaliar a mesma expressão várias vezes.
Estruturas de repetição
Permitem a execução de um grupo ou bloco de instruções repetidamente. As intruções podem ser
repetidas até que uma condição seja falsa ou até que seja verdadeira.
Também há loops que repetem instruções um número específico de vezes ou em cada objeto de uma
coleção.
Do...Loop — Faz um loop enquanto ou até que uma condição seja verdadeira (True).
For...Next — Utiliza um contador para executar instruções um determinado número de vezes.
For Each...Next — Repete um grupo de instruções para cada objeto em uma coleção.
Repetição com teste no início
Do While ... Loop — testa uma condição no início do loop e executa o loop enquanto a condição for
verdadeira (True).
Sintaxe: Do While condição
Instruções
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 usuário e apresenta o resultado,
repetindo esse processamento por tantas vezes quantas o usuário 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. número")
valor2 = InputBox("2o. número")
produto = valor1 * valor2
MsgBox "Resultado: " & produto
resp = MsgBox("Deseja continuar?", vbYesNo)
Loop
End Sub
A função MsgBox, codificada em duas linhas neste procedimento, exibe na primeira o produto dos
valores informados pelo usuário e na segunda mostra a mensagem "Deseja continuar?" e dois botões
"Sim" e "Não". A execução só é encerrada quando o usuário pressionar o botão "Não".
Do Until ... Loop — testa uma condição no início do loop e executa o loop enquanto a condição for
falsa (False).
Sintaxe: Do Until condição
Instruções
Loop
Exemplo:
O procedimento a seguir conta o número de vezes que ele é executado pelo o usuário.
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 informação: Deseja continuar? e dois botões
diferenciados pelos textos: "Sim" e "Não". O sistema adiciona uma unidade na variável soma e volta a
exibir a caixa de mensagem até que o usuário clique no botão "Não", quando então a função após o
comando Loop mostrará o conteúdo da variável soma.
Repetição com teste no final
Do ... Loop While — testa uma condição no final do loop e continua a execução enquanto a condição
for verdadeira (True).
Sintaxe: Do
Instruções
Loop While condição
Exemplo:
O procedimento abaixo converte para o sistema binário um número decimal informado pelo usuário.
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 divisão
sResto = CStr(resto) ' converte o resto para o tipo string
bin = sResto + bin ' concatena o resto com o conteúdo 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 divisão
Loop While dec > 0
MsgBox "Valor em binário: " & bin
End Sub
O usuário informa um número decimal na caixa de entrada, caso não queira o valor default 19
sugerido e o sistema o converte para o binário correspondente. A execução do loop tem lugar
enquanto a variável dec for maior que zero.
Do ... Loop Until — testa uma condição no final do loop e continua a execução enquanto a condição
for falsa (False).
Sintaxe: Do
Instruções
Loop Until condição
Exemplo:
O procedimento abaixo calcula e mostra o fatorial de um número fornecido pelo usuário.
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 execução prossegue até que a variável índice i for maior do que a variável num, conteúdo informado
na caixa de entrada.
Repetição com variável de controle
For ... Next — executa as instruções do loop enquanto a variável contadora não atingir o valor
especificado.
Sintaxe: For var = inicial To final [Step passo]
Instruções
Next var
Exemplo:
O procedimento abaixo efetua a soma dos números 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 variável 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 não for especificado é assumido o valor padrão 1.
Repetição com objetos de coleção
For Each... Next — executa as instruções do loop para cada objeto de uma coleção.
Sintaxe: For Each var in grupo
Instruções
Next var
Exemplo:
O procedimento abaixo preenche com o valor 100 as células 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 variáveis intervalo e c são declaradas como objeto Range. A instrução Set atribui à variável
intervalo referências do objeto Range da primeira planilha. O loop da instrução For Each escreve em
cada elemento da coleção c que se refere ao intervalo de células A1:D10 o valor 100 se o conteúdo do
elemento da coleção for menor que 1.
Saindo de loops e preocedimentos
As intrução Exit permite abandonar uma estrutura de controle. Apesar dessa instrução ser
conveniente, deve-se restringir seu uso uma vez que o excesso de sua utilização pode dificultar a
leitura e a depuração do código.
Para sair diretamente de uma estrutura de repetição For, utiliza-se a instrução Exit For e para sair
diretamente de um repetição Do usa-se a instrução Exit Do.
As instruções Exit Sub e Exit Function podem ser usadas para abandonar procedimento e função.
Exercícios
Elaborar um procedimento para calcular e escrever a média ponderada de três notas de um
aluno e a mensagem de aprovado para média maior ou igual a 6,0 ou, caso contrário, a
mensagem de reprovado.
1.
Dados os valores dos lados de um triângulo, verificar se os lados realmente formam um
triângulo (o valor de cada lado deve ser menor que a soma dos outros dois lados). Se esta
condição for verdadeira, indicar que tipo de triângulo: isósceles, escaleno ou eqüilátero. Emitir
uma mensagem, caso os valores dos lados fornecidos não formarem um triângulo.
2.
Escrever um procedimento para calcular a soma dos N primeiros números naturais. (Soma = 0
+ 1 + 2 + 3 + ... + N). O programa deve ler o valor de N, que equivale ao último número da
série, através da função InputBox e apresentar o resultado em uma caixa de mensagem
utilizando a função 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 função
MsgBox.
4.
Em uma pesquisa realizada junto aos habitantes de uma região foram coletados os seguintes
dados: idade, sexo (M/F) e salário. Fazer um procedimento para calcular e informar:
maior e menor idade do grupo;
média 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 número fornecido pelo usuário,
utilizando as estruturas de repetição For...Next e Do while...Loop. Utilize o método InputBox
para retornar um número que será informado pelo usuário. Mostrar o resultado de acordo com
o exemplo contido na ilustração, 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 exercícios acima foram desenvolvidos numa mesma planilha conforme ilustração
abaixo. As informações na cor vermelha referem-se aos cabeçalhos e as informações em azul
referem-se aos exemplos de dados para os procedimentos. Elas foram digitadas na planilha e,
portanto, não são resultados dos procedimentos.
VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php
7 de 7 08/08/2011 21:23
V i s u a l B a s i c f o r A pp l i c a t i o n s - V BA
Parte III - Vetores e matrizes
Sumário:
Introdução
Vetores
Matrizes bidimensionais
Matrizes fixas e dinâmicas
Exercícios
Introdução
Vetores e matrizes são estruturas de dados homogêneas conhecidas como Arrays, matrizes, variáveis
indexadas, variáveis subscritas ou tabelas em memória, são conjunto de elementos
de mesma natureza. Cada elemento da matriz pode ser distinguido de outros elementos por um ou
mais índices inteiros. As estruturas homogêneas ou arrays são divididas em unidimensionais e
multidimensionais. Geralmente, as estruturas unidimensionais são chamadas de vetores e as
multidimensionais são chamadas de matrizes. Um vetor também pode ser considerado uma matriz,
variando apenas numa dimensão.
Vetores
O vetor ou matriz unidimensional é exatamente uma seqüência linear de elementos armazenados
consecutivamente na memória. São variáveis do mesmo tipo declaradas com o mesmo identificador e
referenciadas por um índice para determinar sua localização dentro da estrutura.
Ilustração de um vetor:
dom seg ter qua qui sex sab
1 2 3 4 5 6 7
<-- diasSem (nome do vetor)
<-- índice
Operações básicas:
Declaração: Dim diasSem (1 To 7) As string
Inicialização: diasSem(1) = "dom": diasSem(2) = "seg": ...
Atribuição: diasSem(4) = "qua"
Escrita: MsgBox diasSem(5)
Exemplos de declaração 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 – contém 11 elementos. O índice inicial de
indexação de um vetor ou a matriz depende da definição da instrução Option Base, na seção de
declaração do módulo. Se o comando Option Base 1 for especificado, todos os índices iniciam em 1,
caso contrário, 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 média aritmética das notas de uma classe com dez alunos,
apresenta a média da turma e as notas que estão acima dessa média.
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 obtém as dez notas, armazena-as no vetor de nome notas e
efetua a soma para no final calcular a média das notas. No loop For Next seguinte é relacionado na
planilha apenas as notas de valor maior que a média apurada.
O exemplo a seguir atribui um valor randômico para os elementos do vetor. O comando Debug.Print
envia a saída para a janela “verificação 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 dimensões. A instrução 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 não for declarada no
nível de módulo a opção Option Base 1. A primeira dimensão da matriz se refere à linha e a segunda,
dimensão à coluna, no primeiro exemplo tem-se uma matriz de 3 linhas por 5 colunas e no segundo, 4
linhas por 6 colunas na ausência do comando Option Base 1.
Para processar matrizes multidimensionais, utiliza-se instruções For...Next aninhadas. O
procedimento, a seguir, preenche cada elemento da matriz bidimensional com base no valor de sua
localização 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 verificação 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 dinâmicas
As matrizes declaradas acima são exemplos de matrizes fixas. A matriz dinâmica é declarada
deixando-se vazios os parênteses como no exemplo que segue:
Dim matDinamica ( ) As Integer
Posteriormente, no procedimento, pode ser especificado o número de elementos através da instrução
ReDim. Segue um exemplo de declaração e redimensionamento de uma matriz dinâmica:
Sub redimatriz()
Dim dinamica () As Integer ' declara uma matriz dinâmica
Dim i As Integer ' declara a variável i (índice)
ReDim dinamica (5) ' faz a alocação de cinco elementos
For i = 1 To 5 ' faz o loop 5 vezes
dinamica (i) = i ' inicializa a matriz
Next i
' A próxima instrução 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 instrução a seguir redimensiona a matriz sem apagar os elementos.
ReDim Preserve dinamica (15) ' redimensiona para 15
End Sub
Exercícios
Fazer um programa para obter dez números inteiros, armazená-los em um vetor e escrevê-los
na ordem inversa de sua leitura.
Para a entrada dos números utilizar a função InputBox e para a saída, a janela de verificação
imediata, através do método 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
média 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 têm
altura acima da média das pessoas pesquisadas. Elaborar um procedimento para armazenar as
alturas e os nomes das pessoas em vetores distintos e exibir a altura média e os nomes das
pessoas com altura maior do que a altura média. Obs.: Encerrar a entrada de dados ao ser
digitado o valor 0 para a altura. Cada vetor pode ter no máximo 20 ocorrências.
3.
Fazer um programa para pesquisar o número listado na coluna G da planilha e retornar o
conteúdo correspondente da coluna H através da função MsgBox. O usuário digitará o número
desejado na caixa de entrada (InputBox). Caso o argumento não seja encontrado, informar esta
condição numa caixa de mensagem.
Criar um botão 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 própria diagonal principal. Mostrar o resultado numa caixa de
mensagem. A matriz deve ser previamente construída 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 através da aplicação do método AutoFit.
(Matriz identidade é uma matriz quadrada em que todos os elementos da diagonal principal são
iguais a 1 e os demais são nulos ou iguais a 0).
6.
(Fecha) Exerc.1 Exerc.2 Exerc.3 Exerc.4 Exerc.5 Exerc.6
Os exemplos dos exercícios acima foram desenvolvidos numa mesma pasta de planilhas conforme
ilustração abaixo. As informações na cor vermelha referem-se aos cabeçalhos e as informações em
azul referem-se aos exemplos de dados para os procedimentos. Elas foram digitadas na planilha e,
portanto, não são 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
V i s u a l B a s i c f o r A pp l i c a t i o n s - V B A
Parte IV - Formulários (UserForm)
Sumário:
Introdução
Projeto
Editor do Visual Basic – VBE
Formulário
Título do formulário
Caixa de texto
Rótulo ou label
Demais caixas de texto e rótulos
Alinhamento
Botões de comando
Tabulação
Códigos dos botões de comando
Teste do projeto
Botão X do formulário
Macro início
Botão de execução
Exercícios
Introdução
Um formulário de usuário é uma caixa de diálogo personalizada que pode ser usada quando as caixas
das funções MsgBox e InputBox não são suficientes. Os objetos em um formulário de usuário do Excel,
como botões e caixas de texto, caixas de combinação e outros são chamados de controles. O
formulário é usado principalmente como uma plataforma na qual são adicionados os controles
necessários para sua funcionalidade.
Projeto
Para o aprendizado básico será criado um projeto exemplo bastante simples que tem como objetivo
apenas efetuar o registro de entrada de peças para suprimentos de uma Loja de materiais elétricos
numa planilha.
Abra o aplicativo Excel e na planilha Plan1 digite o cabeçalho da aplicação como mostrado na figura 1
e salve a planilha na pasta de sua preferência 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 Código para escrever e editar códigos do Visual
Basic e, por padrão, abre, também, a janela do Projeto (VBAProject) que contém os elementos do
projeto como módulos, formulários, classes e outros e podendo abrir, ainda, a Janela 'Propriedades'
utilizada para alterar as propriedades ou características dos objetos. Essas janelas possuem a
particularidade de serem encaixáveis à 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 formulários, módulos, gráficos, códigos e
macros. Assim, para salvar um projeto, basta gravar a planilha inicialmente aberta no Excel.
Formulário
VBA - formulários (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
diálogo personalizada, no Editor do Visual Basic, clique no menu Inserir e, em seguida, na opção
UserForm. Surge na tela um formulário vazio e uma Caixa de ferramentas contendo os controles a
serem utilizados para a elaboração do formulário, figura 2. Caso a Caixa de ferramentas não apareça
automaticamente na tela ao inserir o UserForm, clique em Caixa de ferramentas no menu Inserir.
Figura 2
Título do formulário
Clique no botão Janela 'Propriedades' na Barra de ferramentas
Padrão ou pressione F4 para abrir a janela, Figura 3, a qual
possibilita nomear e inicializar propriedades dos controles do objeto
formulário.
Para mudar o título do formulário, dê um clique na barra de nome
do formulário UserForm1 para selecioná-lo, em seguida, um duplo
clique na propriedade Caption e troque o valor desta propriedade
para Entrada de peças e dê Enter.
A barra de título do formulário mostrará a nova legenda.
Caixa de Texto
Inicialmente, clique no formulário para exibir a Caixa de
ferramentas, caso ela não esteja visível. Na Caixa de ferramentas,
selecione o botão Caixa de texto e clique no formulário na posição
superior do lado direito para criar a primeira caixa de texto de
tamanho padrão 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 formulário para selecioná-lo e exibir a Caixa de ferramentas.
Rótulo ou Label
Para descrever ou nomear a caixa de texto, clique no botão Rótulo na Caixa de ferramentas e depois
clique no formulário à esquerda da caixa de texto, e em seguida, clique duas vezes na propriedade
Caption e modifique o valor para Número da peça e tecle Enter.
Se necessário, redimensione o rótulo, arrastando a alça de seleção para perfazer um tamanho
apropriado.
Clique em uma parte vazia do formulário para selecioná-lo e exibir a Caixa de ferramentas.
VBA - formulários (UserForm) http://bianchi.pro.br/vba/vba_p4.php
2 de 10 08/08/2011 21:24
Demais caixas de Texto e rótulos
Proceda de maneira semelhante para as outras duas caixas
de texto e para os rótulos correspondentes.
Para a propriedade (Name) da caixa texto Descrição digite
txtDescr e para a caixa de texto Quantidade, txtQuant.
Na propriedade Caption dos rótulos digite os valores
Descrição e Quantidade como aparecem nas figuras ao
lado.
Alinhamento
Para fazer o alinhamento das caixas de texto, selelecione as
três caixas, clicando ao lado na parte superior esquerda da
primeira caixa de texto e arraste um retângulo 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 opção Esquerdas. Para alinhar os rótulos,
proceda de modo análogo ao das caixas de texto. A figura 5
mostra o resultado deste procedimento.
Botões de comando
Para permitir a execução de ações, insira no formulário três
botões de comando: um para dar entrada de dados, outro
para apagar o conteúdo das caixas de texto do formulário e
o terceiro para encerrar o processo de entrada de dados.
Para criar o primeiro botão, clique no Botão de comando
na Caixa de ferramentas e em seguida no formulário.
Figura 4
Figura 5
Figura 6
Com o botão selecionado, mude o valor da propriedade (Name) para btnEntra e da propriedade
Caption para Entra e tecle Enter.
Redimencione o botão, clicando nele para selecioná-lo e, em seguida, arraste a alça do lado direito ou
esquerdo do retângulo de seleção até alcançar um tamanho apropriado, Figura 6. Se for necessário,
reposicione o botão no espaço do formulário, arrastando-o de um local para outro.
Clique em uma parte vazia do formulário para exibir a Caixa de ferramentas. Proceda de forma
semelhante para a criação dos dois botões restantes, alterando os valores das propriedades como
segue:
Botão Limpa – propriedade (Name) para btnLimpa e Caption para Limpa;
Botão Fim – propriedade (Name) para btnFim e Caption para Fim.
Redimensione também esses dois botões de modo a obter tamanhos proporcionais, figura 6.
Selecione os três botões para alinhá-los a partir do menu Formatar.
VBA - formulários (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 execução. Clique nos botões para testar seu funcionamento e depois
feche a janela do formulário para voltar ao modo de desenvolvimento.
Tabulação
Pressione repetidamente a tecla TAB e observe que a caixa de seleção se movimenta de controle para
controle, mudando seu foco ou ponto sobre o qual recairá a ação do usuário. Tecle F5 para entrar em
modo de execução e verifique a ordem de sequência do foco ao pressionar a tecla TAB.
A ordem de tabulação é impotante para quem utiliza o
teclado. Se a atual não for a ordem de tabulação lógica
ela pode ser mudada. Clique no plano de fundo do
formulário e a partir do menu Exibir clique na opção
Ordem de tabulação. A caixa de diálogo, Figura 8,
mostra nove controles cuja sequência pode ser alterada,
simplesmente, selecionando o controle desejado e
clicando no botão Mover para cima ou Mover para baixo
para posicioná-lo corretamente.Figura 8
Códigos dos botões de comando
Botão Entra (btnEntra)
Selecione o botão Entra e no menu Exibir escolha Código ou, se preferir um atalho, clique duas vezes
no botão Entra. É aberta uma janela para inserir as instruções de funcionalidade. Segue o código do
procedimento que adiciona registros das entradas de materiais na planilha:
VBA - formulários (UserForm) http://bianchi.pro.br/vba/vba_p4.php
4 de 10 08/08/2011 21:24
Figura 9
Para retornar ao formulário, clique no menu Exibir e depois em Objeto ou, pegando um atalho, clique
com o botão direito do mouse em UserForm1 no painel à esquerda e, no menu de contexto, escolha
Exibir objeto.
Botão Limpa (btnLimpa)
Dê um duplo clique no botão Limpa para abrir a janela de código. Segue o código relativo a esse
botão:
Figura 10
Para retornar ao formulário, clique no menu Exibir e depois em Objeto ou através do atalho, clicando
com o botão direito do mouse em UserForm1 e, em seguida, em Exibir objeto.
Botão Fim (btnFim)
Dê um duplo clique no botão Fim para abrir a janela de código. Segue o código relativo a esse botão:
Figura 11
VBA - formulários (UserForm) http://bianchi.pro.br/vba/vba_p4.php
5 de 10 08/08/2011 21:24
Para retornar ao formulário, clique no menu Exibir e depois em Objeto ou faça-o via atalho.
O fechamento do formulário também pode ser efetivado teclando Esc. Para tanto, selecione o botão
Fim do formulário 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 botão (com forma de cabeça de seta à
direita) na barra de ferramentas padrão ou, ainda, se preferir, clique no menu Executar e depois em
Executar Sub/Userform.
Botão X do formulário
Para que o usuário não encerre o trabalho, usando o botão fechar (X) do formulário, clique em Inserir
e depois em Código ou use o atalho a partir do UserForm1, subordinado à pasta Formulários do
painel à esquerda, e, no final da janela de Código, digite o procedimento conforme figura 12 a seguir:
Figura 12
Macro início
Para iniciar a execução do projeto a partir de um botão ou ponto de acesso contido na planilha de
dados, clique no menu Inserir e depois em Módulo. Na área de código digite as instruções conforme
figura 13.
Figura 13
Botão de execução
Para facilitar o comando de execução pelo usuário, clique na Planilha do Excel e crie um botão 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 botão direito do mouse na Forma e, no menu de contexto, em Atribuir Macro. Na caixa de diálogo
Atribuir macro, selecione o nome da macro inicioMat e clique em OK. Insira o texto na Forma,
clicando com o botão 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 edição, clique num espaço em
branco da planilha.
Salve o projeto. Para finalizar esse estudo, faça agora o teste final, iniciando o processo de execução a
partir do botão Entrada de materiais.
VBA - formulários (UserForm) http://bianchi.pro.br/vba/vba_p4.php
6 de 10 08/08/2011 21:24
Figura 14
Exercícios
Desenvolver um projeto para fazer uma relação de pagamentos, contendo o código do
funcionário, sexo e salário, na planilha Plan1 do Excel (figura 15) e mostrar os totais dos
salários listados.
Para tanto, elabore um formulário para dar entrada dos dados (figura 16) e outro formulário
para apresentar a soma dos salários (figura 17) quando o usuário pressionar o botão Fim.
1.
Figura 15
Figura 16
Figura 17
Segue um exemplo da execução deste projeto-exercício que mostra alguns dados de entrada (figura
VBA - formulários (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 salários no segundo formulário (figura
19).
Figura 18
Figura 19
Download do arquivo do exercício n° 1:
Fazer um programa para converter para o sistema numérico decimal um número escrito em
binário. Formulário deste exercício (figura 20):
2.
Figura 20
Segue um exemplo de execução deste exercício (figura 21):
VBA - formulários (UserForm) http://bianchi.pro.br/vba/vba_p4.php
8 de 10 08/08/2011 21:24
Figura 21
Download do arquivo do exercício n° 2:
Criar um projeto para converter valores numéricos entre os sistemas decimal, binário e
hexadecimal. O formulário para este projeto pode ser definido como segue (figura 22):
3.
Figura 22
Exemplo de uma conversão efetuada através do projeto deste exercício(figura 23):
Figura 23
Download do arquivo do exercício n° 3:
VBA - formulários (UserForm) http://bianchi.pro.br/vba/vba_p4.php
9 de 10 08/08/2011 21:24
VBA - formulários (UserForm) http://bianchi.pro.br/vba/vba_p4.php
10 de 10 08/08/2011 21:24