129860405 Otimo Curso de VBA Excel

Embed Size (px)

Citation preview

  • V i s u a l B a s i c f o r A p p l i c a t i o n s - V BA

    Parte I - Fundamentos

    Sumrio:

    Introduo

    Declarao de variveis

    Tipos de dados

    Constantes

    Denominao de variveis e

    constantes

    Operador de atribuio

    Operadores aritmticos

    Operadores relacionais

    Operadores lgicos

    Precedncia dos operadores

    Exerccios

    Funes de entrada e sada

    Comentrios

    Codificao de procedimentos

    Exerccios

    Ponto de acesso

    Introduo

    A verso Visual Basic para Aplicativos um ambiente completo de desenvolvimento, consistente com a

    verso de plataforma nica do Visual Basic e compartilhada por todos os aplicativos do Microsoft Office.

    O Visual Basic interpreta um conjunto especial de comandos denominado biblioteca de objetos do Excel.

    O Visual Basic que vem com o Excel no a nica linguagem que poder comunicar-se com a biblioteca

    de objetos. Qualquer linguagem que oferea suporte automao poder controlar o Excel.

    Alguns componentes essenciais da linguagem VBA para Excel so, a seguir, destacados e conceituados:

    Objetos

    Um objeto um tipo especial de varivel que contm dados e cdigos e representa um elemento

    especfico no Excel. O Visual Basic suporta um conjunto de objetos que correspondem diretamente aos

    elementos do Microsoft Excel.

    Por exemplo, o objeto Workbook representa uma pasta de trabalho, o objeto Worksheet representa

    uma planilha e o objeto Range representa um intervalo de clulas.

    Uma pasta de trabalho, no Microsoft Excel, corresponde a um arquivo que pode conter diversas

    planilhas e folhas de grficos ou planilhas de grficos.

    Propriedades e mtodos

    Para realizar uma tarefa o Visual Basic retorna um objeto que representa o elemento apropriado do

    Excel e depois o manipula usando as propriedades e mtodos daquele objeto.

    As propriedades so caractersticas ou atributos de um objeto e os mtodos so aes que os objetos

    podem executar.

    Mdulos

    O cdigo dentro de um mdulo organizado em procedimentos. Um mdulo um conjunto de

    procedimentos que realiza tarefas especficas.

    Por exemplo, procedimentos que executam vrias tarefas contbeis podem ser agrupados em um

    mdulo.

    Editor do Visual Basic (VBE)

    O VBE a interface de desenvolvimento do VBA e pode ser acessado a partir da planilha Excel,

    pressionando as teclas Alt+F11. O VBE abre a janela Cdigo para escrever e editar cdigos do Visual

    Basic e, por padro, abre, tambm, a janela do Projeto (VBAProject), encaixada janela Cdigo, que

    contm os elementos do projeto como mdulos, formulrios e classes.

    Procedimentos

    VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php

    1 de 11 08/08/2011 21:20

  • Um procedimento uma unidade de cdigo localizada entre instrues Sub e End Sub ou entre

    instrues Function e End Function que realiza uma tarefa.

    Um procedimento desempenha uma tarefa especfica. Um procedimento Function pode retornar valor,

    ao passo que um procedimento Sub no retorna valor.

    Para uma viso geral da estrutura de um procedimento Sub, segue um exemplo com breves

    comentrios que explicam cada linha:

    Declarao de variveis

    Uma varivel uma rea na memria, referenciada por um identificador, onde pode ser armazenado um

    valor e alterado a qualquer momento.

    Um nome de identificador deve comear por uma letra, ser nico dentro do mesmo nvel de escopo, no

    pode conter um espao entre caracteres do nome e nem pode ser igual a uma palavra reservada da

    linguagem ou que pertence a sintaxe da linguagem. No permitido o uso de caracteres especiais,

    exceto de alguns smbolos (_, $, %, #, @, &, !) quando utilizados como ltimo caractere do nome. O

    smbolo sublinhado (_) tambm pode ser usado entre palavras do nome da varivel.

    Uma varivel pode ser declarada, usando as seguintes palavras-chave para definir seu escopo ou local

    (procedimento ou mdulo) onde ela poder ser acessada ou manipulada:

    Dim ou Static (no procedimento)

    Dim ou Private (no mdulo)

    Public (no mdulo)

    Dim O valor da varivel retido apenas enquanto o procedimento no qual ela foi declarada estiver em

    execuo.

    Static a varivel preserva o valor entre as chamadas ao procedimento.

    Private o valor fica disponvel a todos os procedimentos dentro do mdulo onde a varivel foi

    declarada.

    Public a varivel pode ser acessada pelos procedimentos de vrios mdulos de uma pasta de

    trabalho.

    A varivel pode ser declarada de modo implcito pelo VBA no momento em que ela for referenciada

    numa instruo. No entanto, o programa poder tornar-se mais eficiente se as variveis forem

    declaradas de modo explcito pelo usurio. A declarao explcita de todas as variveis reduz a

    incidncia de erros de conflitos de nomenclatura e de digitao.

    Para impedir que o VBA faa declaraes implcitas, deve-se inserir a instruo Option explicit em um

    mdulo antes de todos os procedimentos.

    Palavras reservadas (Termos que so de uso da linguagem VBA)

    as, byref, byval, case, close, const, date, declare, dim, each, else, empty, false, for, friend, function,

    VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php

    2 de 11 08/08/2011 21:20

  • get, input, if, is, len, let, lock, next, new, nothing, on, open, option, print, public, private, resume, seek,

    select, set, static, string, sub, then, to, true, type, variant, with, while, write.

    Tipos de dados

    O tipo de uma varivel determina a quantidade de memria que ela ocupar, em bytes, e o modo de

    armazenamento. O VBA opera com os seguintes tipos bsicos:

    Nome Tamanho Intervalo

    Integer 2 bytes -32768 a 32767

    Long 4 bytes -2.147.483.648 a 2.147.483.467

    Single 4 bytes -3,4 x 1038 a 3,4 x 1038

    Double 8 bytes 1,7 x 10308 a 1,7 x 10308

    Currency 8 bytes -9223372036854,5808 a 9223372036854,5807

    String 1 byte por caractere 0 a aproximadamente 65.500

    Boolean 2 bytes Verdadeiro ou Falso

    Date 8 bytes 01/01/100 a 31/12/9999

    Object 4 bytes Qualquer referncia a objeto

    Variant 16 bytes + 1 byte para

    cada caractere Vlido para qualquer tipo de dados.

    Uma varivel que conter nmero inteiro pode ser declarada como Integer ou Long. Exemplos:

    Dim contador As Integer

    Private tamMemoria As Long

    Uma varivel que conter nmeros fracionrios, pode ser declarada com o tipo de dado Single, Double

    ou Currency. Exemplos:

    Public lado1 As Single

    Private rea As Double

    Dim custoProd As Currency

    Uma varivel que conter um conjunto de caracteres alfanumricos pode ser declarada com o tipo de

    dados String. Exemplos:

    Dim descrProd As String

    Dim nomeFunc As String

    Uma varivel que contm valor lgico (verdadeiro ou falso) pode ser declarada com o tipo de dados

    Boolean. O valor padro False. Exemplo:

    Dim limExcedido As Boolean

    Uma varivel que contm valores de data e hora deve ser declarada com o tipo de dados Date.

    Exemplo:

    Dim data As Date

    Uma varivel que contm uma referncia a um objeto do MS Excel pode ser declarada com tipo de

    dados Object. Para atribuir um objeto a uma varivel-objeto, deve-se usar a instruo Set. Exemplos:

    Dim plan1 As object

    Set plan1 = Worksheets(1)

    Uma varivel Variant permite o armazenamento de qualquer tipo de dado. Exemplo:

    Dim codMarca 'Variant por padro

    Constantes

    Uma varivel declarada por meio do qualificador const significa que seu contedo no poder ser

    alterado em todo programa. A constante deve ser inicializada, isto , no momento de sua declarao

    dever ser atribudo um valor a ela. Exemplos:

    Const pi = 3.1416

    Const pi2 = pi * 2

    Pode ser especificado o escopo de uma constante, como segue:

    Private Const Pi = 3.14159

    Fica disponvel a todos os procedimentos dentro de um dado mdulo. Deve ser declarada a nvel de

    mdulo.

    Public Const max = 1024

    VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php

    3 de 11 08/08/2011 21:20

  • Permanece disponvel a todos os mdulos. Deve ser declarada a nvel de mdulo.

    Const idade = 29

    Disponvel apenas dentro do procedimento onde foi declarada.

    Denominao de variveis e constantes

    Recomenda-se para a declarao de variveis a utilizao de letras minsculas. Caso o nome seja

    composto de mais de uma palavra, as demais devem ser iniciadas com letras maisculas ou colocar o

    smbolo sublinhado entre elas. Exemplos:

    total contador

    ValorMedio segunda_fase

    soma_valor_real contaLinhaRel2

    Dica: Utilize nomes significativos na denominao de variveis. D um nome que represente o mais

    precisamente possvel o propsito desta varivel. Evite nomes sem significado ou abreviaturas no

    usuais.

    Exerccios

    Quais dos seguintes nomes so vlidos para a declarao de variveis e constantes em VBA?

    a) a123 b) 31dezembro c) nome_aluno

    d) valor+1 e) 2aFase f) valor-bruto

    g) FINAL h) j i) juros_de_5%

    j) const k) melhorPreco l) funcionario_novo

    m) #9A n) preo o) current

    p) nome do aluno q) _linha1 r) maiorNro.

    os itens de nomes considerados vlidos.

    Operador de atribuio

    O operador de atribuio representado por = (sinal de igualdade). Atribui varivel a expresso

    direita do sinal de igualdade.

    Declarao Atribuio

    dim resto as integer resto = 120 49

    dim salario as double salario = 510.00

    dim cidade as string cidade = 'Blumenau'

    Aps a execuo dos comandos de atribuio, o local da mmria RAM de endereo denominado resto

    passa a armazenar o valor 71, o local de endereo de nome salario, 510.00 e o de nome cidade,

    Blumenau.

    Operadores aritmticos

    As variveis e constantes numricas podem ser utilizadas em clculos matemticos, utilizando funes

    matemticas ou aplicando os operadores. A tabela, a seguir, apresenta as operaes, os smbolos

    respectivos e as sintaxes dos operadores aritmticos:

    Operao Operador Sintaxe

    Multiplicao * r = n1 * n2

    Diviso / r = n1 / n2

    Adio + r = n1 + n2

    Subtrao r = n1 n2

    Potenciao ^ r = b ^ e

    Diviso (retorna o resto) Mod r = n1 Mod n2

    Diviso (retorna o quoc. inteiro) \ r = n1 \ n2

    Funes matemticas intrnsecas mais utilizadas:

    Operao Exemplo Resultado

    Raiz quadrada sqr(9.0) 3

    Parte inteira int(7.8) 7

    Valor absoluto abs(-5) 5

    VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php

    4 de 11 08/08/2011 21:20

  • Nmero aleatrio rnd(12) ?

    Seno sin(3.7) 0,53

    Co-seno cos(4.1) 0,57

    Tangente tan(6.8) 0,56

    Operadores relacionais

    Operadores relacionais fazem comparaes, ou seja, verificam a relao de magnitude e igualdade entre

    dois valores.Indicam a comparao a ser realizada por uma expresso lgica.

    So seis os operadores relacionais:

    Operao Operador

    Igual a =

    Maior que >

    Menor que =

    Menor ou igual a 4

    x=0: y=1: z=2

    VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php

    5 de 11 08/08/2011 21:20

  • b = 20 / (-2) / 5

    c = (5 + 1) / 2 * 3

    d = 2 + 6 / 4 * 8

    e = 18 11 mod 3

    g = 6 > 2 or 10 = 12

    h = not 12 > 30

    i = 5 < 8 and 2 > 4

    j = 8 18 or 12 > 4 * 5

    k = x > y and y < x

    l = x > z or z >= y

    m = x < y and not y = y

    n = false and z > y

    o = y = x + 1 or y + 3 > 4

    dim ano as integer: ano=2012 (Verifica se o ano 2012 bissexto)

    u = (ano Mod 4)= 0 And (ano Mod 100) > 0 Or (ano Mod 400) = 0

    Funes de entrada e sada

    Permitem obter dados do ambiente exterior para a memria do computador e fornecer dados do

    computador ao mundo exterior.

    Funo InputBox (caixa de entrada)

    Apresenta uma caixa de dilogo para que o usurio possa introduzir o dado de entrada. Ela exibe um

    aviso em uma caixa de dilogo, aguarda at que o usurio insira um texto ou clique em um boto para

    retornar o contedo da caixa de dilogo.

    Sintaxe:

    InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

    onde,

    prompt argumento obrigatrio e representa a mensagem que ser exibida na

    caixa de dilogo;

    title opcional; texto a ser exibido na barra de ttulo da caixa de dilogo;

    default opcional; dado padro de entrada a ser exibido na caixa de texto;

    xpos e ypos opcionais; especificam as coordenadas para posicionamento da caixa

    de dilogo na tela;

    helpfile e context opcionais; identifica o arquivo de ajuda do usurio e o nmero de

    contexto atribudo ao tpico da ajuda.

    Funo MsgBox (caixa de sada)

    Mostra uma caixa de dilogo contendo o boto OK e o valor do dado de sada.

    Sintaxe:

    MsgBox(prompt[, buttons] [, title] [, helpfile, context])

    onde,

    prompt argumento obrigatrio; mensagem que ser exibida na caixa de

    dilogo;

    buttons opcional; especifica o tipo de boto a ser exibido na caixa de dilogo;

    title opcional; texto a ser exibido na barra de ttulo da caixa de dilogo;

    helpfile e context opcionais; identifica o arquivo de ajuda do usurio e o nmero de

    contexto atribudo ao tpico da ajuda.

    As palavras destacadas em itlico so os argumentos nomeados da funo. Os argumentos colocados

    entre colchetes so opcionais. Os argumentos das funes podem ser especificados pela posio e

    seguem a ordem apresentada na sintaxe sparados por uma vrgula. Para omitir alguns argumentos

    posicionais, deve-se incluir o delimitador de vrgula correspondente. Para especificar um argumento pelo

    nome, utilizar o nome do argumento seguido por dois-pontos e um sinal de igualdade (:=) e o valor do

    argumento. Pode-se especificar os argumentos nomeados em qualquer ordem. Exemplo: Title:="caixa

    de nomes", Prompt:="Seu nome " & nome

    Exemplo das funes InputBox e MsgBox com argumentos posicionais:

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

    VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php

    6 de 11 08/08/2011 21:20

  • Resultado:

    aparecer antes de qualquer procedimento. O nome do comando Sub dado pelo programador e segue

    as convenes de nomenclatura de variveis. A primeira instruo do procedimento, denominado

    exemplo01, declara a varivel nome de tipo string atravs da instruo Dim. A esta varivel atribudo

    o nome que ser digitado pelo usurio na caixa de dilogo que aberta pela funo InputBox. A

    seguir, a funo MsgBox mostrar o contedo da varivel nome na caixa de mensagem.

    Na funo InputBox, foram codificados o prompt "Qual o seu nome" e o title, opcional, "Entrada de

    nomes". A funo MsgBox exibe o argumento prompt "Seu nome " e o title "Caixa de nomes",

    antecedido por uma vrgula, indicando a ausncia do argumento buttons e a varivel nome, escrita aps

    o prompt, concatenada pelo smbolo ampersand ou e-comercial (&).

    Resultado da execuo do cdigo acima:

    Para separar em linhas o texto inserido no prompt pode-se faz-lo atravs dos caracteres:

    Chr(13) de retorno de carro ou

    Chr(10) de alimentao de linha ou, ainda, combinados

    Chr(13) & Chr(10).

    Exemplo de como a funo Msgbox do procedimento acima poderia ser codificada para exibir o resultado

    em duas linhas:

    MsgBox " Seu nome " & chr(13) & nome, , "Caixa de nomes"

    Comentrios

    So utilizados com a finalidade de documentar o programa-fonte. Eles no so tratados pelo compilador.

    Um apstrofo (') introduz comentrios no cdigo.

    Exemplo: ' Isto um comentrio.

    Codificao de procedimentos

    Ambiente de programao VBA

    O Editor do Visual Basic Applications integrado ao Excel e, assim, ao adquirir o Microsoft Excel est-se

    adquirindo tambm o VBA.

    Para abrir o editor, a partir do Microsoft Excel clique em Exibir Macros e na caixa de dilogo Macros d

    um nome para a Macro ou Procedimento e, em seguida, clique no boto Criar para abrir o editor j com

    um mdulo na janela Cdigo e com as instrues Sub e End Sub. O editor VBA tambm pode ser

    ativado a partir do Microsoft Excel pressionado-se as teclas Alt+F11.

    Considerar que para executar uma macro ou procedimento necessrio que o curso de execuo de

    macros no Excel esteja habilitado.

    Digite a codificao mostrada abaixo, compile e execute o programa e, em seguida, examine

    atentamente seu contedo e resultado.

    Enunciado do problema a codificar

    Calcular e imprimir a mdia aritmtica de trs notas de provas de um aluno a serem fornecidas pelo

    usurio atravs do teclado.

    VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php

    7 de 11 08/08/2011 21:20

  • Implementao em VBA

    Para compilar e executar o programa, basta pressionar a tecla F5 ou clicar no boto verde com formato

    de cabea de seta direita (Executar Sub/UserForm) na Barra de ferramentas ou a partir do menu

    Executar. Para ocorrer uma execuo direta de um procedimento ao pressionar F5 ou o boto da Barra

    de ferramentas, o cursor do mouse deve estar posicionado em qualquer lugar entre as instrues Sub e

    End Sub do procedimento a ser executado.

    Segue-se um exemplo de codificao do mesmo problema no mesmo Mdulo1 do projeto Pasta1,

    considerando como entrada das notas as clulas C1, C2 e C3 da planilha Excel Plan1 e como sadas as

    clulas A4 e C4 dessa mesma planilha. (A clula A4 conter a expresso: Mdia aritmtica e a C4, o

    valor da mdia).

    Para codificar novo procedimento no mesmo mdulo, clique no menu Inserir da janela de cdigo e em

    Procedimento. Na caixa de dilogo "Adicionar procedimento", digite o nome do procedimento

    calcMedia2, selecione o tipo Sub e o escopo Pblico. (Procedimento Sub sem especificao de escopo

    explcito considerado Pblico por padro).

    VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php

    8 de 11 08/08/2011 21:20

  • A proriedade Range pode ser substituda pela propriedade Cells apresentada no procedimento

    CalcMedia2 como comentrio. O uso destas propriedades sem um qualificador de objeto representa as

    clulas da planilha ativa, ou seja, a planilha que se encontra aberta no Excel. Considerando como

    exemplo apenas a linha da varivel nt1, equivale escrever: nt1 = ActiveSheet.Range("C1").Value ou

    nt1 = ActiveSheet.Cells(1, 3).Value. Para se referir a uma outra planilha que no a ativa deve ser

    usado o objeto Worksheets e entre parnteses o nome ou o ndice da planilha requisitada. Exemplo:

    Worksheets("Plan3").Range("A1").Value = 3.14159.

    A propriedade Cells especifica a clula da planilha utilizando indices de linha e coluna ou estilo de

    referncia L1C1, ao passo que a propriedade Range usa letras para identificar as colunas e nmeros

    para as linhas.

    Antes de executar o procedimento CalcMedia2, certifique-se de ter preenchido as clulas C1, C2 e C3 da

    planilha com valores de notas e que essa planilha do Excel permanea ativa. Seguem recortes de

    exemplos da planilha de dados mostrando as posies antes e depois da execuo do procedimento

    CalcMedia2:

    Antes Depois

    A seguir apresentado outro modo de obter o mesmo resultado a partir da mesma fonte de dados,

    mostrada acima, e sem utilizar variveis para auxiliar no processamento:

    VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php

    9 de 11 08/08/2011 21:20

  • A mdia apurada a partir das clulas da planilha, sem transferir seus valores para variveis e o

    resultado da mdia atribudo diretamente na clula da linha 4 coluna 3.

    Os procedimentos podem ser salvos a partir da planilha do Excel como se procede para o salvamento de

    qualquer planilha de uso habitual, podendo fechar a janela do editor VBA a qualquer momendo que nada

    perdido enquanto a planilha correspondente estiver aberta. Se a janela do editor for fechada, para

    abri-la novamente basta teclar Alt+F11. Caso a codificao dos procedimentos no sejam exibidos,

    clique em Mdulo1, no painel Projeto esquerda, com o boto direito do mouse e, no menu de

    contexto, em Exibir cdigo.

    Exerccios

    Os exerccios, a seguir, podem ser todos desenvolvidos no mesmo mdulo e na mesma pgina de cdigo

    do Microsoft Visual Basic e referirem-se quando necessrio mesma planilha do Excel:

    Dados os comprimentos dos catetos de um tringulo retngulo, fazer um procedimento para

    determinar e imprimir o comprimento da hipotenusa. Utilizar a funo InputBox e a MsgBox

    para entrada e sada de dados.

    (Frmula do tringulo retngulo: a2 = b2 + c2. Para extrair a raiz quadrada de um nmero ou

    expresso numrica pode ser utilizada a funo Sqr).

    1.

    Em certa disciplina a nota semestral do aluno calculada com base em seu desempenho

    verificado atravs de trs provas. A primeira prova tem peso 3, a segunda, peso 4 e a terceira,

    peso 5. Elaborar um procedimento para calcular e apresentar a mdia do semestre, tendo como

    entrada as notas referentes as trs provas nas clulas A3, A4 e A5 de Plan1 e como sada a mdia

    do semestre exibida nas clulas A6 e B6 da mesma planilha. Apresentar os dados de sada em

    negrito e na cor vermelha.

    2.

    Escrever um procedimento para efetuar o clculo da quantidade de litros de combustvel gastos

    em uma viagem e da distncia percorrida, sabendo-se que o veculo faz 10 km/litro. O usurio

    informar a velocidade mdia na clula C3 e o tempo despendido na viagem nas clulas C4

    (horas cheias) e C5 (minutos). Mostrar a quantidade de litros gastos e a distncia percorrida na

    caixa de mensagem do Visual Basic (MsgBox).

    3.

    Sabendo-se que o KWh custa R$ 0,40, elaborar um procedimento para obter a partir de uma

    caixa de entrada a quantidade de quilowatts consumida por uma residncia e calcular e escrever

    na planilha, na clula G4, o valor bruto a ser pago e, em G5, o valor lquido caso seja aproveitado

    um desconto de 15%. Na clula F4, escrever a expresso "Valor bruto" e na clula F5, "Valor

    lquido".

    4.

    Elaborar um programa para calcular a diferena de preos de um determinado produto,

    comparando os preos de compra anterior e atual. Obter os preos anterior e atual das clulas

    B11 e B12 e imprimir a diferena algbrica e percentual dos preos nas clulas B13 e B14,

    respectivamente.

    5.

    Elaborar um programa para ler a idade de uma pessoa em numero de anos, meses e dias a partir

    da clulas B11, B12 e B13, respectivamente, calcular e imprimir essa idade em Meses, Dias,

    Horas e Minutos e apresentar o resultado atravs da funo MsgBox.

    6.

    Para apresentar a codificao dos exerccios acima considerou-se uma mesma planilha do Excel como

    base de dados. Ela contm exemplos de dados de entrada e resultados dos processos, quando for o

    caso, e pode ser vista ao se sobrepor o ponteiro do mouse na palavra Planilha que aparece na linha

    abaixo junto aos exerccios resolvidos, a qual, alis, a mesma apresentada na seo seguinte sem o

    VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php

    10 de 11 08/08/2011 21:20

  • objeto grfico ou boto de acesso designado Idade.

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

    Ponto de acesso

    Um procedimento ou uma macro pode ser executada a partir de vrios meios como atravs de uma

    tecla de atalho, de um boto na barra de ferramentas ou de um objeto grfico, entre outros.

    Pode-se executar um procedimento a partir do corpo da planilha Excel onde se encontram os dados de

    entrada ou onde ser exibido o resultado.

    Para criar um boto ou ponto de acesso, clique em inserir e depois em Formas, selecione uma Forma e

    desenhe-a arrastando o ponteiro do mouse no corpo da planilha. Em seguida, clique com o boto direito

    do mouse na Forma ou ponto de acesso criado e, no menu de contexto, em Atribuir Macro. Na caixa

    de dilogo "Atribuir macro", selecione o nome da macro ou procedimento e clique em OK.

    A seguir, apresentada a planilha dos exerccios com um exemplo de boto ou ponto de acesso

    referente ao procedimento exerc6_idade:

    VBA - fundamentos http://bianchi.pro.br/vba/vba_p1.php

    11 de 11 08/08/2011 21:20

  • V i s u a l B a s i c f o r A pp l i c a t i o n s - V BA

    Parte II - Estruturas de controle

    Sumrio:

    Introduo

    Estruturas de seleo

    Seleo simples

    Seleo composta

    Seleo composta encadeada

    Seleo de miltipla escolha

    Estruturas de repetio

    Repetio com teste no incio

    Repetio com teste no final

    Repetio com varivel de controle

    Repetio com objetos de coleo

    Saindo de loops e procedimentos

    Exerccios

    Introduo

    As estruturas de controle determinam o curso de aes de um algoritmo ou programa.A lgica do

    procedimento flui atravs das instrues da esquerda para a direita e de cima para baixo. As

    instrues de controle, ou seja, os comandos que controlam a tomada de decises e as iteraes

    podem alterar a ordem de execuo das instrues.

    Estruturas de seleo

    As instrues condicionais avaliam se uma condio verdadeira ou falsa, e em seguida especificam

    uma ou mais instrues a serem executadas, dependendo do resultado dessa avaliao.

    Comandos de seleo:

    if...then / if...then...else/elseif / select...case...else

    Seleo simples

    (If ... Then) testa uma condio nica e executa uma instruo ou um bloco de instrues.

    Sintaxe: If condio Then

    Instrues

    End If

    Exemplo:

    O procedimento abaixo obtem dois valores numricos, efetua a soma e apresenta a mensagem "soma

    maior que dez", caso o resultado da adio seja maior que 10.

    Sub Adio()

    Dim num1 As Integer, num2 As Integer

    Dim soma As Integer

    num1= InputBox("Informe o 1o. valor")

    num2 = InputBox("Informe o 2o. valor")

    soma = num1 + num2

    if (soma > 10) then

    MsgBox "Soma maior que dez"

    end if

    End Sub

    A instruo If do exemplo acima que contm mais de uma linha de cdigo conhecida como sintaxe

    VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php

    1 de 7 08/08/2011 21:23

  • de linha mltipla. O comando de linha nica no usa a instruo End If. A instruo If desse exemplo

    tambm poderia ter sido codificada assim:

    If (soma > 10) then MsgBox "Soma maior que dez"

    Seleo composta

    (If Then Else) testa uma condio nica e executa um entre dois blocos de instrues.

    Sintaxe: If condio Then

    Instrues

    Else

    Instrues

    End If

    Exemplo:

    O procedimento a seguir efetua o clculo da mdia aritmtica das notas de trs provas de uma aluno e

    avalia a situao quanto aprovao.

    Sub mediaProvas()

    Dim nt1 As single, nt2 As Single

    Dim nt3 As Single, media As Single

    nt1 = InputBox("Informe a 1a. nota")

    nt2 = InputBox("Informe a 2a. nota")

    nt3 = InputBox("Informe a 3a. nota")

    media = (nt1 + nt2 + nt3) / 3

    if (media >= 6.0) then

    MsgBox "Aprovado"

    else

    MsgBox "Reprovado"

    end if

    End Sub

    Seleo composta encadeada

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

    Sintaxe: If condio Then

    Instrues

    ElseIf condio Then

    Instrues

    . . .

    Else

    Instrues

    End If

    Exemplo:

    O procedimento abaixo calcula e mostra o valor do bonus com base no cargo e salrio do funcionrio.

    Sub mediaProvas()

    Dim cargo As Integer

    Dim salario As Currency, bonus As Currency

    salario = InputBox("Informe o salario: ")

    cargo = InputBox("Informe o cargo: ")

    If cargo = 1 Then

    bonus = salario * 0.15

    ElseIf cargo = 2 Then

    bonus = salario * 0.10

    ElseIf cargo = 3 Then

    bonus = salario * 0.08

    Else

    bonus = 0

    End If

    MsgBox "Cargo: " & cargo & " Bonus: " & bonus

    VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php

    2 de 7 08/08/2011 21:23

  • End Sub

    Nota: se cada instruo ElseIf testar a mesma expresso com valores diferentes mais prtico utilizar

    a seleo de mltipla escolha como no exemplo da prxima seo.

    Seleo de mltipla escolha

    (Select Case) testa uma condio nica e executa um dos vrios blocos de instrues.

    Sintaxe: Select Case var(1)

    Case expr(2): instrues

    . . .

    Case Else: instrues

    End Select(1)var = varivel(2)expr = expresso numrica ou de sequncia de caracteres.

    Exemplo:

    O procedimento abaixo calcula e mostra o valor do bonus com base no cargo e salrio do funcionrio.

    ( o mesmo exemplo da seo anterior apenas este apresenta mais opes de cargo e salrio.)

    Sub bonus()

    Dim cargo As Integer

    Dim salario As Currency, bonus As Currency

    salario = InputBox("Informe o salario: ")

    cargo = InputBox("Informe o cargo: ")

    Select Case cargo

    Case 1: bonus = salario * 0.15

    Case 2: bonus = salario * 0.10

    Case 3: bonus = salario * 0.08

    Case 4, 5: bonus = salario * 0.05

    Case 6 To 8: bonus = salario * 0.01

    Case Is < 12: bonus = salario * 0.005

    Case Else: bonus = 0

    End Select

    MsgBox ("Cargo: " & cargo & " Bonus: " & bonus)

    End Sub

    A instruo Case pode avaliar valores separados por vrgula, sequncias de valores - de at - e

    comparar com outros valores como aparece no exemplo a instruo Case Is.

    Nota: Para melhor legibilidade, vale a pena usar a estrutura Select Case em lugar da If ... Then ...

    ElseIf quando a instruo ElseIf avaliar a mesma expresso vrias vezes.

    Estruturas de repetio

    Permitem a execuo de um grupo ou bloco de instrues repetidamente. As intrues podem ser

    repetidas at que uma condio seja falsa ou at que seja verdadeira.

    Tambm h loops que repetem instrues um nmero especfico de vezes ou em cada objeto de uma

    coleo.

    Do...Loop Faz um loop enquanto ou at que uma condio seja verdadeira (True).

    For...Next Utiliza um contador para executar instrues um determinado nmero de vezes.

    For Each...Next Repete um grupo de instrues para cada objeto em uma coleo.

    Repetio com teste no incio

    Do While ... Loop testa uma condio no incio do loop e executa o loop enquanto a condio for

    verdadeira (True).

    Sintaxe: Do While condio

    Instrues

    Loop

    VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php

    3 de 7 08/08/2011 21:23

  • Exemplo:

    O procedimento abaixo multiplica dois valores fornecidos pelo usurio e apresenta o resultado,

    repetindo esse processamento por tantas vezes quantas o usurio desejar.

    Sub multiplica()

    Dim produto As Integer, resp As Integer

    Dim salario As Currency, bonus As Currency

    resp = vbYes

    Do while (resp = vbYes)

    valor1 = InputBox("1o. nmero")

    valor2 = InputBox("2o. nmero")

    produto = valor1 * valor2

    MsgBox "Resultado: " & produto

    resp = MsgBox("Deseja continuar?", vbYesNo)

    Loop

    End Sub

    A funo MsgBox, codificada em duas linhas neste procedimento, exibe na primeira o produto dos

    valores informados pelo usurio e na segunda mostra a mensagem "Deseja continuar?" e dois botes

    "Sim" e "No". A execuo s encerrada quando o usurio pressionar o boto "No".

    Do Until ... Loop testa uma condio no incio do loop e executa o loop enquanto a condio for

    falsa (False).

    Sintaxe: Do Until condio

    Instrues

    Loop

    Exemplo:

    O procedimento a seguir conta o nmero de vezes que ele executado pelo o usurio.

    Sub conta()

    Dim soma As Integer

    resp = vbYes

    Do Until resp = vbNo

    soma = soma + 1

    resp = MsgBox ("Deseja continuar?", vbYesNo)

    Loop

    MsgBox "Total = " & soma

    End Sub

    O procedimento apresenta a caixa de mensagem com a informao: Deseja continuar? e dois botes

    diferenciados pelos textos: "Sim" e "No". O sistema adiciona uma unidade na varivel soma e volta a

    exibir a caixa de mensagem at que o usurio clique no boto "No", quando ento a funo aps o

    comando Loop mostrar o contedo da varivel soma.

    Repetio com teste no final

    Do ... Loop While testa uma condio no final do loop e continua a execuo enquanto a condio

    for verdadeira (True).

    Sintaxe: Do

    Instrues

    Loop While condio

    Exemplo:

    O procedimento abaixo converte para o sistema binrio um nmero decimal informado pelo usurio.

    Sub converte()

    Dim dec As Integer, bin As String

    Dim resto As Integer, sResto As String

    dec = InputBox("Informe um num.", , 19)

    Do

    resto = dec Mod 2 ' retorna o resto da diviso

    sResto = CStr(resto) ' converte o resto para o tipo string

    bin = sResto + bin ' concatena o resto com o contedo de bin

    VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php

    4 de 7 08/08/2011 21:23

  • dec = dec \ 2 ' retorna o quociente inteiro da diviso

    Loop While dec > 0

    MsgBox "Valor em binrio: " & bin

    End Sub

    O usurio informa um nmero decimal na caixa de entrada, caso no queira o valor default 19

    sugerido e o sistema o converte para o binrio correspondente. A execuo do loop tem lugar

    enquanto a varivel dec for maior que zero.

    Do ... Loop Until testa uma condio no final do loop e continua a execuo enquanto a condio

    for falsa (False).

    Sintaxe: Do

    Instrues

    Loop Until condio

    Exemplo:

    O procedimento abaixo calcula e mostra o fatorial de um nmero fornecido pelo usurio.

    Sub fatorial()

    Dim num As Integer, fat As Integer, i As Integer

    num = InputBox("Informe um num.", , 5)

    fat = 1: i = 1

    Do

    fat = fat * i

    i = i + 1

    Loop Until i > num

    MsgBox "Fatorial de " & num & ": " & fat

    End Sub

    A execuo prossegue at que a varivel ndice i for maior do que a varivel num, contedo informado

    na caixa de entrada.

    Repetio com varivel de controle

    For ... Next executa as instrues do loop enquanto a varivel contadora no atingir o valor

    especificado.

    Sintaxe: For var = inicial To final [Step passo]

    Instrues

    Next var

    Exemplo:

    O procedimento abaixo efetua a soma dos nmeros pares at 10.

    Sub soma()

    Dim total As Integer, j As Integer

    For j = 2 To 10 Step 2

    total = total + j

    Next j

    MsgBox "O total " & total

    End Sub

    A varivel j recebe o valor inicial 2 e a cada loop incrementada de 2 unidades at atingir o valor final

    10. O comando Step opcional e se ele no for especificado assumido o valor padro 1.

    Repetio com objetos de coleo

    For Each... Next executa as instrues do loop para cada objeto de uma coleo.

    Sintaxe: For Each var in grupo

    Instrues

    Next var

    Exemplo:

    O procedimento abaixo preenche com o valor 100 as clulas A1:D10 de Plan1 que apresentarem valor

    menor do que 1.

    VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php

    5 de 7 08/08/2011 21:23

  • Sub preenche()

    Dim intervalo As Range, c As Range

    Set intervalo = Worksheets(1).Range("A1:D10")

    For Each c In intervalo

    If c.Value < 1 Then

    c.Value = 100

    End If

    Next c

    End Sub

    As variveis intervalo e c so declaradas como objeto Range. A instruo Set atribui varivel

    intervalo referncias do objeto Range da primeira planilha. O loop da instruo For Each escreve em

    cada elemento da coleo c que se refere ao intervalo de clulas A1:D10 o valor 100 se o contedo do

    elemento da coleo for menor que 1.

    Saindo de loops e preocedimentos

    As intruo Exit permite abandonar uma estrutura de controle. Apesar dessa instruo ser

    conveniente, deve-se restringir seu uso uma vez que o excesso de sua utilizao pode dificultar a

    leitura e a depurao do cdigo.

    Para sair diretamente de uma estrutura de repetio For, utiliza-se a instruo Exit For e para sair

    diretamente de um repetio Do usa-se a instruo Exit Do.

    As instrues Exit Sub e Exit Function podem ser usadas para abandonar procedimento e funo.

    Exerccios

    Elaborar um procedimento para calcular e escrever a mdia ponderada de trs notas de um

    aluno e a mensagem de aprovado para mdia maior ou igual a 6,0 ou, caso contrrio, a

    mensagem de reprovado.

    1.

    Dados os valores dos lados de um tringulo, verificar se os lados realmente formam um

    tringulo (o valor de cada lado deve ser menor que a soma dos outros dois lados). Se esta

    condio for verdadeira, indicar que tipo de tringulo: issceles, escaleno ou eqiltero. Emitir

    uma mensagem, caso os valores dos lados fornecidos no formarem um tringulo.

    2.

    Escrever um procedimento para calcular a soma dos N primeiros nmeros naturais. (Soma = 0

    + 1 + 2 + 3 + ... + N). O programa deve ler o valor de N, que equivale ao ltimo nmero da

    srie, atravs da funo InputBox e apresentar o resultado em uma caixa de mensagem

    utilizando a funo MsgBox.

    3.

    Dado um conjunto de valores inteiros e positivos, como descritos na planilha abaixo, determinar

    qual o maior e menor valor do conjunto. Encerrar a leitura ao encontrar o valor 0. O maior e

    menor valor do conjunto deve ser exibido em uma caixa de mensagem por meio da funo

    MsgBox.

    4.

    Em uma pesquisa realizada junto aos habitantes de uma regio foram coletados os seguintes

    dados: idade, sexo (M/F) e salrio. Fazer um procedimento para calcular e informar:

    maior e menor idade do grupo;

    mdia salarial do grupo;

    percentual de homens.

    Encerrar a leitura de dados da planilha ao detectar zero na idade.

    5.

    Fazer um programa para escrever a tabuada de 1 a 10 do nmero fornecido pelo usurio,

    utilizando as estruturas de repetio For...Next e Do while...Loop. Utilize o mtodo InputBox

    para retornar um nmero que ser informado pelo usurio. Mostrar o resultado de acordo com

    o exemplo contido na ilustrao, utilizando a propriedade Cells do objeto Worksheets

    6.

    VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php

    6 de 7 08/08/2011 21:23

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

    Os exemplos dos exerccios acima foram desenvolvidos numa mesma planilha conforme ilustrao

    abaixo. As informaes na cor vermelha referem-se aos cabealhos e as informaes em azul

    referem-se aos exemplos de dados para os procedimentos. Elas foram digitadas na planilha e,

    portanto, no so resultados dos procedimentos.

    VBA - estruturas de controle http://bianchi.pro.br/vba/vba_p2.php

    7 de 7 08/08/2011 21:23

  • V i s u a l B a s i c f o r A pp l i c a t i o n s - V BA

    Parte III - Vetores e matrizes

    Sumrio:

    Introduo

    Vetores

    Matrizes bidimensionais

    Matrizes fixas e dinmicas

    Exerccios

    Introduo

    Vetores e matrizes so estruturas de dados homogneas conhecidas como Arrays, matrizes, variveis

    indexadas, variveis subscritas ou tabelas em memria, so conjunto de elementos

    de mesma natureza. Cada elemento da matriz pode ser distinguido de outros elementos por um ou

    mais ndices inteiros. As estruturas homogneas ou arrays so divididas em unidimensionais e

    multidimensionais. Geralmente, as estruturas unidimensionais so chamadas de vetores e as

    multidimensionais so chamadas de matrizes. Um vetor tambm pode ser considerado uma matriz,

    variando apenas numa dimenso.

    Vetores

    O vetor ou matriz unidimensional exatamente uma seqncia linear de elementos armazenados

    consecutivamente na memria. So variveis do mesmo tipo declaradas com o mesmo identificador e

    referenciadas por um ndice para determinar sua localizao dentro da estrutura.

    Ilustrao de um vetor:

    dom seg ter qua qui sex sab

    1 2 3 4 5 6 7

  • No primeiro loop For Next o sistema obtm as dez notas, armazena-as no vetor de nome notas e

    efetua a soma para no final calcular a mdia das notas. No loop For Next seguinte relacionado na

    planilha apenas as notas de valor maior que a mdia apurada.

    O exemplo a seguir atribui um valor randmico para os elementos do vetor. O comando Debug.Print

    envia a sada para a janela verificao imediata que pode ser aberta a partir do menu Exibir do

    programa editor Visual Basic:

    Matrizes bidimensionais

    No Visual Basic, pode-se declarar matrizes com at 60 dimenses. A instruo a seguir declara uma

    matriz bidimensional de 3 por 5:

    ou

    Dim matriz (1 To 3, 1 To 5) As Single

    Dim matriz (3, 5) As Single

    No primeiro exemplo os ndices da matriz iniciam em 1 e no segundo, em 0 se no for declarada no

    nvel de mdulo a opo Option Base 1. A primeira dimenso da matriz se refere linha e a segunda,

    dimenso coluna, no primeiro exemplo tem-se uma matriz de 3 linhas por 5 colunas e no segundo, 4

    linhas por 6 colunas na ausncia do comando Option Base 1.

    Para processar matrizes multidimensionais, utiliza-se instrues For...Next aninhadas. O

    procedimento, a seguir, preenche cada elemento da matriz bidimensional com base no valor de sua

    localizao dentro da matriz:

    Sub exemplo3_matriz()

    Dim i As Integer, j As Integer

    Dim matriz(3, 5) As Single

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

    2 de 5 08/08/2011 21:24

  • ' Preenche a matriz com valores e os imprime na janela

    ' de verificao imediata.

    For i = 1 To 3

    For j = 1 To 5

    matriz(i, j) = i * j

    Debug.Print matriz(i, j)

    Next j

    Debug.Print ' imprime branco ao completar uma linha.

    Next i

    End Sub

    Matrizes fixas e dinmicas

    As matrizes declaradas acima so exemplos de matrizes fixas. A matriz dinmica declarada

    deixando-se vazios os parnteses como no exemplo que segue:

    Dim matDinamica ( ) As Integer

    Posteriormente, no procedimento, pode ser especificado o nmero de elementos atravs da instruo

    ReDim. Segue um exemplo de declarao e redimensionamento de uma matriz dinmica:

    Sub redimatriz()

    Dim dinamica () As Integer ' declara uma matriz dinmica

    Dim i As Integer ' declara a varivel i (ndice)

    ReDim dinamica (5) ' faz a alocao de cinco elementos

    For i = 1 To 5 ' faz o loop 5 vezes

    dinamica (i) = i ' inicializa a matriz

    Next i

    ' A prxima instruo redimensiona a matriz e apaga os elementos.

    ReDim dinamica (10) ' redimensiona para 10

    For i = 1 To 10 ' faz o loop 10 vezes

    dinamica (i) = i ' inicializa a matriz

    Next i

    ' A instruo a seguir redimensiona a matriz sem apagar os elementos.

    ReDim Preserve dinamica (15) ' redimensiona para 15

    End Sub

    Exerccios

    Fazer um programa para obter dez nmeros inteiros, armazen-los em um vetor e escrev-los

    na ordem inversa de sua leitura.

    Para a entrada dos nmeros utilizar a funo InputBox e para a sada, a janela de verificao

    imediata, atravs do mtodo Print do objeto Debug.

    1.

    Fazer um procedimento para receber as notas da primeira e da segunda prova de cinco alunos.

    Armazenar as notas da primeira e da segunda prova em vetores distintos. Calcular e escrever a

    mdia de cada aluno na coluna A partir da linha 4 de Plan1.

    2.

    Numa pesquisa realizada com um grupo de pessoas pretende-se relacionar as pessoas que tm

    altura acima da mdia das pessoas pesquisadas. Elaborar um procedimento para armazenar as

    alturas e os nomes das pessoas em vetores distintos e exibir a altura mdia e os nomes das

    pessoas com altura maior do que a altura mdia. Obs.: Encerrar a entrada de dados ao ser

    digitado o valor 0 para a altura. Cada vetor pode ter no mximo 20 ocorrncias.

    3.

    Fazer um programa para pesquisar o nmero listado na coluna G da planilha e retornar o

    contedo correspondente da coluna H atravs da funo MsgBox. O usurio digitar o nmero

    desejado na caixa de entrada (InputBox). Caso o argumento no seja encontrado, informar esta

    condio numa caixa de mensagem.

    Criar um boto na planilha para executar o programa.

    4.

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

    3 de 5 08/08/2011 21:24

  • Efetuar a soma dos elementos situados abaixo da diagonal principal da matriz mostrada em

    Plan2, incluindo os elementos da prpria diagonal principal. Mostrar o resultado numa caixa de

    mensagem. A matriz deve ser previamente construda na planilha de nome "Plan2".

    (Diagonal principal formada pelos elementos A[ij], tais que i = j. Correspondem aos

    elementos da linha que une o canto superior esquerdo ao canto inferior direito).

    5.

    Gerar uma matriz identidade de ordem 5, apresentando o resultado em "Plan2", conforme

    planilha abaixo. Ajustar a largura das colunas atravs da aplicao do mtodo AutoFit.

    (Matriz identidade uma matriz quadrada em que todos os elementos da diagonal principal so

    iguais a 1 e os demais so nulos ou iguais a 0).

    6.

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

    Os exemplos dos exerccios acima foram desenvolvidos numa mesma pasta de planilhas conforme

    ilustrao abaixo. As informaes na cor vermelha referem-se aos cabealhos e as informaes em

    azul referem-se aos exemplos de dados para os procedimentos. Elas foram digitadas na planilha e,

    portanto, no so resultados dos procedimentos.

    Planilha Plan1:

    Planilha Plan2:

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

    4 de 5 08/08/2011 21:24

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

    5 de 5 08/08/2011 21:24

  • V i s u a l B a s i c f o r A pp l i c a t i o n s - V B A

    Parte IV - Formulrios (UserForm)

    Sumrio:

    Introduo

    Projeto

    Editor do Visual Basic VBE

    Formulrio

    Ttulo do formulrio

    Caixa de texto

    Rtulo ou label

    Demais caixas de texto e rtulos

    Alinhamento

    Botes de comando

    Tabulao

    Cdigos dos botes de comando

    Teste do projeto

    Boto X do formulrio

    Macro incio

    Boto de execuo

    Exerccios

    Introduo

    Um formulrio de usurio uma caixa de dilogo personalizada que pode ser usada quando as caixas

    das funes MsgBox e InputBox no so suficientes. Os objetos em um formulrio de usurio do Excel,

    como botes e caixas de texto, caixas de combinao e outros so chamados de controles. O

    formulrio usado principalmente como uma plataforma na qual so adicionados os controles

    necessrios para sua funcionalidade.

    Projeto

    Para o aprendizado bsico ser criado um projeto exemplo bastante simples que tem como objetivo

    apenas efetuar o registro de entrada de peas para suprimentos de uma Loja de materiais eltricos

    numa planilha.

    Abra o aplicativo Excel e na planilha Plan1 digite o cabealho da aplicao como mostrado na figura 1

    e salve a planilha na pasta de sua preferncia com o nome Materiais:

    Figura 1

    Editor do Visual Basic VBE

    O VBE a interface de desenvolvimento do VBA e pode ser acessado a partir da planilha Excel,

    pressionando as teclas Alt+F11. O VBE abre a janela Cdigo para escrever e editar cdigos do Visual

    Basic e, por padro, abre, tambm, a janela do Projeto (VBAProject) que contm os elementos do

    projeto como mdulos, formulrios, classes e outros e podendo abrir, ainda, a Janela 'Propriedades'

    utilizada para alterar as propriedades ou caractersticas dos objetos. Essas janelas possuem a

    particularidade de serem encaixveis janela do Editor do Visual Basic.

    conveniente dizer que a planilha ou o arquivo do Excel tratado como pasta uma vez que o VBA

    considera cada planilha aberta um projeto, podendo encerrar formulrios, mdulos, grficos, cdigos e

    macros. Assim, para salvar um projeto, basta gravar a planilha inicialmente aberta no Excel.

    Formulrio

    VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php

    1 de 10 08/08/2011 21:24

  • No Excel pressione as teclas Alt+F11 para abrir o Editor do Visual Basic VBE. Para criar a caixa de

    dilogo personalizada, no Editor do Visual Basic, clique no menu Inserir e, em seguida, na opo

    UserForm. Surge na tela um formulrio vazio e uma Caixa de ferramentas contendo os controles a

    serem utilizados para a elaborao do formulrio, figura 2. Caso a Caixa de ferramentas no aparea

    automaticamente na tela ao inserir o UserForm, clique em Caixa de ferramentas no menu Inserir.

    Figura 2

    Ttulo do formulrio

    Clique no boto Janela 'Propriedades' na Barra de ferramentas

    Padro ou pressione F4 para abrir a janela, Figura 3, a qual

    possibilita nomear e inicializar propriedades dos controles do objeto

    formulrio.

    Para mudar o ttulo do formulrio, d um clique na barra de nome

    do formulrio UserForm1 para selecion-lo, em seguida, um duplo

    clique na propriedade Caption e troque o valor desta propriedade

    para Entrada de peas e d Enter.

    A barra de ttulo do formulrio mostrar a nova legenda.

    Caixa de Texto

    Inicialmente, clique no formulrio para exibir a Caixa de

    ferramentas, caso ela no esteja visvel. Na Caixa de ferramentas,

    selecione o boto Caixa de texto e clique no formulrio na posio

    superior do lado direito para criar a primeira caixa de texto de

    tamanho padro deste projeto como mostrado na figura 4. Figura 3

    Com a caixa de texto selecionada d um duplo clique na propriedade (Name) da Janela 'Propriedades'

    e mude o valor para txtPeca e d Enter.

    Clique em uma parte vazia do formulrio para selecion-lo e exibir a Caixa de ferramentas.

    Rtulo ou Label

    Para descrever ou nomear a caixa de texto, clique no boto Rtulo na Caixa de ferramentas e depois

    clique no formulrio esquerda da caixa de texto, e em seguida, clique duas vezes na propriedade

    Caption e modifique o valor para Nmero da pea e tecle Enter.

    Se necessrio, redimensione o rtulo, arrastando a ala de seleo para perfazer um tamanho

    apropriado.

    Clique em uma parte vazia do formulrio para selecion-lo e exibir a Caixa de ferramentas.

    VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php

    2 de 10 08/08/2011 21:24

  • Demais caixas de Texto e rtulos

    Proceda de maneira semelhante para as outras duas caixas

    de texto e para os rtulos correspondentes.

    Para a propriedade (Name) da caixa texto Descrio digite

    txtDescr e para a caixa de texto Quantidade, txtQuant.

    Na propriedade Caption dos rtulos digite os valores

    Descrio e Quantidade como aparecem nas figuras ao

    lado.

    Alinhamento

    Para fazer o alinhamento das caixas de texto, selelecione as

    trs caixas, clicando ao lado na parte superior esquerda da

    primeira caixa de texto e arraste um retngulo at a parte

    inferior direita da ltima caixa de texto ou, se preferir,

    mantenha pressionada a tecla Ctrl e clique em cada uma

    das caixas de texto, figura 4.

    A partir do menu Formatar, clique em Alinhar e, em

    seguida, na opo Esquerdas. Para alinhar os rtulos,

    proceda de modo anlogo ao das caixas de texto. A figura 5

    mostra o resultado deste procedimento.

    Botes de comando

    Para permitir a execuo de aes, insira no formulrio trs

    botes de comando: um para dar entrada de dados, outro

    para apagar o contedo das caixas de texto do formulrio e

    o terceiro para encerrar o processo de entrada de dados.

    Para criar o primeiro boto, clique no Boto de comando

    na Caixa de ferramentas e em seguida no formulrio.

    Figura 4

    Figura 5

    Figura 6

    Com o boto selecionado, mude o valor da propriedade (Name) para btnEntra e da propriedade

    Caption para Entra e tecle Enter.

    Redimencione o boto, clicando nele para selecion-lo e, em seguida, arraste a ala do lado direito ou

    esquerdo do retngulo de seleo at alcanar um tamanho apropriado, Figura 6. Se for necessrio,

    reposicione o boto no espao do formulrio, arrastando-o de um local para outro.

    Clique em uma parte vazia do formulrio para exibir a Caixa de ferramentas. Proceda de forma

    semelhante para a criao dos dois botes restantes, alterando os valores das propriedades como

    segue:

    Boto Limpa propriedade (Name) para btnLimpa e Caption para Limpa;

    Boto Fim propriedade (Name) para btnFim e Caption para Fim.

    Redimensione tambm esses dois botes de modo a obter tamanhos proporcionais, figura 6.

    Selecione os trs botes para alinh-los a partir do menu Formatar.

    VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php

    3 de 10 08/08/2011 21:24

  • Figura 7

    Salve a pasta de trabalho. Lembre-se que o salvamento do projeto pode ser feito em cada etapa

    subsequente do desenvolvimento do projeto.

    Pressione F5 ou clique no menu Executar e depois em Executar Sub/UseForm para ver o aspecto

    da caixa de texto no modo de execuo. Clique nos botes para testar seu funcionamento e depois

    feche a janela do formulrio para voltar ao modo de desenvolvimento.

    Tabulao

    Pressione repetidamente a tecla TAB e observe que a caixa de seleo se movimenta de controle para

    controle, mudando seu foco ou ponto sobre o qual recair a ao do usurio. Tecle F5 para entrar em

    modo de execuo e verifique a ordem de sequncia do foco ao pressionar a tecla TAB.

    A ordem de tabulao impotante para quem utiliza o

    teclado. Se a atual no for a ordem de tabulao lgica

    ela pode ser mudada. Clique no plano de fundo do

    formulrio e a partir do menu Exibir clique na opo

    Ordem de tabulao. A caixa de dilogo, Figura 8,

    mostra nove controles cuja sequncia pode ser alterada,

    simplesmente, selecionando o controle desejado e

    clicando no boto Mover para cima ou Mover para baixo

    para posicion-lo corretamente.Figura 8

    Cdigos dos botes de comando

    Boto Entra (btnEntra)

    Selecione o boto Entra e no menu Exibir escolha Cdigo ou, se preferir um atalho, clique duas vezes

    no boto Entra. aberta uma janela para inserir as instrues de funcionalidade. Segue o cdigo do

    procedimento que adiciona registros das entradas de materiais na planilha:

    VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php

    4 de 10 08/08/2011 21:24

  • Figura 9

    Para retornar ao formulrio, clique no menu Exibir e depois em Objeto ou, pegando um atalho, clique

    com o boto direito do mouse em UserForm1 no painel esquerda e, no menu de contexto, escolha

    Exibir objeto.

    Boto Limpa (btnLimpa)

    D um duplo clique no boto Limpa para abrir a janela de cdigo. Segue o cdigo relativo a esse

    boto:

    Figura 10

    Para retornar ao formulrio, clique no menu Exibir e depois em Objeto ou atravs do atalho, clicando

    com o boto direito do mouse em UserForm1 e, em seguida, em Exibir objeto.

    Boto Fim (btnFim)

    D um duplo clique no boto Fim para abrir a janela de cdigo. Segue o cdigo relativo a esse boto:

    Figura 11

    VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php

    5 de 10 08/08/2011 21:24

  • Para retornar ao formulrio, clique no menu Exibir e depois em Objeto ou faa-o via atalho.

    O fechamento do formulrio tambm pode ser efetivado teclando Esc. Para tanto, selecione o boto

    Fim do formulrio e na Janela 'Propriedades' mude o valor da propriedade Cancel para True.

    Teste do projeto

    Para fazer o teste do projeto, pressione a tecla F5 ou clique no boto (com forma de cabea de seta

    direita) na barra de ferramentas padro ou, ainda, se preferir, clique no menu Executar e depois em

    Executar Sub/Userform.

    Boto X do formulrio

    Para que o usurio no encerre o trabalho, usando o boto fechar (X) do formulrio, clique em Inserir

    e depois em Cdigo ou use o atalho a partir do UserForm1, subordinado pasta Formulrios do

    painel esquerda, e, no final da janela de Cdigo, digite o procedimento conforme figura 12 a seguir:

    Figura 12

    Macro incio

    Para iniciar a execuo do projeto a partir de um boto ou ponto de acesso contido na planilha de

    dados, clique no menu Inserir e depois em Mdulo. Na rea de cdigo digite as instrues conforme

    figura 13.

    Figura 13

    Boto de execuo

    Para facilitar o comando de execuo pelo usurio, clique na Planilha do Excel e crie um boto ou

    ponto de acesso, conforme figura 14. Para tanto, clique em Inserir e depois em Formas, selecione

    uma Forma e desenhe-a arrastando o ponteiro do mouse no corpo da planilha. Em seguida, clique com

    o boto direito do mouse na Forma e, no menu de contexto, em Atribuir Macro. Na caixa de dilogo

    Atribuir macro, selecione o nome da macro inicioMat e clique em OK. Insira o texto na Forma,

    clicando com o boto direito do mouse na borda da forma e, no menu de contexto, clique em Editar

    Texto. Digite o texto Entrada de materiais e para sair do modo de edio, clique num espao em

    branco da planilha.

    Salve o projeto. Para finalizar esse estudo, faa agora o teste final, iniciando o processo de execuo a

    partir do boto Entrada de materiais.

    VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php

    6 de 10 08/08/2011 21:24

  • Figura 14

    Exerccios

    Desenvolver um projeto para fazer uma relao de pagamentos, contendo o cdigo do

    funcionrio, sexo e salrio, na planilha Plan1 do Excel (figura 15) e mostrar os totais dos

    salrios listados.

    Para tanto, elabore um formulrio para dar entrada dos dados (figura 16) e outro formulrio

    para apresentar a soma dos salrios (figura 17) quando o usurio pressionar o boto Fim.

    1.

    Figura 15

    Figura 16

    Figura 17

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

    VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php

    7 de 10 08/08/2011 21:24

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

    19).

    Figura 18

    Figura 19

    Download do arquivo do exerccio n 1:

    Fazer um programa para converter para o sistema numrico decimal um nmero escrito em

    binrio. Formulrio deste exerccio (figura 20):

    2.

    Figura 20

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

    VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php

    8 de 10 08/08/2011 21:24

  • Figura 21

    Download do arquivo do exerccio n 2:

    Criar um projeto para converter valores numricos entre os sistemas decimal, binrio e

    hexadecimal. O formulrio para este projeto pode ser definido como segue (figura 22):

    3.

    Figura 22

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

    Figura 23

    Download do arquivo do exerccio n 3:

    VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php

    9 de 10 08/08/2011 21:24

  • VBA - formulrios (UserForm) http://bianchi.pro.br/vba/vba_p4.php

    10 de 10 08/08/2011 21:24