Ótimo curso de vba excel

33
Visual Basic for Applications - VBA 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

Upload: renatoword

Post on 25-Jul-2015

374 views

Category:

Documents


3 download

DESCRIPTION

Bem complexo.

TRANSCRIPT

Page 1: Ótimo Curso de VBA Excel

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

Page 2: Ótimo Curso de VBA Excel

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

Page 3: Ótimo Curso de VBA Excel

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

Page 4: Ótimo Curso de VBA Excel

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

Page 5: Ótimo Curso de VBA Excel

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

Page 6: Ótimo Curso de VBA Excel

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

Page 7: Ótimo Curso de VBA Excel

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

Page 8: Ótimo Curso de VBA Excel

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

Page 9: Ótimo Curso de VBA Excel

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

Page 10: Ótimo Curso de VBA Excel

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

Page 11: Ótimo Curso de VBA Excel

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

Page 12: Ótimo Curso de VBA Excel

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

Page 13: Ótimo Curso de VBA Excel

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

Page 14: Ótimo Curso de VBA Excel

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

Page 15: Ótimo Curso de VBA Excel

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

Page 16: Ótimo Curso de VBA Excel

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

Page 17: Ótimo Curso de VBA Excel

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

Page 18: Ótimo Curso de VBA Excel

(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

Page 19: Ótimo Curso de VBA Excel

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

Page 20: Ótimo Curso de VBA Excel

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

Page 21: Ótimo Curso de VBA Excel

' 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

Page 22: Ótimo Curso de VBA Excel

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

Page 23: Ótimo Curso de VBA Excel

VBA - vetores e matrizes http://bianchi.pro.br/vba/vba_p3.php

5 de 5 08/08/2011 21:24

Page 24: Ótimo Curso de VBA Excel

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

Page 25: Ótimo Curso de VBA Excel

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

Page 26: Ótimo Curso de VBA Excel

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

Page 27: Ótimo Curso de VBA Excel

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

Page 28: Ótimo Curso de VBA Excel

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

Page 29: Ótimo Curso de VBA Excel

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

Page 30: Ótimo Curso de VBA Excel

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

Page 31: Ótimo Curso de VBA Excel

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

Page 32: Ótimo Curso de VBA Excel

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

Page 33: Ótimo Curso de VBA Excel

VBA - formulários (UserForm) http://bianchi.pro.br/vba/vba_p4.php

10 de 10 08/08/2011 21:24