Вы находитесь на странице: 1из 33

VBA - fundamentos

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

Visual Basic for Applications - VBA


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

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

1 de 11

08/08/2011 21:20

VBA - fundamentos

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

Um procedimento uma unidade de cdigo localizada entre instrues Sub e End Sub ou entre instrues Function e End Function que realiza uma tarefa. Um procedimento desempenha uma tarefa especfica. Um procedimento Function pode retornar valor, ao passo que um procedimento Sub no retorna valor. Para uma viso geral da estrutura de um procedimento Sub, segue um exemplo com breves comentrios que explicam cada linha:

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

Uma varivel que conter nmero inteiro pode ser declarada como Integer ou Long. Exemplos: Dim contador As Integer Private tamMemoria As Long Uma varivel que conter nmeros fracionrios, pode ser declarada com o tipo de dado Single, Double ou Currency. Exemplos: Public lado1 As Single Private rea As Double Dim custoProd As Currency Uma varivel que conter um conjunto de caracteres alfanumricos pode ser declarada com o tipo de dados String. Exemplos: Dim descrProd As String Dim nomeFunc As String Uma varivel que contm valor lgico (verdadeiro ou falso) pode ser declarada com o tipo de dados Boolean. O valor padro False. Exemplo: Dim limExcedido As Boolean Uma varivel que contm valores de data e hora deve ser declarada com o tipo de dados Date. Exemplo: Dim data As Date Uma varivel que contm uma referncia a um objeto do MS Excel pode ser declarada com tipo de dados Object. Para atribuir um objeto a uma varivel-objeto, deve-se usar a instruo Set. Exemplos: Dim plan1 As object Set plan1 = Worksheets(1) Uma varivel Variant permite o armazenamento de qualquer tipo de dado. Exemplo: Dim codMarca 'Variant por padro

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

3 de 11

08/08/2011 21:20

VBA - fundamentos

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

Permanece disponvel a todos os mdulos. Deve ser declarada a nvel de mdulo. Const idade = 29 Disponvel apenas dentro do procedimento onde foi declarada.

Denominao de variveis e constantes


Recomenda-se para a declarao de variveis a utilizao de letras minsculas. Caso o nome seja composto de mais de uma palavra, as demais devem ser iniciadas com letras maisculas ou colocar o smbolo sublinhado entre elas. Exemplos: total ValorMedio soma_valor_real contador segunda_fase contaLinhaRel2

Dica: Utilize nomes significativos na denominao de variveis. D um nome que represente o mais precisamente possvel o propsito desta varivel. Evite nomes sem significado ou abreviaturas no usuais. Exerccios Quais dos seguintes nomes so vlidos para a declarao de variveis e constantes em VBA? a) a123 d) valor+1 g) FINAL j) const m) #9A p) nome do aluno b) 31dezembro e) 2aFase h) j k) melhorPreco n) preo q) _linha1 c) nome_aluno f) valor-bruto i) juros_de_5% l) funcionario_novo o) current r) maiorNro.

os itens de nomes considerados vlidos.

Operador de atribuio
O operador de atribuio representado por = (sinal de igualdade). Atribui varivel a expresso direita do sinal de igualdade. Declarao dim resto as integer Atribuio resto = 120 49

dim salario as double salario = 510.00 dim cidade as string cidade = 'Blumenau'

Aps a execuo dos comandos de atribuio, o local da mmria RAM de endereo denominado resto passa a armazenar o valor 71, o local de endereo de nome salario, 510.00 e o de nome cidade, Blumenau.

Operadores aritmticos
As variveis e constantes numricas podem ser utilizadas em clculos matemticos, utilizando funes matemticas ou aplicando os operadores. A tabela, a seguir, apresenta as operaes, os smbolos respectivos e as sintaxes dos operadores aritmticos: Operao Multiplicao Diviso Adio Subtrao Potenciao Diviso (retorna o resto) Diviso (retorna o quoc. inteiro) Funes matemticas intrnsecas mais utilizadas: Operao 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

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

Operadores lgicos
Utilizados em expresses lgicas compostas ou para inverter o estado lgico de uma condio. Retornam o valor verdadeiro ou falso. Expresso usual e ou no Operao Conjuno Disjuno Negao Operador and or not

