VBA - fundamentos

http://bianchi.pro.br/vba/vba_p1.php

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

1 de 11

08/08/2011 21:20

VBA - fundamentos

http://bianchi.pro.br/vba/vba_p1.php

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 Public 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, (no procedimento) (no módulo) Dim ou Private (no módulo) Dim – O valor da variável é retido apenas enquanto o procedimento no qual ela foi declarada estiver em

2 de 11

08/08/2011 21:20

VBA - fundamentos

http://bianchi.pro.br/vba/vba_p1.php

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 Integer Long Single Double Currency String Boolean Date Object Variant Tamanho 2 bytes 4 bytes 4 bytes 8 bytes 8 bytes 1 byte por caractere 2 bytes 8 bytes 4 bytes 16 bytes + 1 byte para cada caractere -32768 a 32767 -2.147.483.648 a 2.147.483.467 -3,4 x 1038 a 3,4 x 1038 1,7 x 10308 a 1,7 x 10308 -9223372036854,5808 a 9223372036854,5807 0 a aproximadamente 65.500 Verdadeiro ou Falso 01/01/100 a 31/12/9999 Qualquer referência a objeto Válido para qualquer tipo de dados. Intervalo

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

3 de 11

08/08/2011 21:20

VBA - fundamentos

http://bianchi.pro.br/vba/vba_p1.php

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 ValorMedio soma_valor_real contador segunda_fase 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 d) valor+1 g) FINAL j) const m) #9A p) nome do aluno b) 31dezembro e) 2aFase h) j k) melhorPreco n) preço q) _linha1 c) nome_aluno f) valor-bruto i) juros_de_5% l) funcionario_novo o) current 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 dim resto as integer Atribuição 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 Multiplicação Divisão Adição Subtração Potenciação Divisão (retorna o resto) Divisão (retorna o quoc. inteiro) Funções matemáticas intrínsecas mais utilizadas: Operação Raiz quadrada Parte inteira Valor absoluto Exemplo sqr(9.0) int(7.8) abs(-5) Resultado 3 7 5 Operador * / + – ^ Mod \ Sintaxe r = n1 * n2 r = n1 / n2 r = n1 + n2 r = n1 – n2 r=b^e r = n1 Mod n2 r = n1 \ n2

4 de 11

08/08/2011 21:20

VBA - fundamentos

http://bianchi.pro.br/vba/vba_p1.php

Número aleatório Seno Co-seno Tangente

rnd(12) sin(3.7) cos(4.1) tan(6.8)

? 0,53 0,57 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 Igual a Maior que Menor que Diferente de Maior ou igual a Menor ou igual a Operador = > < <> >= <=

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 e ou não Operação Conjunção Disjunção Negação Operador and or 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) VeV=V VeF=F FeV=F FeF=F V = verdadeiro; F = falso. disjunção (or) V ou V = V V ou F = V F ou V = V F ou F = F negação (not) não V = F não F = V

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

5 de 11

08/08/2011 21:20

VBA - fundamentos

http://bianchi.pro.br/vba/vba_p1.php

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 title default xpos e ypos helpfile e context argumento obrigatório e representa a mensagem que será exibida caixa de diálogo; opcional; texto a ser exibido na barra de título da caixa de diálogo; opcional; dado padrão de entrada a ser exibido na caixa de texto; opcionais; especificam as coordenadas para posicionamento da caixa de diálogo na tela; opcionais; identifica o arquivo de ajuda do usuário e o contexto atribuído ao tópico da ajuda. número de na

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 buttons title helpfile e context argumento obrigatório; mensagem que será exibida na caixa de diálogo; opcional; especifica o tipo de botão a ser exibido na caixa de diálogo; opcional; texto a ser exibido na barra de título da caixa de diálogo; 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

6 de 11

08/08/2011 21:20

VBA - fundamentos

http://bianchi.pro.br/vba/vba_p1.php

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"

Resultado:

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.

7 de 11

08/08/2011 21:20

VBA - fundamentos

http://bianchi.pro.br/vba/vba_p1.php

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).

8 de 11

08/08/2011 21:20

VBA - fundamentos

http://bianchi.pro.br/vba/vba_p1.php

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:

9 de 11

08/08/2011 21:20

VBA - fundamentos

http://bianchi.pro.br/vba/vba_p1.php

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: 1. 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). 2. 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. 3. 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). 4. 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". 5. 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. 6. 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. 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

10 de 11

08/08/2011 21:20

VBA - fundamentos

http://bianchi.pro.br/vba/vba_p1.php

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:

11 de 11

08/08/2011 21:20

VBA - estruturas de controle

http://bianchi.pro.br/vba/vba_p2.php

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

1 de 7

08/08/2011 21:23

VBA - estruturas de controle

http://bianchi.pro.br/vba/vba_p2.php

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