Os operadores and e or so binrios e o operador not unrio. Estes operadores avaliam os operandos como lgicos (0 ou 1), sendo o valor lgico 0 considerado falso (false) e o valor lgico 1, verdadeiro (true). O VBA conta ainda com os operadores lgicos eqv (equivalncia), imp (implicao) e xor (excluso lgica) que aqui no sero estudados por serem de pouco uso. As tabela verdade, a seguir, expressa operaes lgicas: conjuno (and) VeV=V VeF=F FeV=F FeF=F V = verdadeiro; F = falso. disjuno (or) V ou V = V V ou F = V F ou V = V F ou F = F negao (not) no V = F no F = V

Precedncia dos operadores


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

Exerccios

(Para obter as respostas posicione o cursor sobre a letra da expresso)

a = (2 + 1) * 6

f = 5 < 8 and 2 > 4

x=0: y=1: z=2

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

Funes de entrada e sada


Permitem obter dados do ambiente exterior para a memria do computador e fornecer dados do computador ao mundo exterior. Funo InputBox (caixa de entrada) Apresenta uma caixa de dilogo para que o usurio possa introduzir o dado de entrada. Ela exibe um aviso em uma caixa de dilogo, aguarda at que o usurio insira um texto ou clique em um boto para retornar o contedo da caixa de dilogo. Sintaxe: InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) onde, prompt title default xpos e ypos helpfile e context argumento obrigatrio e representa a mensagem que ser exibida caixa de dilogo; opcional; texto a ser exibido na barra de ttulo da caixa de dilogo; opcional; dado padro de entrada a ser exibido na caixa de texto; opcionais; especificam as coordenadas para posicionamento da caixa de dilogo na tela; opcionais; identifica o arquivo de ajuda do usurio e o contexto atribudo ao tpico da ajuda. nmero de na

Funo MsgBox (caixa de sada) Mostra uma caixa de dilogo contendo o boto OK e o valor do dado de sada. Sintaxe: MsgBox(prompt[, buttons] [, title] [, helpfile, context]) onde, prompt buttons title helpfile e context argumento obrigatrio; mensagem que ser exibida na caixa de dilogo; opcional; especifica o tipo de boto a ser exibido na caixa de dilogo; opcional; texto a ser exibido na barra de ttulo da caixa de dilogo; opcionais; identifica o arquivo de ajuda do usurio e o nmero de contexto atribudo ao tpico da ajuda.

As palavras destacadas em itlico so os argumentos nomeados da funo. Os argumentos colocados entre colchetes so opcionais. Os argumentos das funes podem ser especificados pela posio e seguem a ordem apresentada na sintaxe sparados por uma vrgula. Para omitir alguns argumentos posicionais, deve-se incluir o delimitador de vrgula correspondente. Para especificar um argumento pelo nome, utilizar o nome do argumento seguido por dois-pontos e um sinal de igualdade (:=) e o valor do argumento. Pode-se especificar os argumentos nomeados em qualquer ordem. Exemplo: Title:="caixa de nomes", Prompt:="Seu nome " & nome Exemplo das funes InputBox e MsgBox com argumentos posicionais:

A instruo Option Explicit fora a declarao explcita de todas as variveis do mdulo e deve

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 convenes de nomenclatura de variveis. A primeira instruo do procedimento, denominado exemplo01, declara a varivel nome de tipo string atravs da instruo Dim. A esta varivel atribudo o nome que ser digitado pelo usurio na caixa de dilogo que aberta pela funo InputBox. A seguir, a funo MsgBox mostrar o contedo da varivel nome na caixa de mensagem. Na funo InputBox, foram codificados o prompt "Qual o seu nome" e o title, opcional, "Entrada de nomes". A funo MsgBox exibe o argumento prompt "Seu nome " e o title "Caixa de nomes", antecedido por uma vrgula, indicando a ausncia do argumento buttons e a varivel nome, escrita aps o prompt, concatenada pelo smbolo ampersand ou e-comercial (&). Resultado da execuo do cdigo acima:

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

Resultado:

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

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

7 de 11

08/08/2011 21:20

VBA - fundamentos

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

Implementao em VBA

Para compilar e executar o programa, basta pressionar a tecla F5 ou clicar no boto verde com formato de cabea de seta direita (Executar Sub/UserForm) na Barra de ferramentas ou a partir do menu Executar. Para ocorrer uma execuo direta de um procedimento ao pressionar F5 ou o boto da Barra de ferramentas, o cursor do mouse deve estar posicionado em qualquer lugar entre as instrues Sub e End Sub do procedimento a ser executado. Segue-se um exemplo de codificao do mesmo problema no mesmo Mdulo1 do projeto Pasta1, considerando como entrada das notas as clulas C1, C2 e C3 da planilha Excel Plan1 e como sadas as clulas A4 e C4 dessa mesma planilha. (A clula A4 conter a expresso: Mdia aritmtica e a C4, o valor da mdia). Para codificar novo procedimento no mesmo mdulo, clique no menu Inserir da janela de cdigo e em Procedimento. Na caixa de dilogo "Adicionar procedimento", digite o nome do procedimento calcMedia2, selecione o tipo Sub e o escopo Pblico. (Procedimento Sub sem especificao de escopo explcito considerado Pblico por padro).

8 de 11

08/08/2011 21:20

VBA - fundamentos

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

A proriedade Range pode ser substituda pela propriedade Cells apresentada no procedimento CalcMedia2 como comentrio. O uso destas propriedades sem um qualificador de objeto representa as clulas da planilha ativa, ou seja, a planilha que se encontra aberta no Excel. Considerando como exemplo apenas a linha da varivel nt1, equivale escrever: nt1 = ActiveSheet.Range("C1").Value ou nt1 = ActiveSheet.Cells(1, 3).Value. Para se referir a uma outra planilha que no a ativa deve ser usado o objeto Worksheets e entre parnteses o nome ou o ndice da planilha requisitada. Exemplo: Worksheets("Plan3").Range("A1").Value = 3.14159. A propriedade Cells especifica a clula da planilha utilizando indices de linha e coluna ou estilo de referncia L1C1, ao passo que a propriedade Range usa letras para identificar as colunas e nmeros para as linhas. Antes de executar o procedimento CalcMedia2, certifique-se de ter preenchido as clulas C1, C2 e C3 da planilha com valores de notas e que essa planilha do Excel permanea ativa. Seguem recortes de exemplos da planilha de dados mostrando as posies antes e depois da execuo do procedimento CalcMedia2: Antes Depois

A seguir apresentado outro modo de obter o mesmo resultado a partir da mesma fonte de dados, mostrada acima, e sem utilizar variveis para auxiliar no processamento:

9 de 11

08/08/2011 21:20

VBA - fundamentos

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

A mdia apurada a partir das clulas da planilha, sem transferir seus valores para variveis e o resultado da mdia atribudo diretamente na clula da linha 4 coluna 3. Os procedimentos podem ser salvos a partir da planilha do Excel como se procede para o salvamento de qualquer planilha de uso habitual, podendo fechar a janela do editor VBA a qualquer momendo que nada perdido enquanto a planilha correspondente estiver aberta. Se a janela do editor for fechada, para abri-la novamente basta teclar Alt+F11. Caso a codificao dos procedimentos no sejam exibidos, clique em Mdulo1, no painel Projeto esquerda, com o boto direito do mouse e, no menu de contexto, em Exibir cdigo.

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

10 de 11

08/08/2011 21:20

VBA - fundamentos

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

objeto grfico ou boto de acesso designado Idade.

(Fecha) Exerc.1 Exerc.2 Exerc.3 Exerc.4 Exerc.5 Exerc.6 Planilha