2 de 7

08/08/2011 21:23

VBA - estruturas de controle

http://bianchi.pro.br/vba/vba_p2.php

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) (2)

var = variável 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

3 de 7

08/08/2011 21:23

VBA - estruturas de controle

http://bianchi.pro.br/vba/vba_p2.php

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 sResto = CStr(resto) bin = sResto + bin ' retorna o resto da divisão ' converte o resto para o tipo string ' concatena o resto com o conteúdo de bin

4 de 7

08/08/2011 21:23

VBA - estruturas de controle

http://bianchi.pro.br/vba/vba_p2.php

dec = dec \ 2 Loop While dec > 0

' retorna o quociente inteiro da divisão

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.

5 de 7

08/08/2011 21:23

VBA - estruturas de controle

http://bianchi.pro.br/vba/vba_p2.php

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
1. 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. 2. 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. 3. 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. 4. 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. 5. 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. 6. 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 de 7

08/08/2011 21:23

VBA - estruturas de controle

http://bianchi.pro.br/vba/vba_p2.php

(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.

7 de 7

08/08/2011 21:23

VBA - vetores e matrizes

http://bianchi.pro.br/vba/vba_p3.php

Visual Basic for Applications - VBA
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 1 Operações básicas: Declaração: Inicialização: Atribuição: Escrita: 1 2 3 Dim diasSem (1 To 7) As string diasSem(1) = "dom": diasSem(2) = "seg": ... diasSem(4) = "qua" MsgBox diasSem(5) Dim valor(10) As integer Dim soma (1 To 15) As integer Dim nome (10 To 30) As string seg 2 ter 3 qua 4 qui 5 sex 6 sab 7 <-- diasSem (nome do vetor) <-- índice

Exemplos de declaração de vetores:

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.

1 de 5

08/08/2011 21:24

VBA - vetores e matrizes

http://bianchi.pro.br/vba/vba_p3.php

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: Dim matriz (1 To 3, 1 To 5) As Single ou 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

2 de 5

08/08/2011 21:24

VBA - vetores e matrizes

http://bianchi.pro.br/vba/vba_p3.php

' 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 Next i End Sub ' imprime branco ao completar uma linha.

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 Dim i As Integer ReDim dinamica (5) For i = 1 To 5 dinamica (i) = i Next i ' A próxima instrução redimensiona a matriz e apaga os elementos. ReDim dinamica (10) For i = 1 To 10 dinamica (i) = i Next i ' A instrução a seguir redimensiona a matriz sem apagar os elementos. ReDim Preserve dinamica (15) ' redimensiona para 15 End Sub ' redimensiona para 10 ' faz o loop 10 vezes ' inicializa a matriz ' declara uma matriz dinâmica ' declara a variável i (índice) ' faz a alocação de cinco elementos ' faz o loop 5 vezes ' inicializa a matriz

Exercícios
1. 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. 2. 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. 3. 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. 4. 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.

3 de 5

08/08/2011 21:24

VBA - vetores e matrizes

http://bianchi.pro.br/vba/vba_p3.php

5. 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). 6. 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).

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

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

VBA - formulários (UserForm)

http://bianchi.pro.br/vba/vba_p4.php

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

1 de 10

08/08/2011 21:24

VBA - formulários (UserForm)

http://bianchi.pro.br/vba/vba_p4.php

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.

2 de 10

08/08/2011 21:24

VBA - formulários (UserForm)

http://bianchi.pro.br/vba/vba_p4.php

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. Figura 4

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. Figura 5

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

3 de 10

08/08/2011 21:24

VBA - formulários (UserForm)

http://bianchi.pro.br/vba/vba_p4.php

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:

4 de 10

08/08/2011 21:24

VBA - formulários (UserForm)

http://bianchi.pro.br/vba/vba_p4.php

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

5 de 10

08/08/2011 21:24

VBA - formulários (UserForm)

http://bianchi.pro.br/vba/vba_p4.php

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.

6 de 10

08/08/2011 21:24

VBA - formulários (UserForm)

http://bianchi.pro.br/vba/vba_p4.php

Figura 14

Exercícios
1. 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.

Figura 15

Figura 16

Figura 17 Segue um exemplo da execução deste projeto-exercício que mostra alguns dados de entrada (figura

7 de 10

08/08/2011 21:24

VBA - formulários (UserForm)

http://bianchi.pro.br/vba/vba_p4.php

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: 2. 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):

Figura 20 Segue um exemplo de execução deste exercício (figura 21):

8 de 10

08/08/2011 21:24

VBA - formulários (UserForm)

http://bianchi.pro.br/vba/vba_p4.php

Figura 21 Download do arquivo do exercício n° 2: 3. 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):

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:

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

Sign up to vote on this title
UsefulNot useful