Ponto de acesso
Um procedimento ou uma macro pode ser executada a partir de vrios meios como atravs de uma tecla de atalho, de um boto na barra de ferramentas ou de um objeto grfico, entre outros. Pode-se executar um procedimento a partir do corpo da planilha Excel onde se encontram os dados de entrada ou onde ser exibido o resultado. Para criar um boto ou ponto de acesso, clique em inserir e depois em Formas, selecione uma Forma e desenhe-a arrastando o ponteiro do mouse no corpo da planilha. Em seguida, clique com o boto direito do mouse na Forma ou ponto de acesso criado e, no menu de contexto, em Atribuir Macro. Na caixa de dilogo "Atribuir macro", selecione o nome da macro ou procedimento e clique em OK. A seguir, apresentada a planilha dos exerccios com um exemplo de boto ou ponto de acesso referente ao procedimento exerc6_idade:

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 Sumrio:
Introduo Estruturas de seleo Seleo simples Seleo composta Seleo composta encadeada Seleo de miltipla escolha Estruturas de repetio Repetio com teste no incio Repetio com teste no final Repetio com varivel de controle Repetio com objetos de coleo Saindo de loops e procedimentos Exerccios

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

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

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

1 de 7

08/08/2011 21:23

VBA - estruturas de controle

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

de linha mltipla. O comando de linha nica no usa a instruo End If. A instruo If desse exemplo tambm poderia ter sido codificada assim: If (soma > 10) then MsgBox "Soma maior que dez"

Seleo composta
(If Then Else) testa uma condio nica e executa um entre dois blocos de instrues. Sintaxe: If condio Then Instrues Else Instrues End If Exemplo: O procedimento a seguir efetua o clculo da mdia aritmtica das notas de trs provas de uma aluno e avalia a situao quanto aprovao. Sub mediaProvas() Dim nt1 As single, nt2 As Single Dim nt3 As Single, media As Single nt1 = InputBox("Informe a 1a. nota") nt2 = InputBox("Informe a 2a. nota") nt3 = InputBox("Informe a 3a. nota") media = (nt1 + nt2 + nt3) / 3 if (media >= 6.0) then MsgBox "Aprovado" else MsgBox "Reprovado" end if End Sub

Seleo composta encadeada


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

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

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 instruo ElseIf testar a mesma expresso com valores diferentes mais prtico utilizar a seleo de mltipla escolha como no exemplo da prxima seo.

Seleo de mltipla escolha


(Select Case) testa uma condio nica e executa um dos vrios blocos de instrues. Sintaxe: Select Case var(1) Case expr(2): instrues ... Case Else: instrues End Select
(1) (2)

var = varivel expr = expresso numrica ou de sequncia de caracteres.

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

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

Repetio com teste no incio


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

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

Repetio com teste no final


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

MsgBox "Valor em binrio: " & bin End Sub O usurio informa um nmero decimal na caixa de entrada, caso no queira o valor default 19 sugerido e o sistema o converte para o binrio correspondente. A execuo do loop tem lugar enquanto a varivel dec for maior que zero. Do ... Loop Until testa uma condio no final do loop e continua a execuo enquanto a condio for falsa (False). Sintaxe: Do Instrues Loop Until condio Exemplo: O procedimento abaixo calcula e mostra o fatorial de um nmero fornecido pelo usurio. Sub fatorial() Dim num As Integer, fat As Integer, i As Integer num = InputBox("Informe um num.", , 5) fat = 1: i = 1 Do fat = fat * i i=i+1 Loop Until i > num MsgBox "Fatorial de " & num & ": " & fat End Sub A execuo prossegue at que a varivel ndice i for maior do que a varivel num, contedo informado na caixa de entrada.

Repetio com varivel de controle


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

Repetio com objetos de coleo


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

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 variveis intervalo e c so declaradas como objeto Range. A instruo Set atribui varivel intervalo referncias do objeto Range da primeira planilha. O loop da instruo For Each escreve em cada elemento da coleo c que se refere ao intervalo de clulas A1:D10 o valor 100 se o contedo do elemento da coleo for menor que 1.

Saindo de loops e preocedimentos


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

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

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

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 Sumrio:
Introduo Vetores Matrizes bidimensionais Matrizes fixas e dinmicas Exerccios

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

Vetores
O vetor ou matriz unidimensional exatamente uma seqncia linear de elementos armazenados consecutivamente na memria. So variveis do mesmo tipo declaradas com o mesmo identificador e referenciadas por um ndice para determinar sua localizao dentro da estrutura. Ilustrao de um vetor: dom 1 Operaes bsicas: Declarao: Inicializao: Atribuio: 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 declarao de vetores:

No primeiro exemplo acima o ndice da matriz vai de 0 a 10 contm 11 elementos. O ndice inicial de indexao de um vetor ou a matriz depende da definio da instruo Option Base, na seo de declarao do mdulo. Se o comando Option Base 1 for especificado, todos os ndices iniciam em 1, caso contrrio, em 0. No segundo e terceiro exemplos os ndices variam de 1 a 15 e de 10 a 30, respectivamente. Exemplo: O procedimento a seguir calcula a mdia aritmtica das notas de uma classe com dez alunos, apresenta a mdia da turma e as notas que esto acima dessa mdia.

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 obtm as dez notas, armazena-as no vetor de nome notas e efetua a soma para no final calcular a mdia das notas. No loop For Next seguinte relacionado na planilha apenas as notas de valor maior que a mdia apurada. O exemplo a seguir atribui um valor randmico para os elementos do vetor. O comando Debug.Print envia a sada para a janela verificao imediata que pode ser aberta a partir do menu Exibir do programa editor Visual Basic:

Matrizes bidimensionais
No Visual Basic, pode-se declarar matrizes com at 60 dimenses. A instruo a seguir declara uma matriz bidimensional de 3 por 5: 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 no for declarada no nvel de mdulo a opo Option Base 1. A primeira dimenso da matriz se refere linha e a segunda, dimenso coluna, no primeiro exemplo tem-se uma matriz de 3 linhas por 5 colunas e no segundo, 4 linhas por 6 colunas na ausncia do comando Option Base 1. Para processar matrizes multidimensionais, utiliza-se instrues For...Next aninhadas. O procedimento, a seguir, preenche cada elemento da matriz bidimensional com base no valor de sua localizao dentro da matriz: Sub exemplo3_matriz() Dim i As Integer, j As Integer Dim matriz(3, 5) As Single

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 verificao imediata. For i = 1 To 3 For j = 1 To 5 matriz(i, j) = i * j Debug.Print matriz(i, j) Next j Debug.Print Next i End Sub ' imprime branco ao completar uma linha.

Matrizes fixas e dinmicas


As matrizes declaradas acima so exemplos de matrizes fixas. A matriz dinmica declarada deixando-se vazios os parnteses como no exemplo que segue: Dim matDinamica ( ) As Integer Posteriormente, no procedimento, pode ser especificado o nmero de elementos atravs da instruo ReDim. Segue um exemplo de declarao e redimensionamento de uma matriz dinmica: Sub redimatriz() Dim dinamica () As Integer Dim i As Integer ReDim dinamica (5) For i = 1 To 5 dinamica (i) = i Next i ' A prxima instruo redimensiona a matriz e apaga os elementos. ReDim dinamica (10) For i = 1 To 10 dinamica (i) = i Next i ' A instruo 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 dinmica ' declara a varivel i (ndice) ' faz a alocao de cinco elementos ' faz o loop 5 vezes ' inicializa a matriz

Exerccios
1. Fazer um programa para obter dez nmeros inteiros, armazen-los em um vetor e escrev-los na ordem inversa de sua leitura. Para a entrada dos nmeros utilizar a funo InputBox e para a sada, a janela de verificao imediata, atravs do mtodo Print do objeto Debug. 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 mdia 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 tm altura acima da mdia das pessoas pesquisadas. Elaborar um procedimento para armazenar as alturas e os nomes das pessoas em vetores distintos e exibir a altura mdia e os nomes das pessoas com altura maior do que a altura mdia. Obs.: Encerrar a entrada de dados ao ser digitado o valor 0 para a altura. Cada vetor pode ter no mximo 20 ocorrncias. 4. Fazer um programa para pesquisar o nmero listado na coluna G da planilha e retornar o contedo correspondente da coluna H atravs da funo MsgBox. O usurio digitar o nmero desejado na caixa de entrada (InputBox). Caso o argumento no seja encontrado, informar esta condio numa caixa de mensagem. Criar um boto na planilha para executar o programa.

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 prpria diagonal principal. Mostrar o resultado numa caixa de mensagem. A matriz deve ser previamente construda na planilha de nome "Plan2". (Diagonal principal formada pelos elementos A[ij], tais que i = j. Correspondem aos elementos da linha que une o canto superior esquerdo ao canto inferior direito). 6. Gerar uma matriz identidade de ordem 5, apresentando o resultado em "Plan2", conforme planilha abaixo. Ajustar a largura das colunas atravs da aplicao do mtodo AutoFit. (Matriz identidade uma matriz quadrada em que todos os elementos da diagonal principal so iguais a 1 e os demais so nulos ou iguais a 0).

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

Planilha Plan2:

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 - formulrios (UserForm)

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

Visual Basic for Applications - VBA


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

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

Projeto
Para o aprendizado bsico ser criado um projeto exemplo bastante simples que tem como objetivo apenas efetuar o registro de entrada de peas para suprimentos de uma Loja de materiais eltricos numa planilha. Abra o aplicativo Excel e na planilha Plan1 digite o cabealho da aplicao como mostrado na figura 1 e salve a planilha na pasta de sua preferncia com o nome Materiais:

Figura 1

Editor do Visual Basic VBE


O VBE a interface de desenvolvimento do VBA e pode ser acessado a partir da planilha Excel, pressionando as teclas Alt+F11. O VBE abre a janela Cdigo para escrever e editar cdigos do Visual Basic e, por padro, abre, tambm, a janela do Projeto (VBAProject) que contm os elementos do projeto como mdulos, formulrios, classes e outros e podendo abrir, ainda, a Janela 'Propriedades' utilizada para alterar as propriedades ou caractersticas dos objetos. Essas janelas possuem a particularidade de serem encaixveis janela do Editor do Visual Basic. conveniente dizer que a planilha ou o arquivo do Excel tratado como pasta uma vez que o VBA considera cada planilha aberta um projeto, podendo encerrar formulrios, mdulos, grficos, cdigos e macros. Assim, para salvar um projeto, basta gravar a planilha inicialmente aberta no Excel.

Formulrio

1 de 10

08/08/2011 21:24

VBA - formulrios (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 dilogo personalizada, no Editor do Visual Basic, clique no menu Inserir e, em seguida, na opo UserForm. Surge na tela um formulrio vazio e uma Caixa de ferramentas contendo os controles a serem utilizados para a elaborao do formulrio, figura 2. Caso a Caixa de ferramentas no aparea automaticamente na tela ao inserir o UserForm, clique em Caixa de ferramentas no menu Inserir.

Figura 2

Ttulo do formulrio
Clique no boto Janela 'Propriedades' na Barra de ferramentas Padro ou pressione F4 para abrir a janela, Figura 3, a qual possibilita nomear e inicializar propriedades dos controles do objeto formulrio. Para mudar o ttulo do formulrio, d um clique na barra de nome do formulrio UserForm1 para selecion-lo, em seguida, um duplo clique na propriedade Caption e troque o valor desta propriedade para Entrada de peas e d Enter. A barra de ttulo do formulrio mostrar a nova legenda.

Caixa de Texto
Inicialmente, clique no formulrio para exibir a Caixa de ferramentas, caso ela no esteja visvel. Na Caixa de ferramentas, selecione o boto Caixa de texto e clique no formulrio na posio superior do lado direito para criar a primeira caixa de texto de tamanho padro deste projeto como mostrado na figura 4. Figura 3

Com a caixa de texto selecionada d um duplo clique na propriedade (Name) da Janela 'Propriedades' e mude o valor para txtPeca e d Enter. Clique em uma parte vazia do formulrio para selecion-lo e exibir a Caixa de ferramentas.

Rtulo ou Label
Para descrever ou nomear a caixa de texto, clique no boto Rtulo na Caixa de ferramentas e depois clique no formulrio esquerda da caixa de texto, e em seguida, clique duas vezes na propriedade Caption e modifique o valor para Nmero da pea e tecle Enter. Se necessrio, redimensione o rtulo, arrastando a ala de seleo para perfazer um tamanho apropriado. Clique em uma parte vazia do formulrio para selecion-lo e exibir a Caixa de ferramentas.

2 de 10

08/08/2011 21:24

VBA - formulrios (UserForm)

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

Demais caixas de Texto e rtulos


Proceda de maneira semelhante para as outras duas caixas de texto e para os rtulos correspondentes. Para a propriedade (Name) da caixa texto Descrio digite txtDescr e para a caixa de texto Quantidade, txtQuant. Na propriedade Caption dos rtulos digite os valores Descrio e Quantidade como aparecem nas figuras ao lado. Figura 4

Alinhamento
Para fazer o alinhamento das caixas de texto, selelecione as trs caixas, clicando ao lado na parte superior esquerda da primeira caixa de texto e arraste um retngulo at a parte inferior direita da ltima caixa de texto ou, se preferir, mantenha pressionada a tecla Ctrl e clique em cada uma das caixas de texto, figura 4. A partir do menu Formatar, clique em Alinhar e, em seguida, na opo Esquerdas. Para alinhar os rtulos, proceda de modo anlogo ao das caixas de texto. A figura 5 mostra o resultado deste procedimento. Figura 5

Botes de comando
Para permitir a execuo de aes, insira no formulrio trs botes de comando: um para dar entrada de dados, outro para apagar o contedo das caixas de texto do formulrio e o terceiro para encerrar o processo de entrada de dados. Para criar o primeiro boto, clique no Boto de comando na Caixa de ferramentas e em seguida no formulrio. Figura 6

Com o boto selecionado, mude o valor da propriedade (Name) para btnEntra e da propriedade Caption para Entra e tecle Enter. Redimencione o boto, clicando nele para selecion-lo e, em seguida, arraste a ala do lado direito ou esquerdo do retngulo de seleo at alcanar um tamanho apropriado, Figura 6. Se for necessrio, reposicione o boto no espao do formulrio, arrastando-o de um local para outro. Clique em uma parte vazia do formulrio para exibir a Caixa de ferramentas. Proceda de forma semelhante para a criao dos dois botes restantes, alterando os valores das propriedades como segue: Boto Limpa propriedade (Name) para btnLimpa e Caption para Limpa; Boto Fim propriedade (Name) para btnFim e Caption para Fim. Redimensione tambm esses dois botes de modo a obter tamanhos proporcionais, figura 6. Selecione os trs botes para alinh-los a partir do menu Formatar.

3 de 10

08/08/2011 21:24

VBA - formulrios (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 execuo. Clique nos botes para testar seu funcionamento e depois feche a janela do formulrio para voltar ao modo de desenvolvimento.

Tabulao
Pressione repetidamente a tecla TAB e observe que a caixa de seleo se movimenta de controle para controle, mudando seu foco ou ponto sobre o qual recair a ao do usurio. Tecle F5 para entrar em modo de execuo e verifique a ordem de sequncia do foco ao pressionar a tecla TAB. A ordem de tabulao impotante para quem utiliza o teclado. Se a atual no for a ordem de tabulao lgica ela pode ser mudada. Clique no plano de fundo do formulrio e a partir do menu Exibir clique na opo Ordem de tabulao. A caixa de dilogo, Figura 8, mostra nove controles cuja sequncia pode ser alterada, simplesmente, selecionando o controle desejado e clicando no boto Mover para cima ou Mover para baixo para posicion-lo corretamente. Figura 8

Cdigos dos botes de comando


Boto Entra (btnEntra) Selecione o boto Entra e no menu Exibir escolha Cdigo ou, se preferir um atalho, clique duas vezes no boto Entra. aberta uma janela para inserir as instrues de funcionalidade. Segue o cdigo do procedimento que adiciona registros das entradas de materiais na planilha:

4 de 10

08/08/2011 21:24

VBA - formulrios (UserForm)

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

Figura 9 Para retornar ao formulrio, clique no menu Exibir e depois em Objeto ou, pegando um atalho, clique com o boto direito do mouse em UserForm1 no painel esquerda e, no menu de contexto, escolha Exibir objeto. Boto Limpa (btnLimpa) D um duplo clique no boto Limpa para abrir a janela de cdigo. Segue o cdigo relativo a esse boto:

Figura 10 Para retornar ao formulrio, clique no menu Exibir e depois em Objeto ou atravs do atalho, clicando com o boto direito do mouse em UserForm1 e, em seguida, em Exibir objeto. Boto Fim (btnFim) D um duplo clique no boto Fim para abrir a janela de cdigo. Segue o cdigo relativo a esse boto:

Figura 11

5 de 10

08/08/2011 21:24

VBA - formulrios (UserForm)

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

Para retornar ao formulrio, clique no menu Exibir e depois em Objeto ou faa-o via atalho. O fechamento do formulrio tambm pode ser efetivado teclando Esc. Para tanto, selecione o boto Fim do formulrio e na Janela 'Propriedades' mude o valor da propriedade Cancel para True.

Teste do projeto
Para fazer o teste do projeto, pressione a tecla F5 ou clique no boto (com forma de cabea de seta direita) na barra de ferramentas padro ou, ainda, se preferir, clique no menu Executar e depois em Executar Sub/Userform.

Boto X do formulrio
Para que o usurio no encerre o trabalho, usando o boto fechar (X) do formulrio, clique em Inserir e depois em Cdigo ou use o atalho a partir do UserForm1, subordinado pasta Formulrios do painel esquerda, e, no final da janela de Cdigo, digite o procedimento conforme figura 12 a seguir:

Figura 12

Macro incio
Para iniciar a execuo do projeto a partir de um boto ou ponto de acesso contido na planilha de dados, clique no menu Inserir e depois em Mdulo. Na rea de cdigo digite as instrues conforme figura 13.

Figura 13

Boto de execuo
Para facilitar o comando de execuo pelo usurio, clique na Planilha do Excel e crie um boto ou ponto de acesso, conforme figura 14. Para tanto, clique em Inserir e depois em Formas, selecione uma Forma e desenhe-a arrastando o ponteiro do mouse no corpo da planilha. Em seguida, clique com o boto direito do mouse na Forma e, no menu de contexto, em Atribuir Macro. Na caixa de dilogo Atribuir macro, selecione o nome da macro inicioMat e clique em OK. Insira o texto na Forma, clicando com o boto direito do mouse na borda da forma e, no menu de contexto, clique em Editar Texto. Digite o texto Entrada de materiais e para sair do modo de edio, clique num espao em branco da planilha. Salve o projeto. Para finalizar esse estudo, faa agora o teste final, iniciando o processo de execuo a partir do boto Entrada de materiais.

6 de 10

08/08/2011 21:24

VBA - formulrios (UserForm)

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

Figura 14

Exerccios
1. Desenvolver um projeto para fazer uma relao de pagamentos, contendo o cdigo do funcionrio, sexo e salrio, na planilha Plan1 do Excel (figura 15) e mostrar os totais dos salrios listados. Para tanto, elabore um formulrio para dar entrada dos dados (figura 16) e outro formulrio para apresentar a soma dos salrios (figura 17) quando o usurio pressionar o boto Fim.

Figura 15

Figura 16

Figura 17 Segue um exemplo da execuo deste projeto-exerccio que mostra alguns dados de entrada (figura

7 de 10

08/08/2011 21:24

VBA - formulrios (UserForm)

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

18) e o resumo final do processamento contendo os totais dos salrios no segundo formulrio (figura 19).

Figura 18

Figura 19 Download do arquivo do exerccio n 1: 2. Fazer um programa para converter para o sistema numrico decimal um nmero escrito em binrio. Formulrio deste exerccio (figura 20):

Figura 20 Segue um exemplo de execuo deste exerccio (figura 21):

8 de 10

08/08/2011 21:24

VBA - formulrios (UserForm)

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

Figura 21 Download do arquivo do exerccio n 2: 3. Criar um projeto para converter valores numricos entre os sistemas decimal, binrio e hexadecimal. O formulrio para este projeto pode ser definido como segue (figura 22):

Figura 22 Exemplo de uma converso efetuada atravs do projeto deste exerccio(figura 23):

Figura 23 Download do arquivo do exerccio n 3:

9 de 10

08/08/2011 21:24

VBA - formulrios (UserForm)

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

10 de 10

08/08/2011 21:24

Вам также может понравиться