SlideShare uma empresa Scribd logo
Vista
Virtual
 INFOR MÁT ICA
Vista
                                                          Virtual
                                                            INFOR MÁT ICA




Introdução a linguagem VBA - Visual Basic For Applications.............................................. 3
   Onde podemos utilizar o VBA?.......................................................................................... 3
      Como resposta a um evento: .......................................................................................... 3
      Criação de funções e procedimentos em módulos separados: ....................................... 3
      Aprendendo VBA:.......................................................................................................... 4
      Os comandos do VBA são divididos, basicamente, em três tipos: ................................. 4
O Ambiente de Programação.................................................................................................. 6
   Para criar o formulário Teste faça o seguinte: .................................................................... 7
   Anatomia dos Módulos do VBA. ..................................................................................... 13
Principais comandos do VBA.............................................................................................. 15
   Tipos de dados.................................................................................................................. 15
      Declaração e “tipo” de variável: ................................................................................... 15
      Fazendo cálculos e comparações com o VBScript – Operadores. ................................ 18
      Fazendo cálculos com os Operadores aritméticos. ....................................................... 18
      Comparando valores com os Operadores de comparação............................................. 22
      O Escopo das variáveis, no VBA. ................................................................................ 26
      Estruturas para controle de fluxo em VBScript........................................................... 29
Funções, procedimentos e eventos com VBScript. .............................................................. 41
   Introdução......................................................................................................................... 41
   Tipos de dados e funções para conversão de tipos. .......................................................... 41
      Determinando o Tipo de Dados contido em uma variável. .......................................... 41
      Funções para conversão de tipos. ................................................................................. 50
   Outras funções do VBScript – Tratamento de String, Datas e Funções matemáticas...... 56
      Funções para tratamento de String. .............................................................................. 56
      Função Len. .................................................................................................................. 56
      Função LCase. .............................................................................................................. 57
      Função UCase............................................................................................................... 57
      Função Left................................................................................................................... 57
      Função Right. ............................................................................................................... 58
      Função Mid................................................................................................................... 58
      Função String................................................................................................................ 59
   Funções para tratamento de Data e Hora. ......................................................................... 60
      Função Date.................................................................................................................. 60
      Função Time................................................................................................................. 60
      Função Day................................................................................................................... 61
      Função Month............................................................................................................... 61
      Função Now.................................................................................................................. 61
      Função MonthName. .................................................................................................... 62
      Função Hour. ................................................................................................................ 62
      A função DateDiff. ....................................................................................................... 63
      A função DateAdd. ....................................................................................................... 64
      Função Year.................................................................................................................. 65
   Funções para Cálculos matemáticos. ................................................................................ 67
   Criando suas próprias funções e procedimentos. .............................................................. 68
      Criando e utilizando Sub-rotinas. ................................................................................. 69
   Criando e utilizando Funções ........................................................................................... 71
   Cálculo do Dígito Verificador: CPF, CNPJ e Processos.................................................. 74
      Como calcular o DV do CPF........................................................................................ 74
   Juntando Tudo: ................................................................................................................. 76
Vista
                                     Virtual
                                       INFOR MÁT ICA




        Introdução a linguagem VBA - Visual Basic For
                         Applications

      O VBA é derivado do Visual Basic. O Visual Basic é um ambiente de
desenvolvimento completo, onde podemos criar programas para o ambiente Windows.
        Um programa comercial para controlar estoque de mercadorias pode ser criado
utilizando-se o Visual Basic. Um aplicativo como o f o l h a d e p a g a m e n t o também
poderia ser criado utilizando o Visual Basic.
        Já o VBA é uma linguagem bastante poderosa, embora não seja tão poderosa
quanto o Visual Basic, para criação de aplicativos e automação de tarefas, baseados nos
aplicativos do Microsoft Office: Access, Word, Excel,Power Point e Outlook.



Onde podemos utilizar o VBA?
       Existem, basicamente, duas situações/locais diferentes onde podemos utilizar o
VBA:

Como resposta a um evento:

        Conforme descrito anteriormente, o modelo deprogramação do ambiente
Windows é baseado em Eventos. Um Evento é uma ação do usuário ao utilizar o teclado
ou o mouse.Por exemplo, quando o usuário clica em um botão de comando é gerado o
evento "Ao clicar" associado com este botão. Quando o usuário altera o valorem um
campo de dados e pressiona a tecla TAB para ir para o próximo campo são gerados
dois eventos associados com o campo que foi atualizado: "Após atualizar" e "Ao
perder o foco". Quando o usuário dá um clique duplo em um determinado elemento,
é disparado o evento "Ao clicar duas vezes", e assim por diante. Por padrão
nenhuma ação é programada para responder aos eventos que são disparados.
Conforme já vimos anteriormente é possível criar macros que serão executadas em
resposta a um determinado evento. Podemos utilizar o VBA para criar um procedimento
(um procedimento é formado por um ou mais comandos) que será executado em
resposta ao evento. Por exemplo, podemos criar um procedimento para validar um
número de CPF (calcular o DV do CPF). Este procedimento pode ser configurado
para ser executado em resposta ao evento. Após atualizar do campo CPF.O código criado
para ser executado em resposta a um evento, é gravada juntamente com o formulário (ou
relatório), onde está o elemento que dispara o evento.

Criação de funções e procedimentos em módulos separados:
       Se quisermos criar procedimentos ou funções que não estejam ligados um evento
específico em um formulário ou relatório (podendo, porém serem chamados em diversos
eventos diferentes, conforme aprenderemos mais adiante),podemos criar funções
Vista
                                    Virtual
                                      INFOR MÁT ICA




gravadas em Módulos do Access. Um Módulo é um objeto do Access cuja única
finalidade é armazenar código de procedimentos e funções do VBA. Quando um
procedimento ou função é definido e armazenado em um módulo, podemos usá-lo em
qualquer expressão, como se fosse uma função interna do Microsoft Access. Nos
criaremos, mais adiante, a título de exemplo, uma função chamada MêsPorExtenso.
Esta função receberá um valor numérico entre 1 e 12 e irá retornar o nome do mês
correspondente, por extenso.

         Agora que já falei bastante e fiz uma boa propaganda das vantagens em se
utilizar o VBA, é hora de aprendermos os fundamentos básicos desta linguagem de
programação.

Aprendendo VBA:

       Um procedimento, função ou módulo do VBA é uma seqüência de comandos
que são executados para a realização de uma ou mais tarefas. Por exemplo, posso
escrever um grupo de comandos que acessa os dados da tabela pedidos e aumenta
o valor de um determinado campo de acordo com determinadas condições.

      Observe o comando a seguir:

              Me![NúmeroDoPedido].SetFocus

       Este é um comando que, simplesmente, coloca o cursor no campo
NúmeroDoPedido,no formulário atual. Não se preocupe em entender este comando,
agora.

       Todo comando em VBA deve seguir algumas regras de sintaxe. A sintaxe tem a
ver com a maneira como o comando é escrito. Por exemplo, se você for utilizar a
função Day() em um comando e ao invés de Day(), utilizar Dai(), você terá cometido um
erro de sintaxe e o comando não poderá ser executado. Os erros de sintaxe são os
mais fáceis de serem identificados e corrigidos.


Os comandos do VBA são divididos, basicamente, em três tipos:

Comandos básicos do VBA:São aqueles comandos que estão presentes em toda e
qualquer lingüagem que se preze. São comandos para declaração de variáveis,
operadores aritméticos e lógicos, struturas de controle e operadores para a realização
de testes condicionais. Por exemplo, qual a linguagem que não possui uma funçãoIF
para a realização de testes condicionais?
Funções internas do Microsoft Access:Existem centenas de funções prontas,
fornecidas pelo Microsoft Access e que podem ser utilizadas em qualquer comando do
VBA. Por exemplo,para armazenar mas em uma variável x, o valor numérico do ano
da data do sistema, poderíamos utilizar o seguinte comando: x =Year(Date()). Durante
a primeira semana utilizamos uma série destas funções, tais como: Esquerda(),
Direita(), Meio(), Ano(), Dia(), Mês, etc.

IMPORTANTE: Ao utilizar funções em comandos do VBA devemos,sempre,utilizar a
função em inglês.Por exemplo, ao invés de Ano() devemos utilizar Year(); ao invés de
Mês() devemos utilizar Month()e assim por diante.
Vista
                                      Virtual
                                       INFOR MÁT ICA




Objetos da hierarquia de objetos do Microsoft Office: Um objeto é uma
entidade que possui propriedades (que descrevem as características do objeto) e
métodos (que descrevem os comportamentos do objeto). Cada aplicativo do
Microsoft Office disponibiliza uma hierarquia de     objetos bem definida. Estes
objetos podem ser acessados através de programação. Podemos utilizar os
métodos dos objetos para realizar determinadas ações sobre o objeto e suas
propriedades para obter informações sobre suas características. Esta hierarquia de
objetos é que torna o VBA tão poderoso. É graças a hierarquia de objetos do
Office que, de dentro de um banco de dados do Access, por exemplo, podemos
acessar dados de uma planilha do Excel, gravada em um drive de rede e combinar
tais dados com dados obtidos a partir de um banco de dados , por exemplo, do
Dbase (.dbf), gravado na máquina local. Falaremos mais sobre objetos adiante.
Agora, apenas a título de exemplo, alguns comandos do VBA que utilizam um
objeto do tipo RecordSet para descobrir o número de registros da tabela Pedidos:

            Dim db As DAO.Database
            Dim rs As DAO.Recordset
            Dim numreg As Integer

            Set db = CurrentDb()
            Set rs = db.OpenRecordset("Pedidos")
            numreg = rs.RecordCount
            MsgBox "NÚMERO DE REGISTROS DA TABELA PEDIDOS: " & numreg

Quando o Microsoft Access executa estes comandos é emitida a seguinte mensagem:




Importante: Não se preocupe em entender os comandos utilizados no exemplo
anterior. Vamos estudar em detalhes, uma série de objetos, inclusive os objetos
Database e RecordSet, utilizados no exemplo anterior.
Vista
                                      Virtual
                                       INFOR MÁT ICA




                    O Ambiente de Programação.

       O Microsoft Access fornece um ambiente de programação bastante poderoso,
com uma série de recursos que facilitam a criação de código VBA. Neste tópico vamos
aprender a utilizar os aspectos básicos do Ambiente de Programação do VBA:
       Se não tivéssemos disponível um Ambiente de Programação, teríamos que
lembrar da sintaxe de todos os comandos, dos métodos e propriedades dos
objetos. Convenhamos que isso é praticamente impossível, pois com o VBA temos
acesso a milhares de objetos (é isso mesmo: milhares de objetos). Cada objeto pode
ter dezenas de propriedades, métodos e coleções. O ambiente de Desenvolvimento
fornece uma série de facilidades enquanto estamos criando nosso código VBA. Por
exemplo, ao digitar o nome de um objeto e um ponto será aberta, automaticamente,
uma lista com todos os métodos e propriedades deste objeto. Ao invés de lembrar
do    nome dos métodos/propriedades, basta       selecioná-los  em uma lista. Se
selecionarmos um método, ao digitarmos o parênteses de abertura, será exibida
uma lista com os argumentos esperados pelo método, bem como o tipo (texto,
número, data, etc) de cada argumento. Se digitarmos um comando incorretamente,
o Ambiente de Desenvolvimento emite uma mensagem e coloca em destaque o
comando que foi digitado errado. Estas são apenas algumas das facilidades
fornecidas pelo Ambiente de Desenvolvimento do VBA.
        Para conhecermos melhor o referido ambiente, vamos a um exemplo
prático. Vamos abrir o banco de dados Nwind.mdb, que está na pasta Semana2.
Vamos fazer o logon como usuário AdmCaxias e senha abc12345. Criaremos um novo
formulário chamado Teste, formulário este que não será baseado em nenhuma
tabela/consulta, ou seja: um formulário em branco. Vamos adicionar um botão de
comando. Quando for aberto o assistente de comando vamos clicar no botão Cancelar.
Criaremos, manualmente, código VBA associado ao evento Ao clicar do botão de
comando. Ao criar o código veremos os principais Elementos/Vantagens do ambiente
de desenvolvimento. Utilizaremos o seguinte código:

            Dim db As DAO.Database
            Dim rs As DAO.Recordset
            Dim numreg As Integer

            Set db = CurrentDb()
            Set rs = db.OpenRecordset("Pedidos")
            numreg = rs.RecordCount
            MsgBox "NÚMERO DE REGISTROS DA TABELA PEDIDOS: " & numreg

 Importante: Não se preocupe em entender os comandos utilizados no exemplo
 anterior. Vamos estudar em detalhes, uma série de objetos, inclusive os objetos
 Database e RecordSet, utilizados no exemplo anterior.
Vista
                                   Virtual
                                     INFOR MÁT ICA




Para criar o formulário Teste faça o seguinte:


Execute
           Abra o Microsoft Access.
           Abra o banco de dados nwind.mdb que está na Semana2.
           Faça o logon como usuário AdmCaxias e senha abc12345.
           No painel da esquerda clique em Formulários.
           Dê um clique no botão Novo.
           Na janela "Novo Formulário" dê um clique na opção Modo estrutura,
certifique-se de que a lista de Tabelas/Colunas esteja em branco e dê um clique no
botão OK, conforme indicado na figura a seguir:




          Será aberto um formulário em branco.
          Localize a "Caixa de Ferramentas" e adicione um controle do tipo Botão de
Comando (para maiores informações sobre os controles de formulário, inclusive o
controle Botão de Comando, consulte os exercícios da primeira seman).
          Será aberto o "Assistente de botão de comando".
          Dê um clique no botão Cancelar, para fechar o assistente.
          Abra as Propriedades do botão de comando e altere o seu nome para:
BotaoEx.
          Ainda com as propriedades abertas, dê um clique na guia Evento.
          Clique no evento "Ao clicar".
          Dê um clique no botão (...) que aparece ao lado do evento Ao abrir.
          Na lista de opções que é exibida selecione Construtor de código, conforme
indicado na figura a seguir:
Vista
                                   Virtual
                                     INFOR MÁT ICA




          Dê um clique no botão OK.
          Será aberto o ambiente de desenvolvimento do VBA, conforme indicado na
figura a seguir:
Vista
                                   Virtual
                                     INFOR MÁT ICA




Para cada evento é criado um procedimento separado. Um procedimento é um
"pedaço de código" que é executado em resposta ao evento. O nome dos
procedimentos associados a eventos segue um padrão bem definido. O padrão é o
nome do controle (no nosso caso é BotaoEx) seguido de um sinal de sublinhado e
o nome interno do evento (para o Access o evento "Ao clicar" é reconhecido como
Click). Por isso, associado ao evento Ao clicar, do controle BotaoEx, temos o
seguinte procedimento:

                    Private Sub BotaoEx_Click()

                    End Sub

A palavra Private significa que o procedimento é Privado, ou seja, somente pode ser
acessado de dentro do formulário Teste. Por exemplo, não teríamos como chamar
este procedimento lá no formulário Pedios ou Clientes. O nome do procedimento é
como se fosse uma função, por isso o abre e fecha parênteses após o nome. O
procedimento poderia receber um ou mais parâmetros de entrada e retornar um ou
mais parâmetros de saída. Aprenderemos a trabalhar com parâmetros mais adiante. O
final do procedimento é indicado pelo comando: End Sub.

O nosso código de exemplo deve ser digitado dentro dos limites do procedimento
(entre as linhas Private... e End Sub).

IMPORTANTÍSSIMO: ANTES DE COMEÇARMOS A DIGITAR O CÓDIGO
PROPOSTO, VAMOS ABRIR UM PEQUENO PARÊNTESES PARA FALAR SOBRE
REFERÊNCIAS.

REFERÊNCIAS: Conforme descrito anteriormente, com o VBA temos acesso
a milhares de objetos. Por exemplo, de dentro de um formulário podemos
exibir dados gravados em uma planilha do Excel, ou em um arquivo do
DBase III. Para acessarmos, de dentro do Access, dados de uma planilha
do Excel, precisamos usar os objetos adequados. Os diversos objetos
disponíveis são disponibilizados através de Bibliotecas de Objetos. Por
exemplo, todos os objetos para acesso ao Excel, estão agrupados em um
biblioteca de objetos, todos os objetos para acesso a dados do próprio
Access, estão agrupados em uma outra Biblioteca de objetos e assim por
diante. Existem dezenas de bibliotecas, cada uma com centenas de objetos.
Para que possamos utilizar, no código VBA, objetos de uma determinada
biblioteca, precisamos, antes,     fazer uma REFERÊNCIA a biblioteca
correspondente. Ao fazer uma REFERÊNCIA a uma biblioteca, passamos a ter
acesso a todos os objetos da biblioteca. Você pode perguntar: Então porque
não é feita referência, automaticamente, a todas as bibliotecas disponíveis?
Vista
                                    Virtual
                                     INFOR MÁT ICA




Isto não é feito, pois cada referência causa um gasto adicional de memória. Se
fizéssemos referência a todas as bibliotecas disponíveis, teríamos sérios problemas
de desempenho.

Para o nosso exemplo temos que fazer referência a biblioteca DAO - Data Access
Objetct. Essa biblioteca contém uma série de objetos para acesso a dados.
Utilizaremos, intensamente, esta biblioteca durante a terceira semana de treinamento.
Para fazer referência a um biblioteca utilizamos o comando: Ferramentas ->
Referências. Surge uma janela com todas as bibliotecas disponíveis. Localize a
biblioteca "Microsoft DAO x.x Object Library", onde para x.x selecione a versão de
maior número que você encontrar na listagem, conforme indicado na figura a seguir:




Nota: Pode ser que a versão da biblioteca DAO instalada no seu computador seja
diferente. Selecione a versão disponível.

Dê um clique no botão OK e pronto, você terá feito referência a biblioteca DAO,
necessária ao nosso exemplo. Fizemos referência a esta biblioteca, pois os objetos
DataBase e RecordSet que utilizaremos, fazem parte desta biblioteca. Aprenderemos
a utilizar estes objetos, em maiores detalhes, durante a terceira semana do
treinamento. Aqui fechamos o nosso pequeno parênteses sobre REFERÊNCIAS.
Vista
                                        Virtual
                                          INFOR MÁT ICA




Vamos começar a digitar o código do nosso exemplo, para que possamos observar
mais algumas funcionalidades do Ambiente de Desenvolvimento.

Abaixo da linha Private..., digite o seguinte:

                                  Dim db As DAO.Database

Observe que após digitar a palavra As e pressionar a barra de espaços é aberta uma
listagem com todas as opções disponíveis. Você digita D e a listagem é posicionada no
primeiro elemento que começa com a letra D. Selecione DAO, conforme indicado na
figura a seguir:




Após selecionar DAO digite um ponto. Observe que, novamente, é aberta uma
listagem com todos os objetos disponíveis na biblioteca DAO. Na lista de objetos
selecione Database, conforme indicado na próxima figura.

É importante salientar que não pode haver espaço entre o ponto (.) e o nome do objeto.
Essa é uma regra geral: Não existe espaço entre dois nomes separados por ponto (.) ou
por ponto de exclamação (!).
Vista
                                        Virtual
                                          INFOR MÁT ICA




Esta sem dúvida é uma das maiores vantagens do Ambiente de Desenvolvimento. Ao
digitar o nome do objeto e um ponto, automaticamente é exibida uma lista dos
métodos/propriedades disponíveis. Essa facilidade é importantíssima, pois evita que
tenhamos que decorar o nome dos métodos/propriedades que mais utilizamos.

Digite o restante do código, indicado a seguir:

                        Dim rs As DAO.Recordset
                        Dim numreg As Integer

                        Set db = CurrentDb()
                        Set rs = db.OpenRecordset("Pedidos")
                        numreg = rs.RecordCount
                        MsgBox "NÚMERO DE REGISTROS DA TABELA PEDIDOS: " & numreg


Observe que a medida que você vai digitando o nome dos objetos, as listas
com o nome das propriedades/métodos vão sendo exibidas.
O Ambiente de Desenvolvimento também oferece uma série de menus e botões
de comando. A medida que formos utilizando estes comandos iremos explicando
cada um deles.
Agora vamos salvar o procedimento BotaoEx_Click(). Dê um clique no botão
Salvar (botão com a figura do disquete). Será aberta uma janela pedindo o
nome do Formulário: Digite Teste e dê um clique no botão OK,
conforme indicado na próxima figura:
Vista
                                    Virtual
                                      INFOR MÁT ICA




        Clique no botão "x" de cima para fechar o Ambiente de Desenvolvimento.
        Você estará de volta ao modo estrutura do formulário
        Teste.
        Agora vamos testar o código recém criado.
        Altere a legenda do botão para Exemplo de VBA!
        Vá para o modo Formulário.
        Dê um clique no botão Exemplo de VBA.
        Será exibida a mensagem indicada na figura a seguir:




         Dê um clique no botão OK para fechar essa mensagem.
         Feche o formulário Teste.
         Feche o Microsoft Access.

Nesse tópico abordamos os aspectos básicos do Ambiente de Desenvolvimento. No
restante deste treinamento utilizaremos, em diversos momentos, o Ambiente de
Desenvolvimento. A medida que formos utilizando este Ambiente, aprenderemos sobre
as demais funcionalidades do Ambiente.




Anatomia dos Módulos do VBA.

O código VBA é escrito em unidades chamadas subrotinas ou funções que são
armazenadas em módulos. Os módulos do Microsoft Access podem ser de dois tipos:

        Módulos Padrão (Standard modules).
        Módulos de Classes (Class modules).

Módulos padrão: são criados a partir da opção Módulos do banco de dados. Os
procedimentos e funções criados neste tipo de módulo podem ser utilizados a partir de
outros módulos, em formulários e relatórios. Por exemplo, posso criar um módulo
padrão chamado "Funções de Validação". Neste módulo crio uma função para
validação do CPF, outra para validação do CNPJ e uma terceira para validação do
número de processos. A partir de qualquer formulário ou relatório posso "chamar" as
funções contidas no módulo "Funções de Validação". Esta é uma maneira de
"reaproveitar" as funções que criamos, ou seja, criamos uma única vez e
utilizamos nos vários locais onde a função for necessária.

Módulos de classe: Podem ser criados como Módulos padrão ou podem ser
associados a um formulário ou relatório. Ao criarmos código associado com um
evento em um formulário ou relatório, o Microsoft Access, automaticamente, cria um
módulo associado com o formulário/relatório.

Anatomia de um módulo VBA: Um módulo VBA é formado por uma seção de
declarações e uma série de funções/procedimentos. A diferença básica entre função
e procedimento é que a função retorna um ou mais valores e o procedimento
Vista
                                        Virtual
                                         INFOR MÁT ICA




simplesmente executa uma série de comandos, sem retornar valores. Na seção de
declarações podemos declarar variáveis e outros comandos especiais que terão efeito
sobre todos os componentes do módulo.

Quando criamos um módulo associado a um formulário, temos uma série de
procedimentos. Cada vez que criamos código em resposta a um evento, é criado um
novo procedimento no modo associado ao formulário.

Na próxima página temos um exemplo de uma estrutura genérica de um módulo.


      ' ANATOMIA DE UM MÓDULO DO VBA.

      'Seção de declarações, as opções/variáveis
      'desta seção são acessíveis em qualquer parte do módulo.

      Option Compare Database
      Option Explicit

      'Início do procedimento 1 - Sub1

      Private Sub Sub1()
      Comando1 do Sub1
      Comando2 do Sub1
      ...
      Comandon do Sub1
      End Sub

      'Final do procedimento 1 - Sub1

      'Início do procedimento 2 - Sub2

      rivate Sub Sub2()
      Comando1 do Sub2
      Comando2 do Sub2
      ...
      Comandon do Sub2
      End Sub

      'Final do procedimento 2 - Sub2

      ...

      'Início do procedimento n - Subn

      Private Sub Subn()
      Comando1 do Subn
      Comando2 do Subn
      ...
      Comandon do Subn
      End Sub

      'Final do procedimento n - Subn

 Obs.: As linhas que iniciam com um apóstrofe são linhas de comentário, isto é, não
 serão executadas pelo Microsoft Access. O uso de comentários é uma forma de
Vista
                                    Virtual
                                      INFOR MÁT ICA




 fazer a documentação do código VBA, o que facilita a compreensão e manutenção
 de nossas rotinas.

 Agora chegou o momento de estudarmos os principais comandos do VBA.




                     Principais comandos do VBA

Tipos de dados

Declaração e “tipo” de variável:

Uma variável é um espaço na memória do computador, reservado para armazenar
um ou mais valores. Fazemos referência a este espaço utilizando nomes. Como o
valor armazenado pode variar, a medida que o código VBA é executado, estas
estruturas são chamadas de variáveis.

No VBA, não é obrigatório a declaração de variáveis. Porém é recomendável que
declaremos todas as variáveis, de tal forma que o código fique mais claro e de fácil
compreensão. Para declararmos uma variável, utilizamos o comando Dim, conforem
exemplificado abaixo:

              Dim x
              Dim nome
              Dim teste

Neste caso estamos apenas declarando o nome da variável, sem declarar de que tipo
(texto,inteiro, data, etc) é a variável. Uma variável declarada sem tipo é considerada
do tipo Variant, o que na prática significa que a variável pode conter qualquer tipo
de valor. Pode parecer uma prática interessante a não declaração do tipo da
variável, porém isso é altamente desaconselhável. Se não declararmos o tipo,
conforme descrito anteriormente, a variável poderá conter qualquer valor. Neste caso
o que impede de um campo numérico conter valores de texto ou vice-versa??

Nota: Para exemplificar os diversos comandos básicos da linguagem VBA, vamos
utilizar o formulário Teste. Para cada comando que será exemplificado, criaremos um
novo botão de comando e atribuiremos, ao evento Ao clicar do botão, o código do
Exemplo. Para facilitar o estudo, nomearemos o botão com um nome relacionado com
o exemplo que este representa. Por exemplo, ao criarmos o botão para exemplificar o
uso de operadores aritméticos, chamaremos este botão de ExOperAritméticos. Para
maiores informações sobre como criar código associado ao evento Ao clicar de um
botão, consulte o exemplo anterior:"Para criar o formulário Teste faça o seguinte:"

O formato geral para o comando Dim é:

              Dim nome_da_variável As tipo_da_variável

Também podemos declarar mais do que uma variável, com um único comando Dim.
Para isto, basta separar as variáveis, com vírgula, conforme exemplificado abaixo:
Vista
                                      Virtual
                                        INFOR MÁT ICA




              Dim x,y,z As String
              Dim nome as Double
              Dim teste1, teste2 As Integer

IMPORTANTE: Observe que definimos o “tipo” de cada variável. O Tipo define quais
dados podem ser armazenados em uma variável. Por exemplo,              variáveis que
armazenam valores numéricos, não devem aceitar caracteres de texto. Variáveis
que armazenam datas, não devem aceitar datas inválidas, como por exemplo
30/02/2001. Toda variável no VBScript, é do tipo Variant, isto significa que a
variável pode ser de qualquer tipo. O que define o tipo da variável é o valor que está
armazenado no momento. Existem funções que conversão de tipo, conforme veremos
mais adiante.

Também podemos utilizar variáveis que não foram, explicitamente, declaradas com
o comando Dim. Com isso, a variável é criada na memória, no momento da sua
utilização. Para fazer com que toda variável tenha que ser, explicitamente, declarada,
antes de ser utilizada, devemos utilizar o seguinte comando na seção de declaração
do módulo:

              Option Explicit

 Ao colocarmos este comando na seção de declaração do módulo, estamos definindo
 que toda variável deve ser declarada, antes de ser utilizada em uma expressão. Se
 tentarmos utilizar uma variável não declarada, será gerado um erro de compilação.
 Falaremos mais sobre erros e o tratamento de erros, na terceira semana do
 treinamento.

 Na Listagem 1, temos um exemplo simples de utilização de variáveis não declaradas
 explicitamente.




 Listagem 1 – Utilização de variáveis não declaradas.

           Dim a As Integer
           Dim b As Integer
           a=5
           b=2
           c=a+b
           Msgbox "A variável C vale: " & c


 Ao tentarmos executar este código, tendo sido definida a opção "Option Explicit",
 obteremos a mensagem de erro indicada na próxima figura. Este erro acontece porque
 tentamos utilizar uma variável c, variável esta que não foi declarada.
Vista
                                   Virtual
                                    INFOR MÁT ICA




O tipo Variant é formado de pequenas unidades, chamadas subtipos. Cada subtipo,
identifica de que maneira os dados são armazenados em uma variável do tipo
Variant Por exemplo, variáveis do subtipo Integer são armazenadas de uma maneira
diferente de variáveis do subtipo Long. Na Tabela a seguir temos uma descrição dos
principais subtipos.
Vista
                                        Virtual
                                          INFOR MÁT ICA




 Tabela - Subtipos do tipo Variant.


Empty          O Valor é zero para variáveis numéricas ou uma String de tamanho zero (“
               “), para variáveis de texto.

Null            A variável não contém dados válidos.
Boolean        Contém variáveis que somente podem assumir dois valores:Verdadeiro ou
               Falso (True ou False).

Byte           Valor inteiro, na faixa de 0 até 255.

Integer         Valor inteiro, na faixa de -32768 até 32767.

Currency        Valores na faixa de –923.337.203.685.447,5808 até
                922.337.203.685.447,5807
Long            Valor inteiro, na faixa de –2.147.483.648 até
                                         2.147.483.647.

Date(Time)      É um número que representa a data entre 01 de
                Janeiro do ano 100, até 31 de Dezembro de 9999
String          Texto de tamanho variável, pode conter, aproximadamente, 2 bilhões de
                caracteres.
Object          Pode conter um objeto qualquer, como um Controle
                                      Activex, ou um Objeto COM+

Error           Pode conter um número de erro.




Fazendo cálculos e comparações com o VBScript – Operadores.

Para realizarmos cálculos e comparações entre variáveis, podemos utilizar
operadores. Neste item trataremos sobre operadores aritméticos e operadores de
comparação.


Fazendo cálculos com os Operadores aritméticos.

Podemos realizar cálculos no VBA, utilizamos operadores aritméticos. Na Tabela a
seguir, temos uma descrição dos operadores que podemos utilizar:
Vista
                                               Virtual
                                                  INFOR MÁT ICA




TABELA - Operadores Aritméticos do VBA

Adição +                                                  Soma valor de duas ou mais variáveis
Subtração -                                               Subtração entre duas ou mais variáveis
Multiplicação *                                           Multiplica os valores de duas ou mais
                                                          variáveis.

Divisão       /                                           Divide o valor de duas ou mais variáveis
Inteiro                                                  Retona a parte inteira, da divisão entre dois
                                                          números
Exponenciação ^           x^y                             É o valor do número x, elevado na potência
                                                          Y
Modulo mod                                                Retona o resto de uma divisão de 2
                                                          números



 Execute
           Vamos abrir o formulário Teste, do banco de dados Nwind.mdb e criar um
  botão chamado ExOperadores. Vamos criar um procedimento associado a esse
  botão, onde exemplificamos o uso dos diversos operadores aritméticos.

                  Abra o banco de dados nwind.mdb que está na pastaSemana2.
                  Abra, no mode estrutura, o formulário Teste.
                  Crie um botão de comando com o nome de ExOperadores.
                  Associe o seguinte código ao evento Ao abrir, deste botão de comando:

      Dim a As Integer
      Dim b As Integer
      Dim som, subtr, divis, mult, intdivs, expo, modul As Double

      a=25
      b=3

      som=a+b
      subtr=a-b
      divis=a/b
      mult=a*b
      intdivs=ab
      expo=a^b
      modul= a mod b

      'Uso de MsgBox para exibir os resultados.
Vista
                                            Virtual
                                               INFOR MÁT ICA




MsgBox "Os números são: " & a & " e " & b & Chr(13)
MsgBox "Soma: " & som & Chr(13)& "Subtração: " & subtr & Chr(13)
MsgBox "Divisão: " & divis & Chr(13)& "Multiplicação: " & mult & Chr(13)
MsgBox "Divisão inteira: " & intdivs & Chr(13)& "Exponenciação: " & expo & Chr(13)
MsgBox "Resto da divisão: " & modul


    Após digitar o código Feche o Ambiente de
    Desenvolvimento.
    Salve o Formulário.
    Vá para o modo Formulário e dê um clique no botão
    "ExOperadores".
    Será exibida a seguinte mensagem:




    Dê um clique no botão OK.
    Será exibida a seguinte mensagem:




    Dê um clique no botão OK.
    Será exibida a seguinte mensagem:




    Dê um clique no botão OK.
    Será exibida a seguinte mensagem:
Vista
                                    Virtual
                                      INFOR MÁT ICA




        Dê um clique no botão OK.
        Será exibida a seguinte mensagem:




        Dê um clique no botão OK.
        Você estará de volta ao formulário Teste.
        Mantenha este formulário carregado. Iremos utilizá-lo nos próximos
exemplos.

      Neste exemplo utilizamos os operadores aritméticos, para realizar uma série
de operações com os valores atribuídos às variáveis “a” e “b”. Depois utilizamos a
função MsgBox, para exibir os resultados obtidos. O uso da função MsgBox,
merece alguns comentários. Primeiro, utilizamos a função MsgBox, para exibir
mensagens em uma pequena janela, chamada de Janela Pop-Up. Podemos exibir
texto e também valores de variáveis. Quando temos que exibir diversos
componentes, como um pouco de texto, em seguida o valor de uma variável, depois
mais texto, e assim por diante, devemos utilizar o operador de concatenação &.
Este operador permite que as diversas partes sejam exibidas como uma única
mensagem. Considere o exemplo da seguinte linha de código:

       MsgBox "Os números são: " & a & " e " & b & Chr(13)

     Neste exemplo, primeiro é exibido o texto: "Os números são:", logo em seguida
o valor da variável a. Observe que as duas partes são concatenadas com o operador &.
Depois concatenamos o valor da variável b, e finalmente utilizamos a função Chr(13).
A função Chr(número), envia o caracter correspondente ao número digitado entre
parênteses. Este número, é o número do caracter no padrão ASCII (American Standard
Caracter Interchange Information). No código ASCII, cada caracter possui um número
associado. No caso o número 13, é associado ao <ENTER>. Com isso estamos
enviando um <ENTER>, para a caixa de mensagem, o que equivale a uma troca de
linha. Com isso, utilizamos o Chr(13), para simular um <ENTER>, de tal maneira que os
dados não saiam todos “emendados”, na mesma linha.
Vista
                                     Virtual
                                       INFOR MÁT ICA




 Com o uso de operadores, podemos realizar uma série de operações sobre as
 variáveis existentes no Script.


Comparando valores com os Operadores de comparação.

      Em determinadas situações, existe a necessidade de efetuarmos comparações
entre os valores de duas ou mais variáveis ou expressões. Com base no resultado
da comparação – Verdadeiro ou Falso -, a execução do código VBA pode seguir
caminhos diferentes. Normalmente utilizamos comparações, nas estruturas de
controle do código, também conhecidas como laços de controle. Para que possamos
estudar os operadores de comparação, vamos apresentar uma das estruturas de
controle mais simples que existem no VBA, a estrutura If Then Else. Abaixo temos
um exemplo do funcionamento da estrutura If Then Else:

 If x>y Then
         ‘ Comandos a serem executados quando x for maior do que y
         Comando 1
          Comando 2
          ... Comando
          n
 Else
         ‘ Comandos a serem executados quando x for menor ou igual a y
         Comando 1
          Comando 2
          ... Comando
          n
 End If

       Conforme podemos ver, a estrutura If Then Else, é bastante simples. Fazemos
um teste no início da estrutura. Se o valor do teste for verdadeiro, executamos os
comandos na seqüência, caso contrário, executamos os comandos após o Else. Note
que utilizamos o operador de comparação “maior do que: >”, no caso x>y, estamos
testando se x é maior do que y.
Vista
                                    Virtual
                                     INFOR MÁT ICA




Podemos utilizar laços If Then Else mais complexos, como os do exemplo:

If x>y Then
        ‘ Comandos a serem executados quando x for maior do que y
        Comando 1
         Comando 2
         ... Comando
         n
ElseIf x=y Then
        ‘ Comandos a serem executados quando x for igual a y
        Comando 1
         Comando 2
         ... Comando
         n
Else
        ‘ Comandos a serem executados quando x for menor do que y
        Comando 1
         Comando 2
         ... Comando
         n
End If

Podemos utilizar tantos ElseIf, quantos forem necessários.

Na Tabela a seguir temos uma descrição dos operadores de comparação.


Tabela - Operadores de comparação do VBA.
Operador                    Símbolo                          Descrição
Igualdade                   =                                É igual a
Diferente                   <>                               É diferente de
Maior que                   >                                É maior do que
Menor que                   <                                É menor do que
Maior ou igual a            >=                               É maior ou igual a
Menor ou igual a            <=                               É menor ou igual a
Vista
                                      Virtual
                                        INFOR MÁT ICA




Execute
         Vamos ir para o modo Estrutura do formulário Teste, do banco de dados
Nwind.mdb e criar um botão chamado ExOperadoresComparação. Vamos criar um
procedimento associado a esse botão, onde exemplificamos o uso dos diversos
operadores de comparação do VBA.

        Vá para o modo estrutura do formulário Teste.
        Crie um botão de comando com o nome de
        ExOperadoresComparação.
        Associe o seguinte código ao evento Ao abrir, deste botão de comando:

             Dim x,y,z,k As Integer

             x=12
             y=15
             z=20
             k=15

             If x<y Then
                  MsgBox "x é menor do que y."
             Else
                  MsgBox "x é maior do que y."
             End If

             If y<x Then
                  MsgBox "Y é menor do que x"
             Else
                  MsgBox "Y é maior do que x"
             End If

             If y<=k Then
                  MsgBox "y é menor ou igual à k"
             Else
                  MsgBox "Y é maior do que k"
             End If

             If x<>z Then
                  MsgBox "x e y são diferentes"
             End If



       Após digitar o código Feche o Ambiente de Desenvolvimento.
       Salve o Formulário.
       Vá para o modo Formulário e dê um clique no botão
       "ExOperadoresAritméticos".
       Será exibida a seguinte mensagem:
Vista
                                  Virtual
                                   INFOR MÁT ICA




        Dê um clique no botão OK.
        Será exibida a seguinte mensagem:




        Dê um clique no botão OK.
        Será exibida a seguinte mensagem:




        Dê um clique no botão OK.
        Será exibida a seguinte mensagem:




        Dê um clique no botão OK.
        Você estará de volta ao formulário teste.
        Mantenha-o aberto para os próximos exemplos.

      O uso de Operadores de comparação, amplia o leque de possibilidades para
nossos programas em VBA. Devemos ter alguns cuidados quando comparamos
variáveis que possuem valores de tipos diferentes, como por exemplo, número e
texto. A Tabela a seguir descreve o que acontece, quando comparamos variáveis
com valores de tipos diferentes.
Vista
                                  Virtual
                                    INFOR MÁT ICA




Com a utilização dos operadores aritméticos e de comparação, ampliamos bastante o
leque de opções, na criação de códigos com o VBA. No próximo item, veremos
alguns detalhes sobre “Escopo” de variáveis.



O Escopo das variáveis, no VBA.

O escopo de uma variável, define em que partes do código a variável pode ser
utilizada. Em VBA, podemos ter os seguintes escopos para as variáveis:

Escopo de Módulo: Uma variável declarada dentro do Múdulo, mas fora de
qualquer Procedimento. Com isso a variável pode ser utilizada dentro de todo o
bloco de código do Módulo, inclusive dentro dos Procedimentos, caso exista algum.
Uma variável declarada em nível de Módulo, existe enquanto o Módulo estiver sendo
executado.São as variáveis declaradas na seção de Declarações do Módulo. Uma
variável declarada em nível de Módulo, poderá ser utilizada em todos os
procedimentos/funções do módulo.

Escopo de procedimento: A variável        somente pode ser utilizada, dentro do
procedimento onde esta é declarada. Se tentarmos utilizar a variável fora do
procedimento, onde a ela foi declarada, não teremos acesso a ela. Uma variável
declarada em nível de procedimento, existe enquanto o procedimento estiver sendo
executado.
Vista
                                    Virtual
                                      INFOR MÁT ICA




 NOTA= Um procedimento é um bloco de código que pode ser chamado em qualquer
 ponto do Módulo. Ao chamarmos um procedimento, a execução é deslocada para
 dentro do procedimento. Após concluído o procedimento, a execução segue com a
 linha seguinte à que chamou o procedimento. Veremos maiores detalhes sobre
 procedimentos e funções, mais adiante.

 Vamos a um exemplo prático, para entendermos melhor este conceito de escopo de
 uma variável.

 Exemplo: Vamos ir para o modo Estrutura do formulário Teste, do banco de
 dados Nwind.mdb e criar um botão chamado ExEscopo. Vamos criar um
 procedimento associado a esse botão, onde exemplificamos o conceito de escopo
 de variáveis.

 Execute
         Abra o banco de dados nwind.mdb que está na pasta Semana2.
         Faça o logon como usuário AdmCaxias e senha abc12345.
         Vá para o modo estrutura do formulário Teste.
         Crie um botão de comando com o nome de ExEscopo.
         Associe o seguinte código ao evento Ao abrir, deste botão de comando:

            Dim a,b As Integer

            x=10
            x=20

            Call proc1
            ' Agora vamos tentar utilizar os valores de a e b
            ' Fora do procedimento proc1.
            ' Observe que a variável aux1 não é calculada
            ' corretamente, uma vez que os valores de a e b
            ' não estão disponíveis, fora do procedimento proc1

            Aux1 = a + b
            MsgBox "aux1= " & Aux1

          O comando Call faz o chamado ao procedimento proc1. Este procedimento
deve ser definido no mesmo módulo, caso contrário um erro será gerado. Ao
encontrar esse comando o Access desloca a execução para o procedimento proc1,
executa os comandos deste procedimento e após encerrar continua a execução a
partir do comando seguinte ao comando Call.
          Vá para a seção de Declarações e declare as seguintes variávies:
Vista
                                     Virtual
                                         INFOR MÁT ICA




              Dim x, y,aux1 As Integer

         Para deslocar-se, rapidamente para a seção de Declarações, utilize a lista
indicada na figura a seguir. Nesta lista selecione a opção (Geral).




         Agora vamos criar o procedimento proc1, procedimento este que é chamado
no evento ao clicar do botão ExEscopo.
         Vá para o final do módulo e digite o seguinte código:

      'Agora vamos criar um procedimento
      'E declarar duas variáveis dentro deste procedimento.
      'Estas variáveis somente serão visíveis,
      'Dentro deste procedimento.

      Sub proc1()
         Dim a, b
         a=5
         b=7
         MsgBox "x= " & x & " y= " & y & " a= " & a & " b= " & b
      End Sub

        Feche o Ambiente de Desenvolvimento.
        Vá para o modo formulário.
        Dê um clique no botão ExEscopo.
        Será exibida a janela indicada na Figura a seguir:




        Dê um clique no botão OK. Será exibida a janela indicada na figura a seguir:
Vista
                                   Virtual
                                     INFOR MÁT ICA




         Observe que o valor da variável aux1 (foi calculado incorretamente), pois a
variável aux1 depende dos valores de "a" e "b". Como as variáveis a e b foram
declaradas dentro do procedimento proc1, elas não podem ser acessadas de fora do
procedimento proc1, ou seja, após a execução do procedimento ter sido encerrada.
         Dê um clique no botão OK.
         Mantenha o formulário Teste aberto.
         Vá para o modo Estrutura do formulário Teste.

Com esse exemplo, foi possível verificar, na prática, o conceito de escopo
(algumas vezes chamado de visibilidade) das variáveis. No próximo item,
trataremos das Estruturas e laços de controle, que são elementos muito importantes
na criação de scripts.


Estruturas para controle de fluxo em VBScript.

Para que possamos criar aplicações com utilidade prática, aplicadas na solução de
problemas reais, precisamos poder controlar o fluxo de execução de um script. No
VBScript, temos diversas “estruturas” que permitem um controle bastante eficaz do
fluxo de execução. Neste item, estaremos estudando diversas destas estruturas.



Estruturas de decisão

Em um primeiro grupo, temos as chamadas estruturas de decisão. São estruturas que
realizam um teste lógico, e executam determinados comandos quando o teste
resultar verdadeiro, ou um conjunto diferente de comandos, quando o teste resultar
falso. Agora passaremos a analisar as estruturas de decisão, disponíveis no VBA.

 A estrutura If ... Then

A estrutura If...Then, é uma das estruturas de decisão mais conhecidas. Toda
linguagem de programação implementa esta estrutura. É utilizada para executar
determinados comandos, caso uma condição seja verdadeira. A forma geral desta
estrutura é a seguinte:

                If condição Then
                        Comando1
                        Comando2
                        ...
                        Comandon
                End IF.

Uma condição é testada, caso a condição seja verdadeira, um ou mais comandos
podem ser executados. Considere o exemplo a seguir:
Vista
                                           Virtual
                                            INFOR MÁT ICA




                 Dim x, y

                 x=10
                 y=15

                 If x<y Then
                       MsgBox “x é menor do que y”
                 End If


Neste exemplo, a mensagem “x é menor do que y”, será exibida, uma vez que o
teste x<y é verdadeiro, conforme podemos constatar pelos valores atribuídos as
variáveis x e y.

 A estrutura If ... Then...Else

A estrutura If...Then...Else, acrescenta mais uma possibilidade a estrutura If...Then.
É utilizada para executar determinados comandos, caso uma condição seja verdadeira,
ou um conjunto diferente de comandos, caso a condição seja falsa. A forma geral
desta estrutura é a seguinte:


                        If condição Then
                                Comando1
                                Comando2
                                ...
                                Comandon
                        Else
                                Comando1
                                Comando2
                                ...
                                Comandon
                        End IF

Uma condição é testada, caso a condição seja verdadeira, um determinado comando,
ou conjunto de comandos será executado; caso a condição seja falsa, um comando,
ou conjunto de comandos diferentes, será executado. Considere o exemplo a seguir:

                 Dim x, y

                 x=15
                 y=10

                 If x<y Then
                       MsgBox “x é menor do que y”
                 Else
                       MsgBox “x é maior do que y”
                 End If


Neste exemplo, a mensagem “x é maior do que y”, será exibida, uma vez que o teste
x<y é falso, conforme podemos constatar pelos valores atribuídos as variáveis x e y.

 A estrutura If ... Then...ElseIf...Else
Vista
                                                  Virtual
                                                    INFOR MÁT ICA




A estrutura If...Then...ElseIf, nos dá uma poder maior, para testarmos diversas
possibilidades. É utilizada quando precisamos realizar mais do que um teste lógico.
Neste caso, para cada novo teste que se faça necessário, utilizamos um ElseIf. A
forma geral desta estrutura é a seguinte:

 If condição Then
        Comandos a serem executados, caso a condição seja verdadeira.
                                      Comando1
                                      Comando2
                                      ...
                                      Comandon
 ElseIf condição-2
          Comandos a serem executados, caso a condição2 seja verdadeira.
                                      Comando1
                                      Comando2
                                      ...
                                      Comandon
 ElseIf condição-3
          Comandos a serem executados, caso a condição3 seja verdadeira.
                                      Comando1
                                      Comando2
                                      ...
                                      Comandon

 ...

 ElseIf condição-n
         Comandos a serem executados, caso a condição n seja verdadeira.
                                      Comando1
                                      Comando2
                                      ...
                                      Comandon
 Else
        Comandos a serem executados, caso nenhuma das condições anteriores seja verdadeira.
                                      Comando1
                                      Comando2
                                      ...
                                      Comandon
 End IF.


Uma condição é testada, caso a condição seja verdadeira, um determinado comando,
ou conjunto de comandos será executado; caso a condição seja falsa, podemos
fazer um segundo teste (condição-2). Caso a segunda condição seja verdadeira, um
determinado comando, ou conjunto de comandos será executado, a assim por diante,
para n condições. Caso nenhuma das condições seja verdadeira, os comandos após a
cláusula Else, serão executados.
Vista
                                      Virtual
                                       INFOR MÁT ICA




 Considere o exemplo a seguir:

                     Dim x, y
                     Dim z, k
                     Dim w, p

                     x=35
                     y=30
                     z=25
                     k=20
                     w=15
                     p=10

                     If x<y Then
                     MsgBox “x é menor do que y”
                     ElseIf x<z Then
                     MsgBox “x é menor do que z”
                     ElseIf x<k Then
                     MsgBox “x é menor do que 4”
                     ElseIf x<w Then
                     MsgBox “x é menor do que w”
                     ElseIf x<p Then
                     MsgBox “x é menor do que p”
                     Else
                     MsgBox “x é o maior dos números”
                     End If


Neste exemplo, a mensagem “x é maior dos números”, será exibida, uma vez que
todos os testes anteriores falham (pois x é o maior número), com isso somente
será executado o último MsgBox, que faz parte do Else.

 Mas o que acontece, quando um dos ElseIf é verdadeiro ?

Os teste vão sendo feitos. Quando o teste de um dos ElseIf for verdadeiro, os
comandos abaixo do ElseIf verdadeiro, serão executados e o laço será encerrado.
Em resumo, quando um dos ElseIf apresentar um teste verdadeiros, os comandos
relacionados serão executados, e os demais não serão avaliados, seguindo a execução
para o primeiro comando, após o End If.

 A estrutura Select...Case

Quando precisamos realizar uma série de testes, é mais eficiente utilizarmos uma
única estrutura Select...Case, do que utilizarmos uma série de testes utilizando a
estrutura If...Then...ElseIf.

O funcionamento da estrutura Select...Case, é bastante intuitivo.
Vista
                                      Virtual
                                       INFOR MÁT ICA




 Considere o exemplo a seguir:


       Dim x
       x=10

       Select Case x
         Case 2
            MsgBox “X vale 2 !”
         Case 4
            MsgBox “X vale 4 !”
         Case 6
            MsgBox “X vale 6 !”
         Case 8
            MsgBox “X vale 8 !”
         Case 10
            MsgBox “X vale 10 !”
         Case Else
            MsgBox “X não é um número par, menor do que 12 ”
       End Select

A estrutura Select Case x, vai testar o valor de x. Em cada um dos Case, o valor de
x está sendo testado. Quando for encontrado um valor coincidente com o de x, os
comandos abaixo deste Case serão executados. No nosso exemplo, o comando
MsgBox “X vale 10 !”, abaixo de Case 10, será executado. O comando abaixo do
Case Else somente será executado, se todos os testes anteriores falharem.

O uso da estrutura Select...Case, torna o código mais eficiente e de mais fácil leitura.


Estruturas de repetição.
Em determinadas situações, precisamos repetir um ou mais comandos, um número
específico de vezes, ou até que uma determinada condição torne-se verdadeira ou falsa.
Por exemplo, pode ser que haja a necessidade de percorrer todos os registros de uma
determinada tabela, até que o último registro seja alcançado. Para isso, utilizamos as
chamadas estruturas de repetição, ou Laços. A partir de agora, estaremos analisando as
estruturas de repetição disponíveis.

 A estrutura For...Next.

Utilizamos o laço For...Next, para repetir um segmento de código, um número
determinado de vezes. Utilizamos esta estrutura, quando já sabemos o número de
vezes que uma determinada seção de código deve ser repetida. Neste tipo de
estrutura, normalmente, utilizamos uma variável como contador. Este contador varia
de um valor inicial até um valor final. O Formato geral desta estrutura é o seguinte:
Vista
                                       Virtual
                                         INFOR MÁT ICA




                      For contador=inicio to fim incremento
                             Comando1
                             Comando2
                             ...
                             Comandon
                      Next

No início a variável contador tem o valor definido para um determinado valor. Em cada
passagem do laço, a variável contador é incrementada pelo valor definido em
incremento. Caso não seja definido o incremento, será utilizado o padrão 1.

Considere o exemplo a seguir:

              Dim x
              x=10
              Soma=0

              ‘ Faz a soma dos 10 primeiros números maiores do que zero

              For i=1 to x
                     Soma = Soma +i
              Next

              MsgBox “Valor da Soma = “ & Soma


Neste exemplo, a variável i inicia com o valor 1. Em cada passo, o valor de i é
acrescentado à variável Soma. Como o incremento não foi definido, será utilizado o
padrão que é 1. Com isso, ao final do laço For...Next, a variável Soma, terá
armazenado o valor da soma dos 10 primeiros números inteiros.

Poderíamos utilizar um valor de incremento diferente de 1, para, por exemplo, obter
a soma somente dos números ímpares menores do que 10:

       Dim x
       x=10
       Soma=0

       ' Faz a soma dos 10 primeiros números ímpares

       For i=1 to x Step 2
              Soma = Soma +i
       Next

       MsgBox “Valor da Soma = “ & Soma
Vista
                                     Virtual
                                       INFOR MÁT ICA




Com este Script, obtemos o resultado indicado na Figura a seguir:




 A estrutura Do...Loop.

Esta estrutura pode ser utilizada para repetir um trecho de código, enquanto uma
determinada condição for verdadeira, ou até que uma determinada condição
torne-se verdadeira. Podemos utilizar dois operadores condicionais diferentes:
While ou Until. Os operadores While ou Until, podem ser utilizados de duas
maneiras diferentes: No início do laço, ou no final do laço. Com isso temos quatro
situações distintas, vamos analisar cada uma delas, a partir de agora.

 A estrutura Do While Condição...Loop.

Neste caso, estamos utilizando o operador condicional While, no início do laço. O
formato geral, neste caso é o seguinte:

                            Do While condição/teste
                                  Comando1
                                  Comando2
                                  ...
                                  Comandon
                            Loop

Nesta estrutura, enquanto a condição for verdadeira, o código dentro do laço é
executado. Quando a condição tornar-se falsa, o primeiro comando após o final do
laço, será executado. Neste caso, se a condição for falsa já na primeira vez, o laço não
será executado nenhuma vez.

IMPORTANTE= O Código dentro do laço deve ser capaz de alterar a condição
para Falso, quando for necessário, pois caso contrário a condição será sempre
verdadeira, e os comandos dentro do laço ficarão em execução, infinitamente, ou até
o programa travar. A criação de laços infinitos, devido a erros de programação, é
uma causa comum de erros e travamentos.
Vista
                                        Virtual
                                         INFOR MÁT ICA




 Considere o exemplo a seguir:

       Dim x
       x=10
       Contador=1
       Soma=0

       ' Faz a soma dos 10 primeiros números maiores do que zero

       Do While Contador <= x
            Soma = Soma + Contador
            Contador = Contador + 1
       Loop

       MsgBox “Valor da Soma = “ & Soma

Observe que dentro do laço, vamos Incrementando o valor da variável Contador,
uma unidade para cada passagem do laço. Com isso, quando o valor de Contador,
atingir 11, o teste do início do laço torna-se falso, e o laço é encerrado.


 A estrutura Do... Loop While Condição.

Neste caso, deslocamos o teste de condição para o final do laço. Com o teste no
final do laço, o código dentro do laço, será executado, pelo menos uma vez, pois o
teste somente é feito no final, e continuará sendo executado, enquanto a condição
for verdadeira. O formato geral, neste caso é o seguinte:

                      Do
                            Comando1
                            Comando2
                            ...
                            Comandon
                      Loop While condição/teste

Nesta estrutura, enquanto a condição for verdadeira, o código dentro do laço é
executado. Quando a condição tornar-se falsa, o primeiro comando após o final do
laço, será executado. Neste caso, se a condição for falsa já na primeira vez, o laço
será executado uma única vez.

IMPORTANTE= O Código dentro do laço deve ser capaz de alterar a condição
para Falso, quando for necessário, pois caso contrário a condição será sempre
verdadeira, e os comandos dentro do laço ficarão em execução, infinitamente, ou até
o programa travar. A criação de laços infinitos, devido a erros de programação, é
uma causa comum de erros e travamentos.
Vista
                                        Virtual
                                         INFOR MÁT ICA




 Considere o exemplo a seguir:

       Dim x
       x=10
       Contador=1
       Soma=0

       ‘ Faz a soma dos 10 primeiros números maiores do que zero

       Do
             Soma = Soma + Contador
             Contador = Contador + 1
       Loop While Contador <= x

       MsgBox “Valor da Soma = “ & Soma

 Vamos modificar um pouco o nosso exemplo. Considere o exemplo mostrado a seguir:


       Dim x
       x=10
       Contador=11
       Soma=0

       ‘ O laço será executado uma única vez, pois a condição
       ‘ Contador < x é falsa.

       Do
             Soma = Soma + Contador
             Contador = Contador + 1
       Loop While Contador <= x

       MsgBox “Valor da Soma = “ & Soma


Qual o valor será exibido para a variável Soma ?

Muito simples. A condição Contador < x é falsa, pois x=10 e Contador=12 (Lembre que
o Contador foi incrementado de uma unidade dentro do laço, antes do teste ser
realizado). Neste caso, o laço será executado uma única vez, pois o teste de
condição está no final do laço. Quando o laço é executado, é atribuido o valor 11
para a variável Soma. Com isso, o valor exibido para a variável Soma, será 11.
Vista
                                        Virtual
                                         INFOR MÁT ICA




 A estrutura Do Until Condição...Loop.

Neste caso, estamos utilizando o operador condicional Until, no início do laço. O
formato geral, neste caso é o seguinte:

                              Do Until condição
                                     Comando1
                                     Comando2
                                     ...
                                     Comandon
                              Loop

Nesta estrutura, enquanto a condição for falsa, o código dentro do laço é
executado. Quando a condição tornar-se verdadeira, o primeiro comando após o final
do laço, será executado. Neste caso, se a condição for verdadeira, já na primeira vez,
o laço não será executado nenhuma vez.

IMPORTANTE= O Código dentro do laço deve ser capaz de tornar a condição
Verdadeira, quando for necessário, pois caso contrário a condição será sempre
Falsa, e os comandos dentro do laço ficarão em execução, infinitamente, ou até o
programa travar. A criação de laços infinitos, devido a erros de programação, é uma
causa comum de erros e travamentos.

Considere o exemplo a seguir:

       Dim x
       x=10
       Contador=1
       Soma=0

       ‘ Faz a soma dos 10 primeiros números maiores do que zero

       Do Until Contador > x
             Soma = Soma + Contador
             Contador = Contador + 1
       Loop

       MsgBox “Valor da Soma = “ & Soma

Observe que dentro do laço, vamos Incrementando o valor da variável Contador,
uma unidade para cada passagem do laço. Com isso, quando o valor de Contador,
atingir 11, o teste do início do laço torna-se Verdadeiro, e o laço é encerrado.
Vista
                                        Virtual
                                          INFOR MÁT ICA




 A estrutura Do... Loop Until Condição.

 Neste caso, deslocamos o teste de condição para o final do laço. Com o teste no
 final do laço, o código dentro do laço, será executado, pelo menos uma vez, pois o
 teste somente é feito no final, e continuará sendo executado, enquanto a condição
 for Falsa. O formato geral, neste caso é o seguinte:

                              Do
                                    Comando1
                                    Comando2
                                    ...
                                    Comandon
                              Loop Until condição

Nesta estrutura, enquanto a condição for Falsa, o código dentro do laço é executado.
Quando a condição tornar-se Verdadeira, o primeiro comando após o final do laço,
será executado. Neste caso, se a condição for Verdadeira, já na primeira vez, o laço
será executado uma única vez.

IMPORTANTE= O Código dentro do laço deve ser capaz de tornar a condição
Verdadeira, quando for necessário, pois caso contrário a condição será sempre
Falsa, e os comandos dentro do laço ficarão em execução, infinitamente, ou até o
programa travar. A criação de laços infinitos, devido a erros de programação, é uma
causa comum de erros e travamentos.

 Considere o exemplo a seguir:


       Dim x
       x=10
       Contador=1
       Soma=0

       ‘ Faz a soma dos 10 primeiros números maiores do que zero

       Do
             Soma = Soma + Contador
             Contador = Contador + 1
       Loop Until Contador > x

       MsgBox “Valor da Soma = “ & Soma
Vista
                                    Virtual
                                      INFOR MÁT ICA




Vamos modificar um pouco o nosso exemplo. Considere o exemplo a seguir:

      Dim x
      x=10
      Contador=11
      Soma=0

      ‘ O laço será executado uma única vez, pois a condição
      ‘ Contador >= x é verdadeira.

      Do
            Soma = Soma + Contador
            Contador = Contador + 1
      Loop Until Contador >= x

      MsgBox “Valor da Soma = “ & Soma


Qual o valor será exibido para a variável Soma ?

Muito simples. A condição Contador>= x é falsa, pois x=10 e Contador=12 (Lembre
que o Contador foi incrementado de uma unidade, na linha 11, na primeira
passagem do laço). Neste caso, o laço será executado uma única vez, pois o teste
de condição está no final do laço. Quando o laço é executado, é atribuido o valor
11 para a variável Soma. Com isso, o valor exibido para a variável Soma, será 11.

Exercício: Crie um formulário onde são adicionados dois campos para digitação de
valores inteiros. Adicione um botão chamado Calcular. O usuário digita um valor no
primeiro campo e outro valor no segundo campo. O valor do segundo campo deve
ser maior do que o valor do primeiro campo. O sistema deve fazer essa verificação.
Deve haver um grupo com dois botões de rádio. Um associado ao valor (Pares) e
outro associado ao valor (Ímpares). O usuário marca uma destas opções e clica no
botão Calcular. O sistema calcula a soma dos números pares ou ímpares (de acordo
com a seleção do usuário), dentro do intervalo definido pelos valores digitados pelo
usuário.
Vista
                                   Virtual
                                     INFOR MÁT ICA




Funções, procedimentos e eventos com VBScript.


Introdução

Neste tópico, veremos uma série de aspectos que vão além do básico do VBA.
Iniciaremos falando um pouco mais sobre tipos de dados e funções para conversão
de tipos. Este tópico é de grande importância, principalmente quando criamos código
que efetua cálculos, como por exemplo o cálculo do imposto em um volume de
dados do contribuinte.

Depois passaremos a analisar uma série de funções internas do VBA. São funções
que fazem parte do Microsoft Access, como por exemplo a função Date(), que retorna
a data do sistema. Na seqüência, aprenderemos a criar nossas próprias funções e
Sub-rotinas. Aprenderemos as diferenças entre uma Sub-rotina e uma função, e
quando utilizar uma ao invés da outra.



Tipos de dados e funções para conversão de tipos.

Neste item, aprenderemos a determinar qual o tipo de dado que está armazenado em
uma variável, bem como a converter valores de um tipo para outro, utilizando as
funções para conversão de tipos.



Determinando o Tipo de Dados contido em uma variável.

Existem diversas funções, que permitem que seja determinado o tipo de valor contido
em uma variável. Existem diversas aplicações para este tipo de função. Por exemplo,
ao digitar dados em um formulário, podemos utilizar uma função para determinar se
os valores digitados pelo usuário, não apresentam problemas. Por exemplo, o usuário
pode ter digitado, por engano, texto em um campo que deve conter valores
numéricos.

 A função IsArray.

Um Array é um tipo especial de variável, a qual pode armazenar diversos valores
em uma única variável. De uma forma simples, um Array é um conjunto. Por
exemplo, poderíamos ter uma variável Array na qual são armazenados todos os
códigos de tributo, válidos. Cada valor armazenado no Array é um elemento do
conjunto. Um outro exemplo: Poderíamos criar um Array para armazenar os nomes
dos meses do ano. Com isso teríamos um Array de 12 elementos.
Vista
                                       Virtual
                                         INFOR MÁT ICA




Cada elemento de um Array, é acessado através do nome da variável Array e de
um índice. O índice inicia em zero e não em um. Por isso se tivermos um Array
de 10 elementos, teremos o elemento 0, o elemento 1, o elemento 2, e assim por
diante, até o elemento 9. O fato do índice começar com 0, influencia na hora que
formos declarar um Array. Para declarar um Array chamado produtos, com 20
elementos, utilizaríamos a seguinte declaração:

               Dim produtos(19)

O 19 significa que temos 20 elementos (sempre um a mais do que o número que
aparece na declaração), isto é, do elemento 0, indicado por produtos(0), até o
elemento 20, indicado por produtos(19).

No exemplo a seguir, temos um exemplo simples de utilização de Array:

'Declara um Array de 7 posições
'Como a primeira posição é a posição zero,
'Indicamos o tamanho como 6, o que significa
'da posição 0 até a posição 6 = 7 elementos.

Dim Dias(6)

'Atribuímos valores para os dias da semana

Dias(0)= "Segunda-feira"
Dias(1)= "Terça-feira"
Dias(2)= "Quarta-feira"
Dias(3)= "Quinta-feira"
Dias(4)= "Sexta-feira"
Dias(5)= "Sábado"
Dias(6)= "Domingo"

'Agora utilizamos um laço For...Next
'Para criar uma String, com o conteúdo
'Do Array Dias.

For i=0 to 6
       mensagem = mensagem & "Dia: " & i+1 & " " & Dias(i)& Chr(13)
Next

'Utilizamos uma MsgBox, para exibir a mensagem
'com o conteúdo do Array Dias.

MsgBox mensagem

Exercício: Abra o formulário Teste no modo Estrutura, crie um botão chamado
ExArray e associe o código deste exemplo, ao evento Ao clicar deste botão. Teste o
funcionamento do código.
Vista
                                     Virtual
                                       INFOR MÁT ICA




Utilizamos a função IsArray, para determinar se uma variável do tipo Variant
(lembre que todas as variáveis do VBA, são do tipo Variant), está armazenando
um Array.

Utilizamos a seguinte sintaxe:

                     IsArray(NomeDaVariável)

A função IsArray retorna verdadeiro se a variável for um Array, e falso caso
contrário.

Vamos alterar um pouco o exemplo anterior, adicionando o seguinte comando, ao
final da listagem.:

              MsgBox IsArray(Dias)

o resultado seria o indicado na Figura a seguir:




A função VarType.

Podemos utilizar a função VarType, para determinar o subtipo de uma
variável. Como todas as variáveis são do tipo Variant, o subtipo pode ser
utilizado para determinar o tipo de dado armazenado na variável. Passamos
para a função, o nome de uma variável ou expressão. A função retorna um
número inteiro que indica o subtipo da variável.

A sintaxe da função é a seguinte:

                     VarType(NomeDaVariável)
ou

                     VarType(expressão)

Na Tabela a seguir temos os códigos de retorno da função VarType.
Vista
                                      Virtual
                                       INFOR MÁT ICA




Tabela - Valores de retorno da função VarType.

Valor Descrição
0 Vazio (não inicializado)
1 Nulo (dados não válidos)
2 Inteiro
3 Inteiro longo
4 Número de precisão simples
5 Número de precisão dupla
6 Monetário.
7 Data
8 Texto
9 Objeto de automação
10 Erro
11 Boleano
12 Variant (somente é utilizado com Arrays de variantes)
13 Um objeto para acesso a dados.
17 Byte
8192 Array

No exemplo a seguir, temos um exemplo de utilização da função VarType.

Dim x,y,z
Dim a, b
Dim c(20)
Dim mensagem As String

x=12
y=23.456
y=123456789
a="Este é um valor de texto !"

‘Utilizamos a função Date( ), para capturar a data do sistema.

b=Date()

mensagem    = "Tipo da variável x: " & Vartype(x) & Chr(13)
mensagem    = mensagem & "Tipo da variável y: " & Vartype(y) & Chr(13)
mensagem    = mensagem & "Tipo da variável z: " & Vartype(z) & Chr(13)
mensagem    = mensagem & "Tipo da variável a: " & Vartype(a) & Chr(13)
mensagem    = mensagem & "Tipo da variável b: " & Vartype(b) & Chr(13)
mensagem    = mensagem & "Tipo da variável c: " & Vartype(c) & Chr(13)

MsgBox mensagem




Ao executar este exemplo, obteremos o resultado indicado na Figura a seguir:
Vista
                                     Virtual
                                      INFOR MÁT ICA




Observe, principalmente, no tipo da variável z, o qual retornou 0. Isto significa que a
variável z está vazia, ou seja, não foi inicializado. Este resultado está coerente com
a Tabela anterior. Também podemos salientar o retorno para a variável b, o qual
retornou 7, indicando que o valor armazenado nesta variável é do tipo Data, o que
também está coerente com a Tabela anterior, uma vez que usamos a função Date() ,
para armazenar a data do sistema, na variável b. Finalmente observe o valor de
retorno para a variável c, o qual retornou 8192, indicando que a variável c é um
Array. Este resultado está coerente com a Tabela anterior, e com a declaração: Dim
c(20), a qual declarou a variável c como sendo um Array.

Muitas são as aplicações práticas para a função VarType, dentre as quais podemos
destacar a validação dos dados digitados em um formulário.

Exercício: Abra o formulário Teste no modo Estrutura, crie um botão chamado
ExVarType e associe o código deste exemplo, ao evento Ao clicar deste botão. Teste o
funcionamento do código.
Vista
                                       Virtual
                                        INFOR MÁT ICA




 A função IsDate.

 A função IsDate recebe uma variável ou expressão como argumento, e determina se
 a variável ou expressão é uma data válida, ou pode ser convertida para uma data
 válida. Caso o argumento passado seja uma data válida, a função retorna Verdadeiro,
 caso contrário, retorna Falso. Podemos utilizar esta função, por exemplo, para verificar
 se o usuário digitou uma data válida, em um campo de um formulário.

 A sintaxe da função IsDate é a seguinte:

                      IsDate(NomeDaVariável)

 ou
                      IsDate(expressão)

 A seguir temos um exemplo de utilização da função IsDate.

      If IsDate(Me![DataDeEntrada]) Then
             MsgBox "Você digitou uma data válida !"
      Else
                MsgBox "Data inválida, digite novamente !"
                Me![DataDeEntrada] = Null
                Me![DataDeEntrada].SetFocus
      End If

Exercício: Abra o formulário Teste no modo Estrutura, crie um botão chamado
ExIsDate e associe o código deste exemplo, ao evento Ao clicar deste botão. Crie um
campo do tipo Caixa de Texto, onde o usuário pode digitar uma data. Nomeie este
campo como DataDeEntrada. Teste o funcionamento do código.
Vista
                                       Virtual
                                         INFOR MÁT ICA




 A função IsEmpty.

A função IsEmpty recebe uma variável ou expressão como argumento, e determina
se, em algum momento, foi atribuído algum valor para a variável ou expressão. Caso
tenha sido atribuído algum valor, a função retorna Verdadeiro, caso contrário,
retorna Falso. Podemos utilizar esta função, por exemplo, para verificar se um
campo de digitação obrigatória, como por exemplo o nome, não foi deixado em
branco.

A sintaxe da função IsEmpty é a seguinte:

                      IsEmpty(NomeDaVariável)
 ou

                      IsEmpty(expressão)

A seguir temos um exemplo de utilização da função IsEmpty.

 Vamos declarar uma variável x, que nunca
 Será utilizada no nosso Script

 Dim a, b, c
 Dim x

 a=10
 b=23
 c=a+b

 If IsEmpty(x) Then
         MsgBox "A variável x, não foi utilizada !"
 End If

A variável x foi declarada porém não foi inicializada, com isso possui está vazia,
logo a função IsEmpty(x) irá retornar Verdadeiro.

 A função IsNull.

A função IsNull recebe uma variável ou expressão como argumento, e determina se,
em algum momento, foi atribuído o valor Null para a variável ou expressão. Caso
tenha sido atribuído o valor Null, a função retorna Verdadeiro, caso contrário, retorna
Falso. Para atribuirmos Null para uma variável, utilizamos a seguinte sintaxe:

         NomeDaVariável = Null
Vista
                                        Virtual
                                           INFOR MÁT ICA




IMPORTANTE: Uma variável com valor Null, não é a mesma coisa que uma
variável com valor zero, ou uma variável de texto com tamanho zero. Quando é
atribuído o valor Null para a variável, esta continua existindo na memória, porém sem
nenhum valor definido.
A sintaxe da função IsNull é a seguinte:

                      IsNull(NomeDaVariável) ou

                       IsNull(expressão)

A seguir temos um exemplo de utilização da função IsNull.

 ' Vamos declarar uma variável x, e atribuir
 ' Null, para a variável.

 Dim x

 x = Null

         If IsNull(x) Then
                   MsgBox "A variável x é Nula !"
         End If

 Este exemplo produz o seguinte resultado:




 A função IsNumeric.

A função IsNumeric recebe uma variável ou expressão como argumento, e determina
se o valor atribuído à variável ou expressão é numérico, ou pode ser convertido para
numérico. Caso o valor seja numérico, ou possa ser convertido, a função retorna
Verdadeiro, caso contrário, retorna Falso.
A sintaxe da função IsNumeric é a seguinte:

                      IsNumeric(NomeDaVariável) ou

                       IsNumeric(expressão)
Vista
                                            Virtual
                                              INFOR MÁT ICA




 A seguir temos um exemplo de utilização da função IsNumeric.


 Dim x,y,z

 x=123

 'Atribuo um valor que não pode ser convertido
 'para numérico

 y = "Riachuelo - 80"

 z = Date()

 mensagem = "Valor de x: " & x &" É numérico ? " & IsNumeric(x)& Chr(13)
 mensagem = mensagem & "Valor de y: " & y &" É numérico ? " & IsNumeric(y)& Chr(13)
 mensagem = mensagem & "Valor de z: " & z &" É numérico ? " & IsNumeric(z)
 MsgBox mensagem

Exercício: Abra o formulário Teste no modo Estrutura, crie um botão chamado
ExIsNumeric e associe o código deste exemplo, ao evento Ao clicar deste botão. Teste
o funcionamento do código.

Cabe salientar a utilização da função Date(), para capturar a data do sistema, e
atribuir esta data à variável z. Observe que esta data não foi considerada um valor
numérico para a função IsNumeric.

 A função IsObject.

A função IsObject recebe uma variável como argumento, e determina se o valor
atribuído à variável é um Objeto Activex, se for um objeto Activex, a função retorna
Verdadeiro, caso contrário, retorna Falso.

A sintaxe da função IsObject é a seguinte:

                IsObject(NomeDaVariável)

                ou

                IsObject(expressão)
Vista
                                    Virtual
                                     INFOR MÁT ICA




Funções para conversão de tipos.

Neste item aprenderemos a utilizar as principais funções para conversão de tipos.
Existem situações em que um determinado tipo de dado, deve ser convertido para
outro. Por exemplo, se tivermos um número, armazenado na forma de texto,
precisamos convertê-lo para inteiro ou double, para que possamos realizar cálculos
com o mesmo. Faremos um exemplo de cálculo do DV do CPF, onde o CPF é um
valor do tipo texto. Ao extrairmos cada dígito do CPF, estes serão extraítos como
caracteres de texto. Precisaremos utilizar uma função de conversão, para convertê-
los para números, a fim de que possamos efetuar os cálculos necessários.

Na seqüência, apresento as principais funções de conversão, bem como um pequeno
fragmento de código, exemplificando a utilização de cada uma delas.

 Função Cbool.

A função Cbool converte uma variável ou resultado de um expressão, para o subtipo
Boolean. Qualquer número, com exceção do zero, é automaticamente convertido
para Verdadeiro. O valor zero é sempre convertido para Falso. O argumento desta
função, não pode ser Texto, caso contrário será gerado um erro em tempo de
execução.

Observe este linha de código:

              MsgBox cbool(10>25) & chr(13) & cbool(3)

 Esta linha gera a mensagem indicada na Figura a seguir:




A expressão 10>25 é avaliada, como a expressão é falsa, a função Cbool retorna
Falso. Já no segundo uso da função Cbool, foi passado o parâmetro 3 para a função.
Qualquer valor diferente de zero (com exceção de texto), a função interpreta como
Verdadeiro, o que é comprovado pela Figura anterior.
Vista
                                    Virtual
                                       INFOR MÁT ICA




Função CByte.

A função CByte converte uma variável ou resultado de um expressão, para o subtipo
Byte. O valor a ser convertido, deve estar na faixa aceitável para o tipo byte, que
vai de 0 à 255. Caso o número esteja fora desta faixa, será gerada uma
mensagem de erro, em tempo de execução. O argumento desta função, não pode
ser Texto, caso contrário será gerada uma mensagem de erro, em tempo de
execução.

Observe este linha de código:

               MsgBox CByte(10+34) & chr(13) & CByte(35)

Esta linha gera a mensagem indicada na Figura a seguir:




A expressão 10+34 é calculada, e o resultado (44), é convertido para o tipo byte.
A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução,
pois o valor a ser convertido para byte, está fora da faixa de 0 à 255.

               MsgBox CByte(100+200)

Função CCur.

A função CCur converte uma variável ou resultado de um expressão, para o
subtipo Currency. O argumento desta função, não pode ser Texto, caso contrário
será gerado um erro.

Observe este linha de código:

      MsgBox CCur(250.335677+324.3333) & chr(13) & CCur(1250.326582)

Esta linha gera a mensagem indicada na Figura a seguir:




A expressão 250.335677+324.3333 é calculada, e o resultado é convertido para o tipo
Currency.

Se passarmos um argumento de texto para a função CCur, será gerado um erro de
execução, conforme indicado na Figura a seguir:
Vista
                                     Virtual
                                       INFOR MÁT ICA




Função CDate.

A função CDate converte uma variável ou resultado de um expressão, para o
subtipo Date. O argumento desta função deve estar em um formato que seja
aceitável para datas, caso contrário será gerada uma mensagem de erro, em tempo
de execução.

Observe este linha de código:

      MsgBox CDate(“31/10/1980”) & chr(13) & CDate(“23-01-2007”)

Esta linha gera a mensagem indicada na Figura a seguir:
Vista
                                    Virtual
                                     INFOR MÁT ICA




A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução,
conforme indicado na próxima figura:

               MsgBox CDate(“31/02/1980”)




Função CDbl.

A função CDbl converte uma variável ou resultado de um expressão, para o subtipo
Double. O argumento desta função não pode ser do tipo texto, caso contrário
será gerada uma mensagem de erro, em tempo de execução.

Observe este linha de código:

               MsgBox CDbl("4.940651247E-17")

Esta linha gera a mensagem indicada na Figura a seguir:
Vista
                                      Virtual
                                       INFOR MÁT ICA




 Função CInt.

A função CInt converte uma variável ou resultado de um expressão, para o subtipo
Integer. O argumento desta função não pode ser do tipo texto, caso contrário será
gerada uma mensagem de erro, em tempo de execução.

Observe este linha de código:

                MsgBox CInt(32.36) & Chr(13) & CInt(20.35+40.45)

Esta linha gera a mensagem indicada na Figura a seguir:




A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução.

 Função CLng.

A função CLng converte uma variável ou resultado de um expressão, para o subtipo
Long. O argumento desta função não pode ser do tipo texto, caso contrário será
gerada uma mensagem de erro, em tempo de execução. O argumento também não
pode estar fora da faixa admitida pelo subtipo Long, caso contrário será gerada uma
mensagem de erro, em tempo de execução.

 Observe este linha de código:

                MsgBox CLng("3462315")

 Esta linha gera a mensagem indicada na Figura a seguir:
Vista
                                     Virtual
                                       INFOR MÁT ICA




Função CSng.

A função CSng converte uma variável ou resultado de um expressão, para o
subtipo Single. O argumento desta função não pode ser do tipo texto, caso
contrário será gerada uma mensagem de erro, em tempo de execução. O
argumento também não pode estar fora da faixa admitida pelo subtipo Single, caso
contrário será gerada uma mensagem de erro, em tempo de execução.

Observe este linha de código:

               MsgBox CSng("3.1418256927")

Esta linha gera a mensagem indicada na Figura a seguir:




Função CStr.

A função CStr converte uma variável ou resultado de um expressão, para o subtipo
String.

Observe este linha de código:

               MsgBox CStr("12345" & " hectares de terra")

Esta linha gera a mensagem indicada na Figura a seguir:
Vista
                                      Virtual
                                        INFOR MÁT ICA




Outras funções do VBScript – Tratamento de String, Datas e
Funções matemáticas.

Neste item, aprenderemos a utilizar as principais funções do VBA. Apresentaremos
as funções divididas em categorias, conforme a funcionalidade destas. Trataremos das
seguintes categorias:

           Funções para manipulação de String.
           Funções para manipulação de Data/Hora.
           Funções matemáticas.


Funções para tratamento de String.

 Veremos as principais funções para tratamento de String.


Função Asc.
A função Asc, retorna o valor numérico do código ASCII, para a primeira letra de uma
String. Considere o exemplo:

               Asc(“Ainda chovia”)

Este exemplo de uso da função retorna o valor 65, o qual é o código ASCII, para a
letra A maiúscula. Caso fosse a letra "a" minúscula, o código retornado seria 97 e
assim por diante.


Função Chr.
A função Chr(número), recebe um número como parâmetro, e retorna o caracter
ASCII, associado ao número passado como parâmetro.

Considere o exemplo:

               Chr(65)

Este exemplo de uso da função retorna o caracter "A" maiúsculo. NOTA: Até agora,
utilizamos a função Chr em diversos exemplos. Utilizamos o Chr(13), para simular um
ENTER, o que faz uma quebra de linha, nas mensagens montadas com o MsgBox.


Função Len.

Esta função determina o tamanho da String que foi passada como parâmetro para a
função. Considere o exemplo:

             MsgBox Len(“Este é um exemplo de uso da função Len !!”) Este exemplo
 de uso da função, retorna 41, conforme indicado na Figura a seguir:
Vista
                                      Virtual
                                          INFOR MÁT ICA




Função LCase.

Esta função converte para minúsculas, a String que foi passada como parâmetro para a
função. Considere o exemplo:

        MsgBox Lcase(“ESTE É UM EXEMPLO DE USO DA FUNÇÃO LCASE!!”)Este
 exemplo de uso da função, converte o parâmetro passado, para letras minúsculas,
 conforme indicado na Figura a seguir:




Função UCase.

Esta função converte para MAIÚSCULAS, a String que foi passada como parâmetro para a
função. Considere o exemplo:

        MsgBox Lcase(“este é um exemplo do uso da função ucase !!”) Este exemplo de
 uso da função, converte o parâmetro passado, para letras maiúsculas, conforme indicado
 na Figura a seguir:




Função Left.

Esta função retorna um número especificado de caracteres, a partir do início (Left –
Esquerda) de uma String. É importante salientar que espaços em branco também
devem ser considerados.

O formato geral da função é o seguinte:

 Left(String, n)
Vista
                                        Virtual
                                          INFOR MÁT ICA




  onde n é o número de caracteres a retornar.

Considere o exemplo:

                 MsgBox Left(“VistaVirtual Informática LTDA”,5)



Este exemplo de uso da função, retorna as cinco primeiras letras da String passada,
neste caso, retornará VistaVirtual.

Vamos alterar um pouco o nosso exemplo:

                 MsgBox Left(“VistaVirtual Informática LTDA”,7)

Irá retornar: VistaVirtual I

Observe que o espaço em branco também é considerado.

Nota: Durante a primeira semana do treinamento utilizamos a função
Left() (Esquerda()) em consultas e formulários.


Função Right.

Esta função retorna um número especificado de caracteres, a partir do final (Right –
Direita) de uma String. É importante salientar que espaços em branco também devem ser
considerados.

O formato geral da função é o seguinte:

                 Right(String, n)

 onde n é o número de caracteres a retornar.

Considere o exemplo:

                 MsgBox Right(“VistaVirtual Informática”,6)

Este exemplo de uso da função, retorna as seis ultimas letras da
String passada, neste caso, retornará “mática”.

Vamos alterar um pouco o nosso exemplo:

                 MsgBox Right(“VistaVirtual Informática”,10)

Irá retornar: nformática
Observe que o espaço em branco também é considerado.

Nota: Durante a primeira semana do treinamento utilizamos a função
Right() (Direita()) em consultas e formulários.


Função Mid.
Vista
                                       Virtual
                                          INFOR MÁT ICA




Esta função retorna um número especificado de caracteres, a partir de uma posição
especificada, dentro da String. É importante salientar que espaços em branco também
devem ser considerados.

O formato geral da função é o seguinte:

               Mid(String, posicao_inicio, n)

 onde:

 posicao_inicio é a posição a partir da qual devem ser retornados caracteres
 n é o número de caracteres a retornar.

Considere alguns exemplos:

               Mid(“VistaVirtual Informática”,7,5)

Este exemplo de uso da função, retorna, a partir da posição 7, 5
caracteres, neste caso, retornará Infor.

               Mid(“SANTA MARIA”,3,7)

 , irá retornar NTA MAR. Observe que o espaço em branco também é considerado.

Um detalhe interessante, é que podemos utilizar o valor retornado por uma função, como
parâmetro para outra função. Considere o seguinte exemplo:

               LCase(Mid(“SANTA MARIA”,3,7))

Este exemplo retorna nta mar.

A função Mid retira os caracteres NTA MAR, os quais são passados como parâmetros
para a função LCase, a qual converte os caracteres para minúsculos.


Função String.

Esta função retorna um determinado caracter, um número especificado de vezes.

O formato geral da função é o seguinte:

               String(n, Caracter)

 onde n é o número de vezes que Caractere deve ser repitido.




Considere o exemplo:

               MsgBox String(35,”*”)

A Figura a seguir mostra o resultado deste comando:
Vista
                                     Virtual
                                       INFOR MÁT ICA




Funções para tratamento de Data e Hora.

Veremos as principais funções para tratamento de Data e Hora.


Função Date.

Retorna a data corrente do sistema. Não precisamos passar parâmetros para esta
função. Considere o exemplo abaixo:

               MsgBox “Data do Sistema: “ & Date()

O resultado deste comando, está indicado na Figura a seguir:




Função Time.

Retorna a hora corrente do sistema. Não precisamos passar parâmetros para esta
função. Considere o exemplo abaixo:

               MsgBox “Hora do Sistema: “ & Time( )

O resultado deste comando, está indicado na Figura a seguir:




                          Treinamento de Access Avançado – Parte II
Vista
                                    Virtual
                                      INFOR MÁT ICA




Função Day.

Recebe como parâmetro uma data, e retorna um número entre 1 e 31, indicando o
dia do mês. O formato geral é o seguinte:

              Day(data)

Considere o exemplo abaixo:

              MsgBox “Dia do mês: “ & Day(Date( ))

O resultado deste comando, está indicado na Figura a seguir:




 A função Date( ) captura a data do sistema e passa como parâmetro para a função
 Day, a qual por sua vez, retorna apenas o dia do mês.


Função Month.

Recebe como parâmetro uma data, e retorna um número entre 1 e 12, indicando o mês
do ano. O formato geral é o seguinte:

              Month(data)

Considere o exemplo abaixo:

              MsgBox “Mês do ano: “ & Month(Date( ))

 O resultado deste comando, está indicado na Figura a seguir:




A função Date( ) captura a data do sistema e passa como parâmetro para a função
Month, a qual por sua vez, retorna apenas o mês do ano




Função Now.

Retorna a hora e a data corrente do sistema. Não precisamos passar parâmetros para
esta função. Considere o exemplo abaixo:
Vista
                                      Virtual
                                        INFOR MÁT ICA




               MsgBox “Data e Hora do Sistema: “ & Now( )

O resultado deste comando, está indicado na Figura a seguir:




Função MonthName.

Recebe como parâmetro um número, indicativo do mês do ano (1 – Janeiro, 2 –
Fevereiro, e assim por diante), e um segundo parâmetro que pode ser Verdadeiro ou
Falso. Se o segundo parâmetro for verdadeiro, o nome do mês será exibido
abreviadamente. O formato geral é o seguinte:

               MonthName(número_do_mês, abreviar)

Considere o exemplo abaixo:

               MsgBox “Mês do ano: “ & MonthName(Month(Date(),False)

O resultado deste comando, está indicado na Figura a seguir:




A função Date() captura a data do sistema e passa como parâmetro para a função
Month. A função Month retorna o número do mês retornado pela data. Este número é
passado como primeiro parâmetro para a função MonthName. O segundo parâmetro
é definido em Falso, o que significa que é para exibir o nome do mês por extenso,
isto é, não abreviado.




Função Hour.

Recebe como parâmetro uma hora, e retorna um número entre 0 e 23, indicando o
hora do dia. O formato geral é o seguinte:

               Hour(horário)

Considere o exemplo abaixo:

               MsgBox “Hora do dia: “ & Hour(Time( ))
Vista
                                             Virtual
                                               INFOR MÁT ICA




O resultado deste comando, está indicado na Figura a seguir:




A função Time() captura a hora do sistema e passa como parâmetro para a função
Hour(), a qual por sua vez, retorna apenas o hora do dia.


A função DateDiff.

Esta função pode ser utilizada para determinar o número de intervalos (em dias,
trimestres, semestres, anos, etc), entre duas datas. A sintaxe desta função é o
seguinte:

                  DateDiff(intervalo, data1, data2)

O parâmetro intervalo é uma String que diz que tipo de intervalo vamos calcular. Por
exemplo, é este parâmetro que define se queremos calcular o número de dias, ou o
número de meses entre duas datas. Na Tabela a seguir, temos os valores possíveis
para o parâmetro intervalo.

                  Tabela - Valores para o parâmetro intervalo.

                  Valor Descrição
                  yyyy Anos
                  q Trimestres m Meses
                  y Dias do ano (o mesmo que dias)
                  d Dias
                  w Semanas
                  ww Semanas do ano (o mesmo que semanas)
                  h Horas
                  n Minutos
                  s Segundos


A título de exemplo, vamos calcular o número de meses, desde o descobrimento do
Brasil, até 31 de Dezembro de 1999. Para isso, utilizaríamos o seguinte comando

 MsgBox “Meses desde o descobrimento: “ & DateDiff(“m”,”22/04/1500”,”31/12/1999”)

O resultado deste comando, pode ser conferido na Figura a seguir:




Vamos modificar um pouco o nosso exemplo, e calcular o número de horas desde o
Vista
                                              Virtual
                                                INFOR MÁT ICA




descobrimento. Para isto, podemos utilizar o seguinte comando:

 MsgBox “Meses desde o descobrimento: “ & DateDiff(“h”,”22/04/1500”,”31/12/1999”)

O resultado deste comando, pode ser conferido na Figura a seguir:




A função DateAdd.

Esta função pode ser utilizada para determinar uma data futura, com base em uma
data fornecida, o tipo de período a ser acrescentado (dias, meses, anos, etc), e o
número de períodos a serem acrescentados. A sintaxe desta função é o seguinte:

                  DateAdd(intervalo, número_de_intervalos, data)

O parâmetro intervalo é uma String que diz que tipo de intervalo vamos acrescentar.
Por exemplo, é este parâmetro que define se queremos acrescentar um número
especificado de dias, meses, anos, etc. Na Tabela a seguir, temos os valores possíveis
para o parâmetro intervalo.




                          Tabela - Valores para o parâmetro intervalo.

                          Valor Descrição
                          yyyy Anos
                          q Trimestres m Meses
                          y Dias do ano (o mesmo que dias)
                          d Dias
                          w Semanas
                          ww Semanas do ano (o mesmo que semanas)
                          h Horas
                          n Minutos
                          s Segundos

 A título de exemplo, vamos calcular a data em que tivemos um período de 1000 meses,
 após o descobrimento do Brasil. Para isso, utilizaríamos o seguinte comando:

         MsgBox “Mil meses após o descobrimento foi em : “ & DateAdd(“m”,1000,”22/04/1500”)

 O resultado deste comando, pode ser conferido na Figura a seguir:
Vista
                                        Virtual
                                          INFOR MÁT ICA




 Vamos modificar um pouco o nosso exemplo, e calcular em que data teremos passado
 um milhão de dias após o descobrimento.

 MsgBox “Um milhão de dias após o descobrimento em : “ & DateAdd(“d”,1000000,”22/04/1500”)

 O resultado deste comando, pode ser conferido na Figura a seguir:




Função Year.

Recebe como parâmetro uma data, e retorna um número indicativo do ano. O formato
geral é o seguinte:

                       Year(data)

Considere o exemplo abaixo:




                       MsgBox “Ano atual: “ & Year(Date( ))

 O resultado deste comando, está indicado na Figura a seguir:




 A função Date() captura a data do sistema e passa como parâmetro para a função
 Year, a qual por sua vez, retorna apenas o ano.

 Função WeekDay.

 Recebe como parâmetros uma data, e um parâmetro opcional, que indica qual o
 primeiro dia da semana. Se este parâmetro for omitido, o primeiro dia da semana será
 considerado Domingo. O valor para o primeiro dia da semana é numérico: 1 –
 Domingo, 2 – Segunda-feira, e assim por diante.

                WeekDay(data, prim_dia_semana.)

 Considere o exemplo abaixo:

                MsgBox “Dia da semana: “ & WeekDay(“31/12/1999”)
Vista
                                     Virtual
                                       INFOR MÁT ICA




O resultado deste comando, está indicado na Figura a seguir:




O valor 6, indica que foi uma Sexta-feira, o que confere com o calendário.

Poderíamos determinar que o primeiro dia da semana é a Segunda- feira (2 para o
último parâmetro). Com isso o nosso exemplo, ficaria assim:

              MsgBox “Dia da semana: “ & WeekDay(“31/12/1999”,2)

O resultado deste comando, está indicado na Figura a seguir:




O valor 5, indica que foi uma Sexta-feira, pois agora a Segunda- feira passou a ser o
dia 1, a Terça-feira o dia 2, e assim por diante. Novamente confere com o calendário.

Função WeekDayName.

Recebe como parâmetro um número, indicativo do dia da semana, e um segundo
parâmetro que pode ser Verdadeiro ou Falso. Se o segundo parâmetro for verdadeiro,
o nome do dia da semana será exibido abreviadamente. O formato geral é o seguinte:

              WeekDayName(número_do_dia, abreviar)

Considere o exemplo abaixo:

              MsgBox “Dia da semana: “ & WeekDayName(6,False)

O resultado deste comando, está indicado na Figura a seguir:
Vista
                                    Virtual
                                      INFOR MÁT ICA




Funções para Cálculos matemáticos.

Veremos as principais funções para efetuar cálculos matemáticos.
Na Tabela a seguir, temos a descrição das principais funções matemáticas, disponíveis
no VBA.
Vista
                                     Virtual
                                       INFOR MÁT ICA




Tabela - Funções para cálculos matemáticos.

 Função Descrição
 Abs(n) Retorna o valor absoluto (sem sinal), do número n.
 Atn(n) Retorna o valor do arco, cuja tangente é o número n. O número n deve ser
 fornecido em radianos.
 Cos(n) Retorna o coseno do número n. O número n deve ser fornecido em radianos.
 Exp(n) Retorna o número e (logaritmo neperiano e=2,7183), elevado no número n.
 Log(n) Retorna o logaritmo natural de um número n. Rnd(n) Retorna um número
 aleatório entre 0 e 1.
 Sgn(n) Retorna um número inteiro, indicando o sinal do número n. Retorna –1 para
                        números negativos e 1 para números positivos.
 Sin(n) Retorna o seno do número n. O número n deve ser fornecido em radianos
 Sqr(n) Retorna a Raiz quadrada do número n.
 Tan(n) Retorna a tangente do número n. O número n deve ser fornecido em radianos.

 NOTA: Para converter graus para radianos, multiplique o valor em graus por pi (3.14),
 e divida o resultado por 180.

 Na Tabela a seguir temos alguns exemplos de utilização das funções matemáticas do
 VBA.

 Tabela - Alguns exemplos de utilização das funções matemáticas.

              Exemplo Valor de retorno.
              Abs(-2350) 2350
              Atn(2) 1,1071487177
              Cos(0) 1
              Exp(1) 2,71828182845905
              Log(1000) 6,90775527898214
              Rnd*10 Gera um número aleatório entre 0 e 10
              Sgn(-235) Retorna –1, pois o número é negativo
              Sin(0) Retorna 0
              Sqr(400) Retorna 20
              Tan(0) Retorna 0



Criando suas próprias funções e procedimentos.

Neste item, aprenderemos a criar nossas próprias funções e Sub- rotinas . O
princípio por trás da criação de funções e sub- rotinas, é o de reaproveitamento de
código e facilidade de manutenção do programa. Imagine que estejamos criando
uma página para cálculos financeiros, por exemplo, depreciação contábil. Vamos
supor que em diversos locais, seja necessária a realização do cálculo de
depreciação. Poderíamos colocar o código que faz o cálculo, em cada um dos
pontos, onde o mesmo seja necessário. Porém esta não é a melhor maneira de
criarmos nossos programas. Imagine, por exemplo, quando fosse necessário alterar a
maneira de realizar os cálculos. Teríamos que repassar todos os módulos de
código, procurando os pontos onde o código está , e fazer as alterações. Sem
contar que estaríamos criando um Script bastante longo, dependendo do número de
cálculos necessários.

Para resolver estes problemas, poderíamos criar uma função ou sub- rotina que faz os
cálculos de depreciação. Depois, em cada local onde precisamos fazer os cálculos, é
Vista
                                      Virtual
                                        INFOR MÁT ICA




só chamar a função (ou sub- rotina), para fazer os cálculos. Quando fosse necessária a
alteração da metodologia de cálculo, era só alterar a função (ou sub-rotina) e pronto, os
novos cálculos passarão a ser feitos com base na nova metodologia. Isto poupa
esforço, reduz o número de linhas de código, e facilita a manutenção, além de
reduzir a possibilidade de erros. Agora é chegada a hora de aprendermos a criar
funções e sub-rotinas. Estes procedimentos/funções são criados em módulos separados,
isto    é, não     ligados     a nenhum formulário/relatório. Quando uma destas
funções/procedimentos for necessária, basta chamar a respectiva função/procedimento
que o Microsoft Access se encarrega de localizar a função/procedimento, passar os
parâmetros necessários (se for o caso) e receber os resultados retornados, caso seja
uma função.

NOTA: Vamos falar um pouco mais sobre o termo Procedimento. Um procedimento é um
grupo de instruções que pode ser chamado pelo nome atribuído ao procedimento. Neste
contexto, funções e sub- rotinas, são tipos de procedimentos.


Criando e utilizando Sub-rotinas.

Uma sub-rotina é um grupo de comandos que podem ser executados,
simplesmente através da chamada do nome da Sub-rotina. Podemos passar um ou
mais argumentos para uma Sub-rotina. Quando uma sub- rotina é chamada, a
execução desloca-se para dentro da Sub-rotina, depois de executados todos os
comandos dentro da Sub-rotina, a execução do código continua, com o comando
seguinte ao que chamou a Sub-rotina.

A sintaxe para declaração de uma Sub-rotina é a seguinte:

 Sub Nome_da_Sub-rotina(argumento1, argumento2, ..., argumenton)

       Comando1
       Comando2
       ...
       Comandon
 End Sub

Uma Sub-rotina pode, ou não, conter argumentos. Caso sejam necessários argumentos, os
mesmos serão passados quando a Sub- rotina for chamada, e devem ser passados, na
mesma ordem em que foram definidos.

DICA: Quando você criar Sub-rotinas, procure utilizar nomes que descrevam a função da
Sub-rotina. Com isso você torna o entendimento do código mais fácil para quem for utilizá-
lo.

Considere o seguinte exemplo de declaração de uma Sub-rotina:

               Sub Calcula_imposto(salario, desconto, extras)

                     Comando1
                     Comando2
                     ...
                     Comandon
               End Sub

 Neste caso, declaramos uma rotina chamada Calcula_imposto, a qual espera receber 3
 parâmetros: salario, desconto e extras. Os parâmetros devem ser fornecidos nesta ordem,
Vista
                                     Virtual
                                       INFOR MÁT ICA




 para que a Sub-rotina funcione corretamente.

 Uma vez criada a Sub-rotina, podemos chamá-la, simplesmente digitando o nome da Sub-
 rotina, ou utilizando a palavra Call, mais o nome da Sub-rotina. Nos exemplos abaixo,
 temos dois métodos de chamada da Sub-rotina Calcula_imposto:

               Calcula_imposto(1500,23,125)

               ou

               Call Calcula_imposto(1500,23,125)

 Observe que os parâmetros são passados dentro do parênteses.

 Também poderíamos declarar uma Sub-rotina, sem parâmetros. Neste caso posso
 simplesmente não utilizar os parênteses após o nome da Sub-rotina, ou utilizar um par
 de parênteses, sem nada dentro, conforme indicado abaixo:

               Sub Nome_da_Sub-rotina

                     Comando1
                     Comando2
                     ...
                     Comandon
               End Sub

               ou

               Sub Nome_da_Sub-rotina( )

                     Comando1
                     Comando2
                     ...
                     Comandon
               End Sub

 Por exemplo, poderíamos criar uma Sub-rotina que exibe uma Caixa de mensagem
 com a Data do sistema e a hora, no Formato indicado na Figura a seguir:




Poderíamos criar todos os comandos necessários, para exibir a hora e a data neste
formato, cada vez que a exibição fosse necessária.
Vista
                                           Virtual
                                             INFOR MÁT ICA




Porém é mais prático criar uma Sub-rotina que faz este trabalho. Cada vez que
precisarmos exibir a data e a hora neste formato, é só chamarmos a Sub-rotina.

Na Listagem a seguir temos o código da Sub-rotina exibe_data_hora(), a qual faz a
exibição da data e da hora, no formato proposto pela Figura anterior.

Listagem– A Sub-rotina exibe_data_hora

 Sub exibe_data_hora

      mes_atual=Month(Date())
      mes_nome=MonthName(mes_atual,False)

      mensagem = "Ano atual: " & Year(Date()) & Chr(13)
      mensagem = mensagem & "Mês atual: " & mes_nome & Chr(13)
      mensagem = mensagem & "Hoje é dia: " & Day(Date())& Chr(13)
      mensagem = mensagem & Chr(13) & "***************" & Chr(13)& Chr(13)

      hora_atual = Hour(Time())
      minuto_atual = Minute(Time())
      secundo_atual = Second(Time())

     mensagem = mensagem & "Hora atual: " & hora_atual & chr(13)
     mensagem = mensagem & "Minuto atual: " & minuto_atual & chr(13)
     mensagem = mensagem & "Secundo atual: " & secundo_atual

      MsgBox mensagem

 End Sub

 Agora, cada vez que for necessário exibir a data e a hora nos formatos do exemplo,
 basta chamar a Sub-rotina exibe_data_hora, utilizando um dos seguintes comandos:

           Call exibe_data_hora

           ou

           exibe_data_hora

Exercício: Crie um novo módulo chamado Utilitários. Dentro deste módulo crie o
procedimento exibe_data_hora. Salve o módulo. Abra o formulário Teste no modo
estrutura. Crie um botão chamado ExSupProc. Associe o seguinte código ao evento
Ao clicar deste botão:

           Call exibe_data_hora

Teste o funcionamento do botão.




Criando e utilizando Funções
Vista
                                      Virtual
                                       INFOR MÁT ICA




Uma Função é um grupo de comandos que podem ser executados, simplesmente
através da chamada do nome da Funçao. Podemos passar um ou mais argumentos
para uma Função. Quando uma Função é chamada, a execução desloca-se para
dentro da Função, depois de executados todos os comandos dentro da Função, a
execução do código continua, com o comando seguinte ao que chamou a Função. A
diferença da Função para a Sub-rotina, é que a Função sempre retorna um ou mais
valores para o comando que a chamou.

A sintaxe para declaração de uma Função é a seguinte:

 Function Nome_da_Função(argumento1, argumento2, ..., argumenton)

       Comando1
       Comando2
       ...
       Comandon
 End Function

Uma Função pode, ou não, conter argumentos. Caso sejam necessários argumentos,
estes serão passados quando a Função for chamada, e devem ser passados, na
mesma ordem em que foram definidos.

DICA: Quando você criar Função, procure utilizar nomes que descrevam os objetivos da
Função. Com isso você torna o entendimento do código mais fácil para quem for utilizá-lo.

Considere o seguinte exemplo de declaração de uma Função:

 Função Converte_para_dolar(valor_em_real, cotacao_dolar)

       Comando1
       Comando2
       ...
       Comandon
 End Function

Neste caso, declaramos uma Função chamada Converte_para_dolar, a qual espera
receber 2 parâmetros: um valor em real e a cotação do dólar.

Uma vez criada a Função, devemos chamá-la, em um comando de atribuição, isto é, o
valor retornado pela função, deve ser atribuído a uma variável, ou exibido através de
um comando como MsgBox. No exemplo abaixo, estamos atribuindo o valor de retorno
da função, à variável valor_dolar.

        valor_dolar = Converte_para_dolar (1500,1.81)


Também poderíamos exibir o valor retornado pela função, utilizando o comando MsgBox,
conforme indicado a seguir:

 MsgBox “Valor em dólar: “ & Converte_para_dolar (1500,1.81)

Observe que os parâmetros são passados dentro dos parênteses, e na mesma ordem
definida quando da criação da função.

Também poderíamos declarar uma Função, sem parâmetros. Neste caso posso
simplesmente não utilizar os parênteses após o nome da Função, ou utilizar um par de
Vista
                                        Virtual
                                          INFOR MÁT ICA




parênteses, sem nada dentro, conforme indicado abaixo:

                Function Nome_da_Função

                      Comando1
                      Comando2
                      ...
                      Comandon
                End Function

 ou

                Function Nome_da_Função( )

                      Comando1
                      Comando2
                      ...
                      Comandon
                End Function

Por exemplo, vamos criar uma função que converte um valor de um ângulo de
Graus para Radianos. Depois utilizaremos a função dentro de um laço For...Next,
para exibir o valor em radianos, para os ângulos de 0 à 20 graus.

No exemplo a seguir temos o código onde foi criada a função CRad, que converte
um valor em graus para radianos. Depois utilizamos um laço for para exibir, através
de uma Caixa de mensagem os valores em radianos, para os ângulos de 0 à 20 graus.


      'Criação da função CRad.

      Function CRad(valor_graus)
                  CRad = (valor_graus*3.14)/180
      End Function

      'Agora utilizamos a função dentro do laço For/Next.

      For i=0 to 20
        mensagem = mensagem & "Angulo: " & i & "Valor em Radianos: "
        mensagem = mensagem & FormatNumber(CRad(i),5)& Chr(13)
      Next

      MsgBox mensagem

 Observe que dentro da função, atribuímos a variável CRad um determinado valor. É
 isso que caracteriza uma função. Dentro do código da função, devemos atribuir a
 uma variável que tenha o mesmo nome da função, um determinado valor. Este valor
 é que será o valor de retorno da função.

 Cabe salientar o uso da função FormatNumber, dentro do laço For. A função
 FormatNumber é utilizada para formatar a maneira como um número é exibido. Neste
 caso, utilizamos a função FormatNumber, para limitar o número de casas decimais, a 5
 casas depois da vírgula.

 Em cada "passada" do laço For...Next, chamamos a função CRad(i), para fazer a
Vista
                                       Virtual
                                         INFOR MÁT ICA




 conversão de Graus para radianos. O Valor retornado pela função CRad, é passado
 para a função FormatNumber, para ser formatado com apenas 5 casas decimais.

 Funções que serão utilizadas em vários Formulários/Relatórios, devem ser criadas em um
 Módulo separada. Depois é só chamar a função onde esta for necessária.

 Exercício: Crie uma função chamada ValorImpostoPF. Esta função deve receber os
 seguintes parâmetros:

           Total de rendimentos - TotRed.
           Total de deduções - TotDed.
           Imposto retido na fonte - ImpRet.

 Com base na tabela oficial do IR, a função calcula o imposto devido e informa se existe
 imposto a restituir ou a pagar e qual o respectivo valor. Criar um formulário chamado
 CalcIRPF, no qual temos três campos, um para cada parâmetro da função. O usuário
 preenche os valores deste campo e clica em um botão Calcular. O evento Ao clicar
 chama a função ValorImpostoPF e exibe o resultado dos cálculos.




Cálculo do Dígito Verificador: CPF, CNPJ e Processos.

Neste tópico aprenderemos a utilizar o VBA para criar funções de validação do DV do
CPF, CNPJ e Processos (com dois ou quatro dígitos para o ano). Os algorítmos de cálculo
foram publicados no Diário Oficial, Seção I, de 29/12/1999.

Nota: Os algorítmos para cálculo do DV são de domínio público, já tendo sido publicados
por diversas revistas de circulação nacional e amplamente disponíveis em diversos sites da
Internet.



Como calcular o DV do CPF.

Para entender o algorítmo de cálculo do CPF vamos utilizar um exemplo prático.

Considere o seguinte CPF (sem o DV):

 Posição 1 2 3 4 5 6 7 8 9
 Número 3 3 3 4 4 4 5 5 5

Começamos a multiplicar os dígitos do CPF, a partir da posição 9, por 2, 3, 4, 5 e assim
por diante, conforme indicado na tabela a seguir:

 Posição 1 2 3 4 5 6 7 8 9
 Número 3 3 3 4 4 4 5 5 5
 Multiplica por: 10 9 8 7 6 5 4 3 2
 Resultado 30 27 24 28 24 20 20 15 10

Somo os resultados obtidos na quarta linha da tabela anterior:
Vista
                                       Virtual
                                         INFOR MÁT ICA




               Soma1 = 30+27+24+28+24+20+20+15+10
               Soma1 = 198

Faço a divisão desta soma por 11 e determino o resto da divisão:

        198/11 Resulta em uma divisão exata, com resto 0

Regra: Quando o resto é zero ou um, o DV é 0. Quando o resto é diferente de zero ou
um, o DV é obtido fazendo-se: 11-resto

Neste caso como o resto foi zero, o primeiro DV é zero:

                      DV1=0


 O DV1 calculado passa a fazer parte do CPF, conforme indicado pela tabela a seguir:

 Posição 1 2 3 4 5 6 7 8 9 10
 Número 3 3 3 4 4 4 5 5 5 0

Agora repetimos o processo anterior, porém já considerando o DV1 como parte
integrande do CPF, conforme indicado pela tabela a seguir:

 Posição 1 2 3 4 5 6 7 8 9 10
 Número 3 3 3 4 4 4 5 5 5 0
 Multiplica por: 11 10 9 8 7 6 5 4 3 2
 Resultado 33 30 27 32 28 24 25 20 15 0

 Somo os resultados obtidos na quarta linha da tabela anterior:

               Soma2 = 33+30+27+32+28+24+25+20+15+0
               Soma1 = 234

 Faço a divisão desta soma por 11 e determino o resto da divisão:

        234/11 Resulta em (21), com resto 3

 Regra: Quando o resto é zero ou um, o DV é 0.
                     Quando o resto é diferente de zero ou um, o DV é obtido
                     fazendo-se: 11-resto

 Neste caso como o resto foi 3, o segundo DV é :

                      DV2 = 11-3
                      DV2 = 8

 Com isso o CPF, já com os dois DVs fica conforme indicado na tabela a seguir:

 Posição 1 2 3 4 5 6 7 8 9 10 11
 Número 3 3 3 4 4 4 5 5 5 0 8

 Ou seja:   333.444.555-08
 Os algorítmos para cálculo dos DVs de CNPJ e processos (dois ou quatro dígitos
 para o ano) são exatamente iguais. A única diferença é o número de dígitos do CNPJ ou
Vista
                                       Virtual
                                         INFOR MÁT ICA




 dos processos que são diferentes do CPF.




Juntando Tudo:

Agora vamos juntar, em um exercício, os conhecimentos apresentados sobre VBA, até
o momento.

Exercício: Criar um módulo chamado "Funções de Validação". Neste módulo criar duas
funções:

Função ValidaCPF(NúmeroDoCPF): Esta função recebe como parâmetro um número de
CPF e retorna Verdadeiro se o número for válido e Falso caso contrário. Criar um
formulário chamado Teste de DVs. Adicionar um campo para digitação do CPF neste
formulário. Usar uma máscara de entrada, neste campo, que considera como
caracteres do CPF os pontos e o traço. Este fator é importante na hora de criarmos a
função ValidaCPF(NúmeroDoCPF). Testar a função ValidaCPF(NúmeroDoCPF), criada
anteriormente.
Função ValidaCNPJ(NúmeroDoCNPJ): Esta função recebe como parâmetro um número
de CNPJ e retorna Verdadeiro se o número for válido e Falso caso contrário. Abrir o
formulário Teste de DVs, criado anteriormente. Adicionar um campo para digitação do
CNPJ, neste formulário. Usar uma máscara de entrada, neste campo, que considera como
caracteres do CNPJ os pontos, a barra e o traço. Este fator é importante na hora de
criarmos     a     função     ValidaCNPJ(NúmeroDoCNPJ).       Testar     a     função
ValidaCNPJ(NúmeroDoCNPJ).


Para testar a função ValidaCPF você pode utilizar os seguintes valores:

         999.000.555-94
         111.222.333-96
         777.000.888-37
         000.999.000-33

Para testar a função ValidaCNPJ você pode utilizar os seguintes valores:

         11.222.333/0001-81
         99.222.333/0001-22
         66.777.888/0150-22
         66.777.888/0151-03
         66.000.888/0151-00

Mais conteúdo relacionado

PPTX
Curso de Macros en Excel (VBA)
PDF
Curso completo de excel
PDF
Excel VBA: Aula 8
PDF
Excel VBA: Aula 12
PDF
Excel 2010-intermediario
PDF
Apostila do Curso Excel 2010 Básico
PPTX
Aula 02 programação_c_alunos
PPT
Trabalho
Curso de Macros en Excel (VBA)
Curso completo de excel
Excel VBA: Aula 8
Excel VBA: Aula 12
Excel 2010-intermediario
Apostila do Curso Excel 2010 Básico
Aula 02 programação_c_alunos
Trabalho

Mais procurados (17)

PDF
Apresentacaosobre vba
PDF
Apostila excel 2010 avançado
PDF
Excel VBA: Aula 2
PDF
Excel 2010 avancado
PDF
Caderno de exercícios excel 2010
PDF
Curso avançado de excell 120 lições
PDF
Curso basico de excel
PPT
Excel Basico
PDF
✔ VBA Excel Specialist® - Index 2016 + de 700 Artigos - Atualização de VBA Ex...
PPT
Apresentação Excel
PDF
Como construir uma grelha de avaliação
PDF
Wordavancado
PDF
3336 excel 2007_avancado
PDF
Manual ms word
PPT
1 Aula De Dreamweaver
PDF
Apostila-Access_2007_basico
PDF
10 coisas a não se fazer com o excel
Apresentacaosobre vba
Apostila excel 2010 avançado
Excel VBA: Aula 2
Excel 2010 avancado
Caderno de exercícios excel 2010
Curso avançado de excell 120 lições
Curso basico de excel
Excel Basico
✔ VBA Excel Specialist® - Index 2016 + de 700 Artigos - Atualização de VBA Ex...
Apresentação Excel
Como construir uma grelha de avaliação
Wordavancado
3336 excel 2007_avancado
Manual ms word
1 Aula De Dreamweaver
Apostila-Access_2007_basico
10 coisas a não se fazer com o excel
Anúncio

Destaque (19)

PDF
Criando macros vba excel 2003
PDF
Aula 23 macros com vb
PDF
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
PDF
Excel VBA: Aula 3
PDF
Livro carlos alberto parreira - tatica
PDF
Iraja 1
PDF
exercicios_futebol_anolasco
PDF
Excel VBA: Aula 11
PDF
Treinamento e aperfeiçoamento das capacidades físicas
PDF
Planificacao tática da pre temporada em equipes profissionais
PPT
Ciclos de treinamento 02
PDF
Microsoft Excel 2016 - Apêndices
PPT
Excel comandos avançados
PPT
Exercicios de pressing e posse de bola
PPT
Ciclos de treinamento
PDF
Serie de exercicios para aumento muscular
PDF
148203083 musculacao-biomecanica-e-treinamento
PDF
Guia dos movimentos de musculação para mulheres frédéric delavier
Criando macros vba excel 2003
Aula 23 macros com vb
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Excel VBA: Aula 3
Livro carlos alberto parreira - tatica
Iraja 1
exercicios_futebol_anolasco
Excel VBA: Aula 11
Treinamento e aperfeiçoamento das capacidades físicas
Planificacao tática da pre temporada em equipes profissionais
Ciclos de treinamento 02
Microsoft Excel 2016 - Apêndices
Excel comandos avançados
Exercicios de pressing e posse de bola
Ciclos de treinamento
Serie de exercicios para aumento muscular
148203083 musculacao-biomecanica-e-treinamento
Guia dos movimentos de musculação para mulheres frédéric delavier
Anúncio

Semelhante a 1214 visual basic (20)

PDF
Apostila excel vba
PDF
Apostila excel vba completa portugues
PPT
Excel Basic com VBA - Macros
DOCX
Basico dovba excel_tutorial1
PDF
3867 criando macros vba excel
PDF
Curso excel-2007-petcivil-matheus
PDF
Apostilaexcel1 2007
PDF
Programação de Macros com LibreOffice Basic
PDF
Programacao de macros_com_libre_office_basic_slideshare
PDF
Programação de Macros com LibreOffice Basic
PDF
Curso de Excel VBA
PDF
Curso de VBA Apostila PET Civil UFRGS 2021/1.pdf
PDF
Apostila vba excel
PDF
Apostila vba excel
DOC
Uso de macros_no_msexcel
PPTX
Introducao ao visual basic
PDF
Cronograma excel avançado
PDF
VBA-Excel.pdf
PDF
Curso excel-2007-petcivil-matheus
PPT
Excel_2000.ppt - Conceitos básicos, fórmulas e funções
Apostila excel vba
Apostila excel vba completa portugues
Excel Basic com VBA - Macros
Basico dovba excel_tutorial1
3867 criando macros vba excel
Curso excel-2007-petcivil-matheus
Apostilaexcel1 2007
Programação de Macros com LibreOffice Basic
Programacao de macros_com_libre_office_basic_slideshare
Programação de Macros com LibreOffice Basic
Curso de Excel VBA
Curso de VBA Apostila PET Civil UFRGS 2021/1.pdf
Apostila vba excel
Apostila vba excel
Uso de macros_no_msexcel
Introducao ao visual basic
Cronograma excel avançado
VBA-Excel.pdf
Curso excel-2007-petcivil-matheus
Excel_2000.ppt - Conceitos básicos, fórmulas e funções

Mais de Elvis Reis (6)

DOC
Rir99 l1
PPTX
Estágio supervisionado no ensino fundamental 6 periodo
PDF
Bacen0109 edital analista
DOC
Roberto carlos em_detalhes
DOC
Trabalho sobre ongs
PDF
Importância da Auditoria interna
Rir99 l1
Estágio supervisionado no ensino fundamental 6 periodo
Bacen0109 edital analista
Roberto carlos em_detalhes
Trabalho sobre ongs
Importância da Auditoria interna

1214 visual basic

  • 2. Vista Virtual INFOR MÁT ICA Introdução a linguagem VBA - Visual Basic For Applications.............................................. 3 Onde podemos utilizar o VBA?.......................................................................................... 3 Como resposta a um evento: .......................................................................................... 3 Criação de funções e procedimentos em módulos separados: ....................................... 3 Aprendendo VBA:.......................................................................................................... 4 Os comandos do VBA são divididos, basicamente, em três tipos: ................................. 4 O Ambiente de Programação.................................................................................................. 6 Para criar o formulário Teste faça o seguinte: .................................................................... 7 Anatomia dos Módulos do VBA. ..................................................................................... 13 Principais comandos do VBA.............................................................................................. 15 Tipos de dados.................................................................................................................. 15 Declaração e “tipo” de variável: ................................................................................... 15 Fazendo cálculos e comparações com o VBScript – Operadores. ................................ 18 Fazendo cálculos com os Operadores aritméticos. ....................................................... 18 Comparando valores com os Operadores de comparação............................................. 22 O Escopo das variáveis, no VBA. ................................................................................ 26 Estruturas para controle de fluxo em VBScript........................................................... 29 Funções, procedimentos e eventos com VBScript. .............................................................. 41 Introdução......................................................................................................................... 41 Tipos de dados e funções para conversão de tipos. .......................................................... 41 Determinando o Tipo de Dados contido em uma variável. .......................................... 41 Funções para conversão de tipos. ................................................................................. 50 Outras funções do VBScript – Tratamento de String, Datas e Funções matemáticas...... 56 Funções para tratamento de String. .............................................................................. 56 Função Len. .................................................................................................................. 56 Função LCase. .............................................................................................................. 57 Função UCase............................................................................................................... 57 Função Left................................................................................................................... 57 Função Right. ............................................................................................................... 58 Função Mid................................................................................................................... 58 Função String................................................................................................................ 59 Funções para tratamento de Data e Hora. ......................................................................... 60 Função Date.................................................................................................................. 60 Função Time................................................................................................................. 60 Função Day................................................................................................................... 61 Função Month............................................................................................................... 61 Função Now.................................................................................................................. 61 Função MonthName. .................................................................................................... 62 Função Hour. ................................................................................................................ 62 A função DateDiff. ....................................................................................................... 63 A função DateAdd. ....................................................................................................... 64 Função Year.................................................................................................................. 65 Funções para Cálculos matemáticos. ................................................................................ 67 Criando suas próprias funções e procedimentos. .............................................................. 68 Criando e utilizando Sub-rotinas. ................................................................................. 69 Criando e utilizando Funções ........................................................................................... 71 Cálculo do Dígito Verificador: CPF, CNPJ e Processos.................................................. 74 Como calcular o DV do CPF........................................................................................ 74 Juntando Tudo: ................................................................................................................. 76
  • 3. Vista Virtual INFOR MÁT ICA Introdução a linguagem VBA - Visual Basic For Applications O VBA é derivado do Visual Basic. O Visual Basic é um ambiente de desenvolvimento completo, onde podemos criar programas para o ambiente Windows. Um programa comercial para controlar estoque de mercadorias pode ser criado utilizando-se o Visual Basic. Um aplicativo como o f o l h a d e p a g a m e n t o também poderia ser criado utilizando o Visual Basic. Já o VBA é uma linguagem bastante poderosa, embora não seja tão poderosa quanto o Visual Basic, para criação de aplicativos e automação de tarefas, baseados nos aplicativos do Microsoft Office: Access, Word, Excel,Power Point e Outlook. Onde podemos utilizar o VBA? Existem, basicamente, duas situações/locais diferentes onde podemos utilizar o VBA: Como resposta a um evento: Conforme descrito anteriormente, o modelo deprogramação do ambiente Windows é baseado em Eventos. Um Evento é uma ação do usuário ao utilizar o teclado ou o mouse.Por exemplo, quando o usuário clica em um botão de comando é gerado o evento "Ao clicar" associado com este botão. Quando o usuário altera o valorem um campo de dados e pressiona a tecla TAB para ir para o próximo campo são gerados dois eventos associados com o campo que foi atualizado: "Após atualizar" e "Ao perder o foco". Quando o usuário dá um clique duplo em um determinado elemento, é disparado o evento "Ao clicar duas vezes", e assim por diante. Por padrão nenhuma ação é programada para responder aos eventos que são disparados. Conforme já vimos anteriormente é possível criar macros que serão executadas em resposta a um determinado evento. Podemos utilizar o VBA para criar um procedimento (um procedimento é formado por um ou mais comandos) que será executado em resposta ao evento. Por exemplo, podemos criar um procedimento para validar um número de CPF (calcular o DV do CPF). Este procedimento pode ser configurado para ser executado em resposta ao evento. Após atualizar do campo CPF.O código criado para ser executado em resposta a um evento, é gravada juntamente com o formulário (ou relatório), onde está o elemento que dispara o evento. Criação de funções e procedimentos em módulos separados: Se quisermos criar procedimentos ou funções que não estejam ligados um evento específico em um formulário ou relatório (podendo, porém serem chamados em diversos eventos diferentes, conforme aprenderemos mais adiante),podemos criar funções
  • 4. Vista Virtual INFOR MÁT ICA gravadas em Módulos do Access. Um Módulo é um objeto do Access cuja única finalidade é armazenar código de procedimentos e funções do VBA. Quando um procedimento ou função é definido e armazenado em um módulo, podemos usá-lo em qualquer expressão, como se fosse uma função interna do Microsoft Access. Nos criaremos, mais adiante, a título de exemplo, uma função chamada MêsPorExtenso. Esta função receberá um valor numérico entre 1 e 12 e irá retornar o nome do mês correspondente, por extenso. Agora que já falei bastante e fiz uma boa propaganda das vantagens em se utilizar o VBA, é hora de aprendermos os fundamentos básicos desta linguagem de programação. Aprendendo VBA: Um procedimento, função ou módulo do VBA é uma seqüência de comandos que são executados para a realização de uma ou mais tarefas. Por exemplo, posso escrever um grupo de comandos que acessa os dados da tabela pedidos e aumenta o valor de um determinado campo de acordo com determinadas condições. Observe o comando a seguir: Me![NúmeroDoPedido].SetFocus Este é um comando que, simplesmente, coloca o cursor no campo NúmeroDoPedido,no formulário atual. Não se preocupe em entender este comando, agora. Todo comando em VBA deve seguir algumas regras de sintaxe. A sintaxe tem a ver com a maneira como o comando é escrito. Por exemplo, se você for utilizar a função Day() em um comando e ao invés de Day(), utilizar Dai(), você terá cometido um erro de sintaxe e o comando não poderá ser executado. Os erros de sintaxe são os mais fáceis de serem identificados e corrigidos. Os comandos do VBA são divididos, basicamente, em três tipos: Comandos básicos do VBA:São aqueles comandos que estão presentes em toda e qualquer lingüagem que se preze. São comandos para declaração de variáveis, operadores aritméticos e lógicos, struturas de controle e operadores para a realização de testes condicionais. Por exemplo, qual a linguagem que não possui uma funçãoIF para a realização de testes condicionais? Funções internas do Microsoft Access:Existem centenas de funções prontas, fornecidas pelo Microsoft Access e que podem ser utilizadas em qualquer comando do VBA. Por exemplo,para armazenar mas em uma variável x, o valor numérico do ano da data do sistema, poderíamos utilizar o seguinte comando: x =Year(Date()). Durante a primeira semana utilizamos uma série destas funções, tais como: Esquerda(), Direita(), Meio(), Ano(), Dia(), Mês, etc. IMPORTANTE: Ao utilizar funções em comandos do VBA devemos,sempre,utilizar a função em inglês.Por exemplo, ao invés de Ano() devemos utilizar Year(); ao invés de Mês() devemos utilizar Month()e assim por diante.
  • 5. Vista Virtual INFOR MÁT ICA Objetos da hierarquia de objetos do Microsoft Office: Um objeto é uma entidade que possui propriedades (que descrevem as características do objeto) e métodos (que descrevem os comportamentos do objeto). Cada aplicativo do Microsoft Office disponibiliza uma hierarquia de objetos bem definida. Estes objetos podem ser acessados através de programação. Podemos utilizar os métodos dos objetos para realizar determinadas ações sobre o objeto e suas propriedades para obter informações sobre suas características. Esta hierarquia de objetos é que torna o VBA tão poderoso. É graças a hierarquia de objetos do Office que, de dentro de um banco de dados do Access, por exemplo, podemos acessar dados de uma planilha do Excel, gravada em um drive de rede e combinar tais dados com dados obtidos a partir de um banco de dados , por exemplo, do Dbase (.dbf), gravado na máquina local. Falaremos mais sobre objetos adiante. Agora, apenas a título de exemplo, alguns comandos do VBA que utilizam um objeto do tipo RecordSet para descobrir o número de registros da tabela Pedidos: Dim db As DAO.Database Dim rs As DAO.Recordset Dim numreg As Integer Set db = CurrentDb() Set rs = db.OpenRecordset("Pedidos") numreg = rs.RecordCount MsgBox "NÚMERO DE REGISTROS DA TABELA PEDIDOS: " & numreg Quando o Microsoft Access executa estes comandos é emitida a seguinte mensagem: Importante: Não se preocupe em entender os comandos utilizados no exemplo anterior. Vamos estudar em detalhes, uma série de objetos, inclusive os objetos Database e RecordSet, utilizados no exemplo anterior.
  • 6. Vista Virtual INFOR MÁT ICA O Ambiente de Programação. O Microsoft Access fornece um ambiente de programação bastante poderoso, com uma série de recursos que facilitam a criação de código VBA. Neste tópico vamos aprender a utilizar os aspectos básicos do Ambiente de Programação do VBA: Se não tivéssemos disponível um Ambiente de Programação, teríamos que lembrar da sintaxe de todos os comandos, dos métodos e propriedades dos objetos. Convenhamos que isso é praticamente impossível, pois com o VBA temos acesso a milhares de objetos (é isso mesmo: milhares de objetos). Cada objeto pode ter dezenas de propriedades, métodos e coleções. O ambiente de Desenvolvimento fornece uma série de facilidades enquanto estamos criando nosso código VBA. Por exemplo, ao digitar o nome de um objeto e um ponto será aberta, automaticamente, uma lista com todos os métodos e propriedades deste objeto. Ao invés de lembrar do nome dos métodos/propriedades, basta selecioná-los em uma lista. Se selecionarmos um método, ao digitarmos o parênteses de abertura, será exibida uma lista com os argumentos esperados pelo método, bem como o tipo (texto, número, data, etc) de cada argumento. Se digitarmos um comando incorretamente, o Ambiente de Desenvolvimento emite uma mensagem e coloca em destaque o comando que foi digitado errado. Estas são apenas algumas das facilidades fornecidas pelo Ambiente de Desenvolvimento do VBA. Para conhecermos melhor o referido ambiente, vamos a um exemplo prático. Vamos abrir o banco de dados Nwind.mdb, que está na pasta Semana2. Vamos fazer o logon como usuário AdmCaxias e senha abc12345. Criaremos um novo formulário chamado Teste, formulário este que não será baseado em nenhuma tabela/consulta, ou seja: um formulário em branco. Vamos adicionar um botão de comando. Quando for aberto o assistente de comando vamos clicar no botão Cancelar. Criaremos, manualmente, código VBA associado ao evento Ao clicar do botão de comando. Ao criar o código veremos os principais Elementos/Vantagens do ambiente de desenvolvimento. Utilizaremos o seguinte código: Dim db As DAO.Database Dim rs As DAO.Recordset Dim numreg As Integer Set db = CurrentDb() Set rs = db.OpenRecordset("Pedidos") numreg = rs.RecordCount MsgBox "NÚMERO DE REGISTROS DA TABELA PEDIDOS: " & numreg Importante: Não se preocupe em entender os comandos utilizados no exemplo anterior. Vamos estudar em detalhes, uma série de objetos, inclusive os objetos Database e RecordSet, utilizados no exemplo anterior.
  • 7. Vista Virtual INFOR MÁT ICA Para criar o formulário Teste faça o seguinte: Execute Abra o Microsoft Access. Abra o banco de dados nwind.mdb que está na Semana2. Faça o logon como usuário AdmCaxias e senha abc12345. No painel da esquerda clique em Formulários. Dê um clique no botão Novo. Na janela "Novo Formulário" dê um clique na opção Modo estrutura, certifique-se de que a lista de Tabelas/Colunas esteja em branco e dê um clique no botão OK, conforme indicado na figura a seguir: Será aberto um formulário em branco. Localize a "Caixa de Ferramentas" e adicione um controle do tipo Botão de Comando (para maiores informações sobre os controles de formulário, inclusive o controle Botão de Comando, consulte os exercícios da primeira seman). Será aberto o "Assistente de botão de comando". Dê um clique no botão Cancelar, para fechar o assistente. Abra as Propriedades do botão de comando e altere o seu nome para: BotaoEx. Ainda com as propriedades abertas, dê um clique na guia Evento. Clique no evento "Ao clicar". Dê um clique no botão (...) que aparece ao lado do evento Ao abrir. Na lista de opções que é exibida selecione Construtor de código, conforme indicado na figura a seguir:
  • 8. Vista Virtual INFOR MÁT ICA Dê um clique no botão OK. Será aberto o ambiente de desenvolvimento do VBA, conforme indicado na figura a seguir:
  • 9. Vista Virtual INFOR MÁT ICA Para cada evento é criado um procedimento separado. Um procedimento é um "pedaço de código" que é executado em resposta ao evento. O nome dos procedimentos associados a eventos segue um padrão bem definido. O padrão é o nome do controle (no nosso caso é BotaoEx) seguido de um sinal de sublinhado e o nome interno do evento (para o Access o evento "Ao clicar" é reconhecido como Click). Por isso, associado ao evento Ao clicar, do controle BotaoEx, temos o seguinte procedimento: Private Sub BotaoEx_Click() End Sub A palavra Private significa que o procedimento é Privado, ou seja, somente pode ser acessado de dentro do formulário Teste. Por exemplo, não teríamos como chamar este procedimento lá no formulário Pedios ou Clientes. O nome do procedimento é como se fosse uma função, por isso o abre e fecha parênteses após o nome. O procedimento poderia receber um ou mais parâmetros de entrada e retornar um ou mais parâmetros de saída. Aprenderemos a trabalhar com parâmetros mais adiante. O final do procedimento é indicado pelo comando: End Sub. O nosso código de exemplo deve ser digitado dentro dos limites do procedimento (entre as linhas Private... e End Sub). IMPORTANTÍSSIMO: ANTES DE COMEÇARMOS A DIGITAR O CÓDIGO PROPOSTO, VAMOS ABRIR UM PEQUENO PARÊNTESES PARA FALAR SOBRE REFERÊNCIAS. REFERÊNCIAS: Conforme descrito anteriormente, com o VBA temos acesso a milhares de objetos. Por exemplo, de dentro de um formulário podemos exibir dados gravados em uma planilha do Excel, ou em um arquivo do DBase III. Para acessarmos, de dentro do Access, dados de uma planilha do Excel, precisamos usar os objetos adequados. Os diversos objetos disponíveis são disponibilizados através de Bibliotecas de Objetos. Por exemplo, todos os objetos para acesso ao Excel, estão agrupados em um biblioteca de objetos, todos os objetos para acesso a dados do próprio Access, estão agrupados em uma outra Biblioteca de objetos e assim por diante. Existem dezenas de bibliotecas, cada uma com centenas de objetos. Para que possamos utilizar, no código VBA, objetos de uma determinada biblioteca, precisamos, antes, fazer uma REFERÊNCIA a biblioteca correspondente. Ao fazer uma REFERÊNCIA a uma biblioteca, passamos a ter acesso a todos os objetos da biblioteca. Você pode perguntar: Então porque não é feita referência, automaticamente, a todas as bibliotecas disponíveis?
  • 10. Vista Virtual INFOR MÁT ICA Isto não é feito, pois cada referência causa um gasto adicional de memória. Se fizéssemos referência a todas as bibliotecas disponíveis, teríamos sérios problemas de desempenho. Para o nosso exemplo temos que fazer referência a biblioteca DAO - Data Access Objetct. Essa biblioteca contém uma série de objetos para acesso a dados. Utilizaremos, intensamente, esta biblioteca durante a terceira semana de treinamento. Para fazer referência a um biblioteca utilizamos o comando: Ferramentas -> Referências. Surge uma janela com todas as bibliotecas disponíveis. Localize a biblioteca "Microsoft DAO x.x Object Library", onde para x.x selecione a versão de maior número que você encontrar na listagem, conforme indicado na figura a seguir: Nota: Pode ser que a versão da biblioteca DAO instalada no seu computador seja diferente. Selecione a versão disponível. Dê um clique no botão OK e pronto, você terá feito referência a biblioteca DAO, necessária ao nosso exemplo. Fizemos referência a esta biblioteca, pois os objetos DataBase e RecordSet que utilizaremos, fazem parte desta biblioteca. Aprenderemos a utilizar estes objetos, em maiores detalhes, durante a terceira semana do treinamento. Aqui fechamos o nosso pequeno parênteses sobre REFERÊNCIAS.
  • 11. Vista Virtual INFOR MÁT ICA Vamos começar a digitar o código do nosso exemplo, para que possamos observar mais algumas funcionalidades do Ambiente de Desenvolvimento. Abaixo da linha Private..., digite o seguinte: Dim db As DAO.Database Observe que após digitar a palavra As e pressionar a barra de espaços é aberta uma listagem com todas as opções disponíveis. Você digita D e a listagem é posicionada no primeiro elemento que começa com a letra D. Selecione DAO, conforme indicado na figura a seguir: Após selecionar DAO digite um ponto. Observe que, novamente, é aberta uma listagem com todos os objetos disponíveis na biblioteca DAO. Na lista de objetos selecione Database, conforme indicado na próxima figura. É importante salientar que não pode haver espaço entre o ponto (.) e o nome do objeto. Essa é uma regra geral: Não existe espaço entre dois nomes separados por ponto (.) ou por ponto de exclamação (!).
  • 12. Vista Virtual INFOR MÁT ICA Esta sem dúvida é uma das maiores vantagens do Ambiente de Desenvolvimento. Ao digitar o nome do objeto e um ponto, automaticamente é exibida uma lista dos métodos/propriedades disponíveis. Essa facilidade é importantíssima, pois evita que tenhamos que decorar o nome dos métodos/propriedades que mais utilizamos. Digite o restante do código, indicado a seguir: Dim rs As DAO.Recordset Dim numreg As Integer Set db = CurrentDb() Set rs = db.OpenRecordset("Pedidos") numreg = rs.RecordCount MsgBox "NÚMERO DE REGISTROS DA TABELA PEDIDOS: " & numreg Observe que a medida que você vai digitando o nome dos objetos, as listas com o nome das propriedades/métodos vão sendo exibidas. O Ambiente de Desenvolvimento também oferece uma série de menus e botões de comando. A medida que formos utilizando estes comandos iremos explicando cada um deles. Agora vamos salvar o procedimento BotaoEx_Click(). Dê um clique no botão Salvar (botão com a figura do disquete). Será aberta uma janela pedindo o nome do Formulário: Digite Teste e dê um clique no botão OK, conforme indicado na próxima figura:
  • 13. Vista Virtual INFOR MÁT ICA Clique no botão "x" de cima para fechar o Ambiente de Desenvolvimento. Você estará de volta ao modo estrutura do formulário Teste. Agora vamos testar o código recém criado. Altere a legenda do botão para Exemplo de VBA! Vá para o modo Formulário. Dê um clique no botão Exemplo de VBA. Será exibida a mensagem indicada na figura a seguir: Dê um clique no botão OK para fechar essa mensagem. Feche o formulário Teste. Feche o Microsoft Access. Nesse tópico abordamos os aspectos básicos do Ambiente de Desenvolvimento. No restante deste treinamento utilizaremos, em diversos momentos, o Ambiente de Desenvolvimento. A medida que formos utilizando este Ambiente, aprenderemos sobre as demais funcionalidades do Ambiente. Anatomia dos Módulos do VBA. O código VBA é escrito em unidades chamadas subrotinas ou funções que são armazenadas em módulos. Os módulos do Microsoft Access podem ser de dois tipos: Módulos Padrão (Standard modules). Módulos de Classes (Class modules). Módulos padrão: são criados a partir da opção Módulos do banco de dados. Os procedimentos e funções criados neste tipo de módulo podem ser utilizados a partir de outros módulos, em formulários e relatórios. Por exemplo, posso criar um módulo padrão chamado "Funções de Validação". Neste módulo crio uma função para validação do CPF, outra para validação do CNPJ e uma terceira para validação do número de processos. A partir de qualquer formulário ou relatório posso "chamar" as funções contidas no módulo "Funções de Validação". Esta é uma maneira de "reaproveitar" as funções que criamos, ou seja, criamos uma única vez e utilizamos nos vários locais onde a função for necessária. Módulos de classe: Podem ser criados como Módulos padrão ou podem ser associados a um formulário ou relatório. Ao criarmos código associado com um evento em um formulário ou relatório, o Microsoft Access, automaticamente, cria um módulo associado com o formulário/relatório. Anatomia de um módulo VBA: Um módulo VBA é formado por uma seção de declarações e uma série de funções/procedimentos. A diferença básica entre função e procedimento é que a função retorna um ou mais valores e o procedimento
  • 14. Vista Virtual INFOR MÁT ICA simplesmente executa uma série de comandos, sem retornar valores. Na seção de declarações podemos declarar variáveis e outros comandos especiais que terão efeito sobre todos os componentes do módulo. Quando criamos um módulo associado a um formulário, temos uma série de procedimentos. Cada vez que criamos código em resposta a um evento, é criado um novo procedimento no modo associado ao formulário. Na próxima página temos um exemplo de uma estrutura genérica de um módulo. ' ANATOMIA DE UM MÓDULO DO VBA. 'Seção de declarações, as opções/variáveis 'desta seção são acessíveis em qualquer parte do módulo. Option Compare Database Option Explicit 'Início do procedimento 1 - Sub1 Private Sub Sub1() Comando1 do Sub1 Comando2 do Sub1 ... Comandon do Sub1 End Sub 'Final do procedimento 1 - Sub1 'Início do procedimento 2 - Sub2 rivate Sub Sub2() Comando1 do Sub2 Comando2 do Sub2 ... Comandon do Sub2 End Sub 'Final do procedimento 2 - Sub2 ... 'Início do procedimento n - Subn Private Sub Subn() Comando1 do Subn Comando2 do Subn ... Comandon do Subn End Sub 'Final do procedimento n - Subn Obs.: As linhas que iniciam com um apóstrofe são linhas de comentário, isto é, não serão executadas pelo Microsoft Access. O uso de comentários é uma forma de
  • 15. Vista Virtual INFOR MÁT ICA fazer a documentação do código VBA, o que facilita a compreensão e manutenção de nossas rotinas. Agora chegou o momento de estudarmos os principais comandos do VBA. Principais comandos do VBA Tipos de dados Declaração e “tipo” de variável: Uma variável é um espaço na memória do computador, reservado para armazenar um ou mais valores. Fazemos referência a este espaço utilizando nomes. Como o valor armazenado pode variar, a medida que o código VBA é executado, estas estruturas são chamadas de variáveis. No VBA, não é obrigatório a declaração de variáveis. Porém é recomendável que declaremos todas as variáveis, de tal forma que o código fique mais claro e de fácil compreensão. Para declararmos uma variável, utilizamos o comando Dim, conforem exemplificado abaixo: Dim x Dim nome Dim teste Neste caso estamos apenas declarando o nome da variável, sem declarar de que tipo (texto,inteiro, data, etc) é a variável. Uma variável declarada sem tipo é considerada do tipo Variant, o que na prática significa que a variável pode conter qualquer tipo de valor. Pode parecer uma prática interessante a não declaração do tipo da variável, porém isso é altamente desaconselhável. Se não declararmos o tipo, conforme descrito anteriormente, a variável poderá conter qualquer valor. Neste caso o que impede de um campo numérico conter valores de texto ou vice-versa?? Nota: Para exemplificar os diversos comandos básicos da linguagem VBA, vamos utilizar o formulário Teste. Para cada comando que será exemplificado, criaremos um novo botão de comando e atribuiremos, ao evento Ao clicar do botão, o código do Exemplo. Para facilitar o estudo, nomearemos o botão com um nome relacionado com o exemplo que este representa. Por exemplo, ao criarmos o botão para exemplificar o uso de operadores aritméticos, chamaremos este botão de ExOperAritméticos. Para maiores informações sobre como criar código associado ao evento Ao clicar de um botão, consulte o exemplo anterior:"Para criar o formulário Teste faça o seguinte:" O formato geral para o comando Dim é: Dim nome_da_variável As tipo_da_variável Também podemos declarar mais do que uma variável, com um único comando Dim. Para isto, basta separar as variáveis, com vírgula, conforme exemplificado abaixo:
  • 16. Vista Virtual INFOR MÁT ICA Dim x,y,z As String Dim nome as Double Dim teste1, teste2 As Integer IMPORTANTE: Observe que definimos o “tipo” de cada variável. O Tipo define quais dados podem ser armazenados em uma variável. Por exemplo, variáveis que armazenam valores numéricos, não devem aceitar caracteres de texto. Variáveis que armazenam datas, não devem aceitar datas inválidas, como por exemplo 30/02/2001. Toda variável no VBScript, é do tipo Variant, isto significa que a variável pode ser de qualquer tipo. O que define o tipo da variável é o valor que está armazenado no momento. Existem funções que conversão de tipo, conforme veremos mais adiante. Também podemos utilizar variáveis que não foram, explicitamente, declaradas com o comando Dim. Com isso, a variável é criada na memória, no momento da sua utilização. Para fazer com que toda variável tenha que ser, explicitamente, declarada, antes de ser utilizada, devemos utilizar o seguinte comando na seção de declaração do módulo: Option Explicit Ao colocarmos este comando na seção de declaração do módulo, estamos definindo que toda variável deve ser declarada, antes de ser utilizada em uma expressão. Se tentarmos utilizar uma variável não declarada, será gerado um erro de compilação. Falaremos mais sobre erros e o tratamento de erros, na terceira semana do treinamento. Na Listagem 1, temos um exemplo simples de utilização de variáveis não declaradas explicitamente. Listagem 1 – Utilização de variáveis não declaradas. Dim a As Integer Dim b As Integer a=5 b=2 c=a+b Msgbox "A variável C vale: " & c Ao tentarmos executar este código, tendo sido definida a opção "Option Explicit", obteremos a mensagem de erro indicada na próxima figura. Este erro acontece porque tentamos utilizar uma variável c, variável esta que não foi declarada.
  • 17. Vista Virtual INFOR MÁT ICA O tipo Variant é formado de pequenas unidades, chamadas subtipos. Cada subtipo, identifica de que maneira os dados são armazenados em uma variável do tipo Variant Por exemplo, variáveis do subtipo Integer são armazenadas de uma maneira diferente de variáveis do subtipo Long. Na Tabela a seguir temos uma descrição dos principais subtipos.
  • 18. Vista Virtual INFOR MÁT ICA Tabela - Subtipos do tipo Variant. Empty O Valor é zero para variáveis numéricas ou uma String de tamanho zero (“ “), para variáveis de texto. Null A variável não contém dados válidos. Boolean Contém variáveis que somente podem assumir dois valores:Verdadeiro ou Falso (True ou False). Byte Valor inteiro, na faixa de 0 até 255. Integer Valor inteiro, na faixa de -32768 até 32767. Currency Valores na faixa de –923.337.203.685.447,5808 até 922.337.203.685.447,5807 Long Valor inteiro, na faixa de –2.147.483.648 até 2.147.483.647. Date(Time) É um número que representa a data entre 01 de Janeiro do ano 100, até 31 de Dezembro de 9999 String Texto de tamanho variável, pode conter, aproximadamente, 2 bilhões de caracteres. Object Pode conter um objeto qualquer, como um Controle Activex, ou um Objeto COM+ Error Pode conter um número de erro. Fazendo cálculos e comparações com o VBScript – Operadores. Para realizarmos cálculos e comparações entre variáveis, podemos utilizar operadores. Neste item trataremos sobre operadores aritméticos e operadores de comparação. Fazendo cálculos com os Operadores aritméticos. Podemos realizar cálculos no VBA, utilizamos operadores aritméticos. Na Tabela a seguir, temos uma descrição dos operadores que podemos utilizar:
  • 19. Vista Virtual INFOR MÁT ICA TABELA - Operadores Aritméticos do VBA Adição + Soma valor de duas ou mais variáveis Subtração - Subtração entre duas ou mais variáveis Multiplicação * Multiplica os valores de duas ou mais variáveis. Divisão / Divide o valor de duas ou mais variáveis Inteiro Retona a parte inteira, da divisão entre dois números Exponenciação ^ x^y É o valor do número x, elevado na potência Y Modulo mod Retona o resto de uma divisão de 2 números Execute Vamos abrir o formulário Teste, do banco de dados Nwind.mdb e criar um botão chamado ExOperadores. Vamos criar um procedimento associado a esse botão, onde exemplificamos o uso dos diversos operadores aritméticos. Abra o banco de dados nwind.mdb que está na pastaSemana2. Abra, no mode estrutura, o formulário Teste. Crie um botão de comando com o nome de ExOperadores. Associe o seguinte código ao evento Ao abrir, deste botão de comando: Dim a As Integer Dim b As Integer Dim som, subtr, divis, mult, intdivs, expo, modul As Double a=25 b=3 som=a+b subtr=a-b divis=a/b mult=a*b intdivs=ab expo=a^b modul= a mod b 'Uso de MsgBox para exibir os resultados.
  • 20. Vista Virtual INFOR MÁT ICA MsgBox "Os números são: " & a & " e " & b & Chr(13) MsgBox "Soma: " & som & Chr(13)& "Subtração: " & subtr & Chr(13) MsgBox "Divisão: " & divis & Chr(13)& "Multiplicação: " & mult & Chr(13) MsgBox "Divisão inteira: " & intdivs & Chr(13)& "Exponenciação: " & expo & Chr(13) MsgBox "Resto da divisão: " & modul Após digitar o código Feche o Ambiente de Desenvolvimento. Salve o Formulário. Vá para o modo Formulário e dê um clique no botão "ExOperadores". Será exibida a seguinte mensagem: Dê um clique no botão OK. Será exibida a seguinte mensagem: Dê um clique no botão OK. Será exibida a seguinte mensagem: Dê um clique no botão OK. Será exibida a seguinte mensagem:
  • 21. Vista Virtual INFOR MÁT ICA Dê um clique no botão OK. Será exibida a seguinte mensagem: Dê um clique no botão OK. Você estará de volta ao formulário Teste. Mantenha este formulário carregado. Iremos utilizá-lo nos próximos exemplos. Neste exemplo utilizamos os operadores aritméticos, para realizar uma série de operações com os valores atribuídos às variáveis “a” e “b”. Depois utilizamos a função MsgBox, para exibir os resultados obtidos. O uso da função MsgBox, merece alguns comentários. Primeiro, utilizamos a função MsgBox, para exibir mensagens em uma pequena janela, chamada de Janela Pop-Up. Podemos exibir texto e também valores de variáveis. Quando temos que exibir diversos componentes, como um pouco de texto, em seguida o valor de uma variável, depois mais texto, e assim por diante, devemos utilizar o operador de concatenação &. Este operador permite que as diversas partes sejam exibidas como uma única mensagem. Considere o exemplo da seguinte linha de código: MsgBox "Os números são: " & a & " e " & b & Chr(13) Neste exemplo, primeiro é exibido o texto: "Os números são:", logo em seguida o valor da variável a. Observe que as duas partes são concatenadas com o operador &. Depois concatenamos o valor da variável b, e finalmente utilizamos a função Chr(13). A função Chr(número), envia o caracter correspondente ao número digitado entre parênteses. Este número, é o número do caracter no padrão ASCII (American Standard Caracter Interchange Information). No código ASCII, cada caracter possui um número associado. No caso o número 13, é associado ao <ENTER>. Com isso estamos enviando um <ENTER>, para a caixa de mensagem, o que equivale a uma troca de linha. Com isso, utilizamos o Chr(13), para simular um <ENTER>, de tal maneira que os dados não saiam todos “emendados”, na mesma linha.
  • 22. Vista Virtual INFOR MÁT ICA Com o uso de operadores, podemos realizar uma série de operações sobre as variáveis existentes no Script. Comparando valores com os Operadores de comparação. Em determinadas situações, existe a necessidade de efetuarmos comparações entre os valores de duas ou mais variáveis ou expressões. Com base no resultado da comparação – Verdadeiro ou Falso -, a execução do código VBA pode seguir caminhos diferentes. Normalmente utilizamos comparações, nas estruturas de controle do código, também conhecidas como laços de controle. Para que possamos estudar os operadores de comparação, vamos apresentar uma das estruturas de controle mais simples que existem no VBA, a estrutura If Then Else. Abaixo temos um exemplo do funcionamento da estrutura If Then Else: If x>y Then ‘ Comandos a serem executados quando x for maior do que y Comando 1 Comando 2 ... Comando n Else ‘ Comandos a serem executados quando x for menor ou igual a y Comando 1 Comando 2 ... Comando n End If Conforme podemos ver, a estrutura If Then Else, é bastante simples. Fazemos um teste no início da estrutura. Se o valor do teste for verdadeiro, executamos os comandos na seqüência, caso contrário, executamos os comandos após o Else. Note que utilizamos o operador de comparação “maior do que: >”, no caso x>y, estamos testando se x é maior do que y.
  • 23. Vista Virtual INFOR MÁT ICA Podemos utilizar laços If Then Else mais complexos, como os do exemplo: If x>y Then ‘ Comandos a serem executados quando x for maior do que y Comando 1 Comando 2 ... Comando n ElseIf x=y Then ‘ Comandos a serem executados quando x for igual a y Comando 1 Comando 2 ... Comando n Else ‘ Comandos a serem executados quando x for menor do que y Comando 1 Comando 2 ... Comando n End If Podemos utilizar tantos ElseIf, quantos forem necessários. Na Tabela a seguir temos uma descrição dos operadores de comparação. Tabela - Operadores de comparação do VBA. Operador Símbolo Descrição Igualdade = É igual a Diferente <> É diferente de Maior que > É maior do que Menor que < É menor do que Maior ou igual a >= É maior ou igual a Menor ou igual a <= É menor ou igual a
  • 24. Vista Virtual INFOR MÁT ICA Execute Vamos ir para o modo Estrutura do formulário Teste, do banco de dados Nwind.mdb e criar um botão chamado ExOperadoresComparação. Vamos criar um procedimento associado a esse botão, onde exemplificamos o uso dos diversos operadores de comparação do VBA. Vá para o modo estrutura do formulário Teste. Crie um botão de comando com o nome de ExOperadoresComparação. Associe o seguinte código ao evento Ao abrir, deste botão de comando: Dim x,y,z,k As Integer x=12 y=15 z=20 k=15 If x<y Then MsgBox "x é menor do que y." Else MsgBox "x é maior do que y." End If If y<x Then MsgBox "Y é menor do que x" Else MsgBox "Y é maior do que x" End If If y<=k Then MsgBox "y é menor ou igual à k" Else MsgBox "Y é maior do que k" End If If x<>z Then MsgBox "x e y são diferentes" End If Após digitar o código Feche o Ambiente de Desenvolvimento. Salve o Formulário. Vá para o modo Formulário e dê um clique no botão "ExOperadoresAritméticos". Será exibida a seguinte mensagem:
  • 25. Vista Virtual INFOR MÁT ICA Dê um clique no botão OK. Será exibida a seguinte mensagem: Dê um clique no botão OK. Será exibida a seguinte mensagem: Dê um clique no botão OK. Será exibida a seguinte mensagem: Dê um clique no botão OK. Você estará de volta ao formulário teste. Mantenha-o aberto para os próximos exemplos. O uso de Operadores de comparação, amplia o leque de possibilidades para nossos programas em VBA. Devemos ter alguns cuidados quando comparamos variáveis que possuem valores de tipos diferentes, como por exemplo, número e texto. A Tabela a seguir descreve o que acontece, quando comparamos variáveis com valores de tipos diferentes.
  • 26. Vista Virtual INFOR MÁT ICA Com a utilização dos operadores aritméticos e de comparação, ampliamos bastante o leque de opções, na criação de códigos com o VBA. No próximo item, veremos alguns detalhes sobre “Escopo” de variáveis. O Escopo das variáveis, no VBA. O escopo de uma variável, define em que partes do código a variável pode ser utilizada. Em VBA, podemos ter os seguintes escopos para as variáveis: Escopo de Módulo: Uma variável declarada dentro do Múdulo, mas fora de qualquer Procedimento. Com isso a variável pode ser utilizada dentro de todo o bloco de código do Módulo, inclusive dentro dos Procedimentos, caso exista algum. Uma variável declarada em nível de Módulo, existe enquanto o Módulo estiver sendo executado.São as variáveis declaradas na seção de Declarações do Módulo. Uma variável declarada em nível de Módulo, poderá ser utilizada em todos os procedimentos/funções do módulo. Escopo de procedimento: A variável somente pode ser utilizada, dentro do procedimento onde esta é declarada. Se tentarmos utilizar a variável fora do procedimento, onde a ela foi declarada, não teremos acesso a ela. Uma variável declarada em nível de procedimento, existe enquanto o procedimento estiver sendo executado.
  • 27. Vista Virtual INFOR MÁT ICA NOTA= Um procedimento é um bloco de código que pode ser chamado em qualquer ponto do Módulo. Ao chamarmos um procedimento, a execução é deslocada para dentro do procedimento. Após concluído o procedimento, a execução segue com a linha seguinte à que chamou o procedimento. Veremos maiores detalhes sobre procedimentos e funções, mais adiante. Vamos a um exemplo prático, para entendermos melhor este conceito de escopo de uma variável. Exemplo: Vamos ir para o modo Estrutura do formulário Teste, do banco de dados Nwind.mdb e criar um botão chamado ExEscopo. Vamos criar um procedimento associado a esse botão, onde exemplificamos o conceito de escopo de variáveis. Execute Abra o banco de dados nwind.mdb que está na pasta Semana2. Faça o logon como usuário AdmCaxias e senha abc12345. Vá para o modo estrutura do formulário Teste. Crie um botão de comando com o nome de ExEscopo. Associe o seguinte código ao evento Ao abrir, deste botão de comando: Dim a,b As Integer x=10 x=20 Call proc1 ' Agora vamos tentar utilizar os valores de a e b ' Fora do procedimento proc1. ' Observe que a variável aux1 não é calculada ' corretamente, uma vez que os valores de a e b ' não estão disponíveis, fora do procedimento proc1 Aux1 = a + b MsgBox "aux1= " & Aux1 O comando Call faz o chamado ao procedimento proc1. Este procedimento deve ser definido no mesmo módulo, caso contrário um erro será gerado. Ao encontrar esse comando o Access desloca a execução para o procedimento proc1, executa os comandos deste procedimento e após encerrar continua a execução a partir do comando seguinte ao comando Call. Vá para a seção de Declarações e declare as seguintes variávies:
  • 28. Vista Virtual INFOR MÁT ICA Dim x, y,aux1 As Integer Para deslocar-se, rapidamente para a seção de Declarações, utilize a lista indicada na figura a seguir. Nesta lista selecione a opção (Geral). Agora vamos criar o procedimento proc1, procedimento este que é chamado no evento ao clicar do botão ExEscopo. Vá para o final do módulo e digite o seguinte código: 'Agora vamos criar um procedimento 'E declarar duas variáveis dentro deste procedimento. 'Estas variáveis somente serão visíveis, 'Dentro deste procedimento. Sub proc1() Dim a, b a=5 b=7 MsgBox "x= " & x & " y= " & y & " a= " & a & " b= " & b End Sub Feche o Ambiente de Desenvolvimento. Vá para o modo formulário. Dê um clique no botão ExEscopo. Será exibida a janela indicada na Figura a seguir: Dê um clique no botão OK. Será exibida a janela indicada na figura a seguir:
  • 29. Vista Virtual INFOR MÁT ICA Observe que o valor da variável aux1 (foi calculado incorretamente), pois a variável aux1 depende dos valores de "a" e "b". Como as variáveis a e b foram declaradas dentro do procedimento proc1, elas não podem ser acessadas de fora do procedimento proc1, ou seja, após a execução do procedimento ter sido encerrada. Dê um clique no botão OK. Mantenha o formulário Teste aberto. Vá para o modo Estrutura do formulário Teste. Com esse exemplo, foi possível verificar, na prática, o conceito de escopo (algumas vezes chamado de visibilidade) das variáveis. No próximo item, trataremos das Estruturas e laços de controle, que são elementos muito importantes na criação de scripts. Estruturas para controle de fluxo em VBScript. Para que possamos criar aplicações com utilidade prática, aplicadas na solução de problemas reais, precisamos poder controlar o fluxo de execução de um script. No VBScript, temos diversas “estruturas” que permitem um controle bastante eficaz do fluxo de execução. Neste item, estaremos estudando diversas destas estruturas. Estruturas de decisão Em um primeiro grupo, temos as chamadas estruturas de decisão. São estruturas que realizam um teste lógico, e executam determinados comandos quando o teste resultar verdadeiro, ou um conjunto diferente de comandos, quando o teste resultar falso. Agora passaremos a analisar as estruturas de decisão, disponíveis no VBA. A estrutura If ... Then A estrutura If...Then, é uma das estruturas de decisão mais conhecidas. Toda linguagem de programação implementa esta estrutura. É utilizada para executar determinados comandos, caso uma condição seja verdadeira. A forma geral desta estrutura é a seguinte: If condição Then Comando1 Comando2 ... Comandon End IF. Uma condição é testada, caso a condição seja verdadeira, um ou mais comandos podem ser executados. Considere o exemplo a seguir:
  • 30. Vista Virtual INFOR MÁT ICA Dim x, y x=10 y=15 If x<y Then MsgBox “x é menor do que y” End If Neste exemplo, a mensagem “x é menor do que y”, será exibida, uma vez que o teste x<y é verdadeiro, conforme podemos constatar pelos valores atribuídos as variáveis x e y. A estrutura If ... Then...Else A estrutura If...Then...Else, acrescenta mais uma possibilidade a estrutura If...Then. É utilizada para executar determinados comandos, caso uma condição seja verdadeira, ou um conjunto diferente de comandos, caso a condição seja falsa. A forma geral desta estrutura é a seguinte: If condição Then Comando1 Comando2 ... Comandon Else Comando1 Comando2 ... Comandon End IF Uma condição é testada, caso a condição seja verdadeira, um determinado comando, ou conjunto de comandos será executado; caso a condição seja falsa, um comando, ou conjunto de comandos diferentes, será executado. Considere o exemplo a seguir: Dim x, y x=15 y=10 If x<y Then MsgBox “x é menor do que y” Else MsgBox “x é maior do que y” End If Neste exemplo, a mensagem “x é maior do que y”, será exibida, uma vez que o teste x<y é falso, conforme podemos constatar pelos valores atribuídos as variáveis x e y. A estrutura If ... Then...ElseIf...Else
  • 31. Vista Virtual INFOR MÁT ICA A estrutura If...Then...ElseIf, nos dá uma poder maior, para testarmos diversas possibilidades. É utilizada quando precisamos realizar mais do que um teste lógico. Neste caso, para cada novo teste que se faça necessário, utilizamos um ElseIf. A forma geral desta estrutura é a seguinte: If condição Then Comandos a serem executados, caso a condição seja verdadeira. Comando1 Comando2 ... Comandon ElseIf condição-2 Comandos a serem executados, caso a condição2 seja verdadeira. Comando1 Comando2 ... Comandon ElseIf condição-3 Comandos a serem executados, caso a condição3 seja verdadeira. Comando1 Comando2 ... Comandon ... ElseIf condição-n Comandos a serem executados, caso a condição n seja verdadeira. Comando1 Comando2 ... Comandon Else Comandos a serem executados, caso nenhuma das condições anteriores seja verdadeira. Comando1 Comando2 ... Comandon End IF. Uma condição é testada, caso a condição seja verdadeira, um determinado comando, ou conjunto de comandos será executado; caso a condição seja falsa, podemos fazer um segundo teste (condição-2). Caso a segunda condição seja verdadeira, um determinado comando, ou conjunto de comandos será executado, a assim por diante, para n condições. Caso nenhuma das condições seja verdadeira, os comandos após a cláusula Else, serão executados.
  • 32. Vista Virtual INFOR MÁT ICA Considere o exemplo a seguir: Dim x, y Dim z, k Dim w, p x=35 y=30 z=25 k=20 w=15 p=10 If x<y Then MsgBox “x é menor do que y” ElseIf x<z Then MsgBox “x é menor do que z” ElseIf x<k Then MsgBox “x é menor do que 4” ElseIf x<w Then MsgBox “x é menor do que w” ElseIf x<p Then MsgBox “x é menor do que p” Else MsgBox “x é o maior dos números” End If Neste exemplo, a mensagem “x é maior dos números”, será exibida, uma vez que todos os testes anteriores falham (pois x é o maior número), com isso somente será executado o último MsgBox, que faz parte do Else. Mas o que acontece, quando um dos ElseIf é verdadeiro ? Os teste vão sendo feitos. Quando o teste de um dos ElseIf for verdadeiro, os comandos abaixo do ElseIf verdadeiro, serão executados e o laço será encerrado. Em resumo, quando um dos ElseIf apresentar um teste verdadeiros, os comandos relacionados serão executados, e os demais não serão avaliados, seguindo a execução para o primeiro comando, após o End If. A estrutura Select...Case Quando precisamos realizar uma série de testes, é mais eficiente utilizarmos uma única estrutura Select...Case, do que utilizarmos uma série de testes utilizando a estrutura If...Then...ElseIf. O funcionamento da estrutura Select...Case, é bastante intuitivo.
  • 33. Vista Virtual INFOR MÁT ICA Considere o exemplo a seguir: Dim x x=10 Select Case x Case 2 MsgBox “X vale 2 !” Case 4 MsgBox “X vale 4 !” Case 6 MsgBox “X vale 6 !” Case 8 MsgBox “X vale 8 !” Case 10 MsgBox “X vale 10 !” Case Else MsgBox “X não é um número par, menor do que 12 ” End Select A estrutura Select Case x, vai testar o valor de x. Em cada um dos Case, o valor de x está sendo testado. Quando for encontrado um valor coincidente com o de x, os comandos abaixo deste Case serão executados. No nosso exemplo, o comando MsgBox “X vale 10 !”, abaixo de Case 10, será executado. O comando abaixo do Case Else somente será executado, se todos os testes anteriores falharem. O uso da estrutura Select...Case, torna o código mais eficiente e de mais fácil leitura. Estruturas de repetição. Em determinadas situações, precisamos repetir um ou mais comandos, um número específico de vezes, ou até que uma determinada condição torne-se verdadeira ou falsa. Por exemplo, pode ser que haja a necessidade de percorrer todos os registros de uma determinada tabela, até que o último registro seja alcançado. Para isso, utilizamos as chamadas estruturas de repetição, ou Laços. A partir de agora, estaremos analisando as estruturas de repetição disponíveis. A estrutura For...Next. Utilizamos o laço For...Next, para repetir um segmento de código, um número determinado de vezes. Utilizamos esta estrutura, quando já sabemos o número de vezes que uma determinada seção de código deve ser repetida. Neste tipo de estrutura, normalmente, utilizamos uma variável como contador. Este contador varia de um valor inicial até um valor final. O Formato geral desta estrutura é o seguinte:
  • 34. Vista Virtual INFOR MÁT ICA For contador=inicio to fim incremento Comando1 Comando2 ... Comandon Next No início a variável contador tem o valor definido para um determinado valor. Em cada passagem do laço, a variável contador é incrementada pelo valor definido em incremento. Caso não seja definido o incremento, será utilizado o padrão 1. Considere o exemplo a seguir: Dim x x=10 Soma=0 ‘ Faz a soma dos 10 primeiros números maiores do que zero For i=1 to x Soma = Soma +i Next MsgBox “Valor da Soma = “ & Soma Neste exemplo, a variável i inicia com o valor 1. Em cada passo, o valor de i é acrescentado à variável Soma. Como o incremento não foi definido, será utilizado o padrão que é 1. Com isso, ao final do laço For...Next, a variável Soma, terá armazenado o valor da soma dos 10 primeiros números inteiros. Poderíamos utilizar um valor de incremento diferente de 1, para, por exemplo, obter a soma somente dos números ímpares menores do que 10: Dim x x=10 Soma=0 ' Faz a soma dos 10 primeiros números ímpares For i=1 to x Step 2 Soma = Soma +i Next MsgBox “Valor da Soma = “ & Soma
  • 35. Vista Virtual INFOR MÁT ICA Com este Script, obtemos o resultado indicado na Figura a seguir: A estrutura Do...Loop. Esta estrutura pode ser utilizada para repetir um trecho de código, enquanto uma determinada condição for verdadeira, ou até que uma determinada condição torne-se verdadeira. Podemos utilizar dois operadores condicionais diferentes: While ou Until. Os operadores While ou Until, podem ser utilizados de duas maneiras diferentes: No início do laço, ou no final do laço. Com isso temos quatro situações distintas, vamos analisar cada uma delas, a partir de agora. A estrutura Do While Condição...Loop. Neste caso, estamos utilizando o operador condicional While, no início do laço. O formato geral, neste caso é o seguinte: Do While condição/teste Comando1 Comando2 ... Comandon Loop Nesta estrutura, enquanto a condição for verdadeira, o código dentro do laço é executado. Quando a condição tornar-se falsa, o primeiro comando após o final do laço, será executado. Neste caso, se a condição for falsa já na primeira vez, o laço não será executado nenhuma vez. IMPORTANTE= O Código dentro do laço deve ser capaz de alterar a condição para Falso, quando for necessário, pois caso contrário a condição será sempre verdadeira, e os comandos dentro do laço ficarão em execução, infinitamente, ou até o programa travar. A criação de laços infinitos, devido a erros de programação, é uma causa comum de erros e travamentos.
  • 36. Vista Virtual INFOR MÁT ICA Considere o exemplo a seguir: Dim x x=10 Contador=1 Soma=0 ' Faz a soma dos 10 primeiros números maiores do que zero Do While Contador <= x Soma = Soma + Contador Contador = Contador + 1 Loop MsgBox “Valor da Soma = “ & Soma Observe que dentro do laço, vamos Incrementando o valor da variável Contador, uma unidade para cada passagem do laço. Com isso, quando o valor de Contador, atingir 11, o teste do início do laço torna-se falso, e o laço é encerrado. A estrutura Do... Loop While Condição. Neste caso, deslocamos o teste de condição para o final do laço. Com o teste no final do laço, o código dentro do laço, será executado, pelo menos uma vez, pois o teste somente é feito no final, e continuará sendo executado, enquanto a condição for verdadeira. O formato geral, neste caso é o seguinte: Do Comando1 Comando2 ... Comandon Loop While condição/teste Nesta estrutura, enquanto a condição for verdadeira, o código dentro do laço é executado. Quando a condição tornar-se falsa, o primeiro comando após o final do laço, será executado. Neste caso, se a condição for falsa já na primeira vez, o laço será executado uma única vez. IMPORTANTE= O Código dentro do laço deve ser capaz de alterar a condição para Falso, quando for necessário, pois caso contrário a condição será sempre verdadeira, e os comandos dentro do laço ficarão em execução, infinitamente, ou até o programa travar. A criação de laços infinitos, devido a erros de programação, é uma causa comum de erros e travamentos.
  • 37. Vista Virtual INFOR MÁT ICA Considere o exemplo a seguir: Dim x x=10 Contador=1 Soma=0 ‘ Faz a soma dos 10 primeiros números maiores do que zero Do Soma = Soma + Contador Contador = Contador + 1 Loop While Contador <= x MsgBox “Valor da Soma = “ & Soma Vamos modificar um pouco o nosso exemplo. Considere o exemplo mostrado a seguir: Dim x x=10 Contador=11 Soma=0 ‘ O laço será executado uma única vez, pois a condição ‘ Contador < x é falsa. Do Soma = Soma + Contador Contador = Contador + 1 Loop While Contador <= x MsgBox “Valor da Soma = “ & Soma Qual o valor será exibido para a variável Soma ? Muito simples. A condição Contador < x é falsa, pois x=10 e Contador=12 (Lembre que o Contador foi incrementado de uma unidade dentro do laço, antes do teste ser realizado). Neste caso, o laço será executado uma única vez, pois o teste de condição está no final do laço. Quando o laço é executado, é atribuido o valor 11 para a variável Soma. Com isso, o valor exibido para a variável Soma, será 11.
  • 38. Vista Virtual INFOR MÁT ICA A estrutura Do Until Condição...Loop. Neste caso, estamos utilizando o operador condicional Until, no início do laço. O formato geral, neste caso é o seguinte: Do Until condição Comando1 Comando2 ... Comandon Loop Nesta estrutura, enquanto a condição for falsa, o código dentro do laço é executado. Quando a condição tornar-se verdadeira, o primeiro comando após o final do laço, será executado. Neste caso, se a condição for verdadeira, já na primeira vez, o laço não será executado nenhuma vez. IMPORTANTE= O Código dentro do laço deve ser capaz de tornar a condição Verdadeira, quando for necessário, pois caso contrário a condição será sempre Falsa, e os comandos dentro do laço ficarão em execução, infinitamente, ou até o programa travar. A criação de laços infinitos, devido a erros de programação, é uma causa comum de erros e travamentos. Considere o exemplo a seguir: Dim x x=10 Contador=1 Soma=0 ‘ Faz a soma dos 10 primeiros números maiores do que zero Do Until Contador > x Soma = Soma + Contador Contador = Contador + 1 Loop MsgBox “Valor da Soma = “ & Soma Observe que dentro do laço, vamos Incrementando o valor da variável Contador, uma unidade para cada passagem do laço. Com isso, quando o valor de Contador, atingir 11, o teste do início do laço torna-se Verdadeiro, e o laço é encerrado.
  • 39. Vista Virtual INFOR MÁT ICA A estrutura Do... Loop Until Condição. Neste caso, deslocamos o teste de condição para o final do laço. Com o teste no final do laço, o código dentro do laço, será executado, pelo menos uma vez, pois o teste somente é feito no final, e continuará sendo executado, enquanto a condição for Falsa. O formato geral, neste caso é o seguinte: Do Comando1 Comando2 ... Comandon Loop Until condição Nesta estrutura, enquanto a condição for Falsa, o código dentro do laço é executado. Quando a condição tornar-se Verdadeira, o primeiro comando após o final do laço, será executado. Neste caso, se a condição for Verdadeira, já na primeira vez, o laço será executado uma única vez. IMPORTANTE= O Código dentro do laço deve ser capaz de tornar a condição Verdadeira, quando for necessário, pois caso contrário a condição será sempre Falsa, e os comandos dentro do laço ficarão em execução, infinitamente, ou até o programa travar. A criação de laços infinitos, devido a erros de programação, é uma causa comum de erros e travamentos. Considere o exemplo a seguir: Dim x x=10 Contador=1 Soma=0 ‘ Faz a soma dos 10 primeiros números maiores do que zero Do Soma = Soma + Contador Contador = Contador + 1 Loop Until Contador > x MsgBox “Valor da Soma = “ & Soma
  • 40. Vista Virtual INFOR MÁT ICA Vamos modificar um pouco o nosso exemplo. Considere o exemplo a seguir: Dim x x=10 Contador=11 Soma=0 ‘ O laço será executado uma única vez, pois a condição ‘ Contador >= x é verdadeira. Do Soma = Soma + Contador Contador = Contador + 1 Loop Until Contador >= x MsgBox “Valor da Soma = “ & Soma Qual o valor será exibido para a variável Soma ? Muito simples. A condição Contador>= x é falsa, pois x=10 e Contador=12 (Lembre que o Contador foi incrementado de uma unidade, na linha 11, na primeira passagem do laço). Neste caso, o laço será executado uma única vez, pois o teste de condição está no final do laço. Quando o laço é executado, é atribuido o valor 11 para a variável Soma. Com isso, o valor exibido para a variável Soma, será 11. Exercício: Crie um formulário onde são adicionados dois campos para digitação de valores inteiros. Adicione um botão chamado Calcular. O usuário digita um valor no primeiro campo e outro valor no segundo campo. O valor do segundo campo deve ser maior do que o valor do primeiro campo. O sistema deve fazer essa verificação. Deve haver um grupo com dois botões de rádio. Um associado ao valor (Pares) e outro associado ao valor (Ímpares). O usuário marca uma destas opções e clica no botão Calcular. O sistema calcula a soma dos números pares ou ímpares (de acordo com a seleção do usuário), dentro do intervalo definido pelos valores digitados pelo usuário.
  • 41. Vista Virtual INFOR MÁT ICA Funções, procedimentos e eventos com VBScript. Introdução Neste tópico, veremos uma série de aspectos que vão além do básico do VBA. Iniciaremos falando um pouco mais sobre tipos de dados e funções para conversão de tipos. Este tópico é de grande importância, principalmente quando criamos código que efetua cálculos, como por exemplo o cálculo do imposto em um volume de dados do contribuinte. Depois passaremos a analisar uma série de funções internas do VBA. São funções que fazem parte do Microsoft Access, como por exemplo a função Date(), que retorna a data do sistema. Na seqüência, aprenderemos a criar nossas próprias funções e Sub-rotinas. Aprenderemos as diferenças entre uma Sub-rotina e uma função, e quando utilizar uma ao invés da outra. Tipos de dados e funções para conversão de tipos. Neste item, aprenderemos a determinar qual o tipo de dado que está armazenado em uma variável, bem como a converter valores de um tipo para outro, utilizando as funções para conversão de tipos. Determinando o Tipo de Dados contido em uma variável. Existem diversas funções, que permitem que seja determinado o tipo de valor contido em uma variável. Existem diversas aplicações para este tipo de função. Por exemplo, ao digitar dados em um formulário, podemos utilizar uma função para determinar se os valores digitados pelo usuário, não apresentam problemas. Por exemplo, o usuário pode ter digitado, por engano, texto em um campo que deve conter valores numéricos. A função IsArray. Um Array é um tipo especial de variável, a qual pode armazenar diversos valores em uma única variável. De uma forma simples, um Array é um conjunto. Por exemplo, poderíamos ter uma variável Array na qual são armazenados todos os códigos de tributo, válidos. Cada valor armazenado no Array é um elemento do conjunto. Um outro exemplo: Poderíamos criar um Array para armazenar os nomes dos meses do ano. Com isso teríamos um Array de 12 elementos.
  • 42. Vista Virtual INFOR MÁT ICA Cada elemento de um Array, é acessado através do nome da variável Array e de um índice. O índice inicia em zero e não em um. Por isso se tivermos um Array de 10 elementos, teremos o elemento 0, o elemento 1, o elemento 2, e assim por diante, até o elemento 9. O fato do índice começar com 0, influencia na hora que formos declarar um Array. Para declarar um Array chamado produtos, com 20 elementos, utilizaríamos a seguinte declaração: Dim produtos(19) O 19 significa que temos 20 elementos (sempre um a mais do que o número que aparece na declaração), isto é, do elemento 0, indicado por produtos(0), até o elemento 20, indicado por produtos(19). No exemplo a seguir, temos um exemplo simples de utilização de Array: 'Declara um Array de 7 posições 'Como a primeira posição é a posição zero, 'Indicamos o tamanho como 6, o que significa 'da posição 0 até a posição 6 = 7 elementos. Dim Dias(6) 'Atribuímos valores para os dias da semana Dias(0)= "Segunda-feira" Dias(1)= "Terça-feira" Dias(2)= "Quarta-feira" Dias(3)= "Quinta-feira" Dias(4)= "Sexta-feira" Dias(5)= "Sábado" Dias(6)= "Domingo" 'Agora utilizamos um laço For...Next 'Para criar uma String, com o conteúdo 'Do Array Dias. For i=0 to 6 mensagem = mensagem & "Dia: " & i+1 & " " & Dias(i)& Chr(13) Next 'Utilizamos uma MsgBox, para exibir a mensagem 'com o conteúdo do Array Dias. MsgBox mensagem Exercício: Abra o formulário Teste no modo Estrutura, crie um botão chamado ExArray e associe o código deste exemplo, ao evento Ao clicar deste botão. Teste o funcionamento do código.
  • 43. Vista Virtual INFOR MÁT ICA Utilizamos a função IsArray, para determinar se uma variável do tipo Variant (lembre que todas as variáveis do VBA, são do tipo Variant), está armazenando um Array. Utilizamos a seguinte sintaxe: IsArray(NomeDaVariável) A função IsArray retorna verdadeiro se a variável for um Array, e falso caso contrário. Vamos alterar um pouco o exemplo anterior, adicionando o seguinte comando, ao final da listagem.: MsgBox IsArray(Dias) o resultado seria o indicado na Figura a seguir: A função VarType. Podemos utilizar a função VarType, para determinar o subtipo de uma variável. Como todas as variáveis são do tipo Variant, o subtipo pode ser utilizado para determinar o tipo de dado armazenado na variável. Passamos para a função, o nome de uma variável ou expressão. A função retorna um número inteiro que indica o subtipo da variável. A sintaxe da função é a seguinte: VarType(NomeDaVariável) ou VarType(expressão) Na Tabela a seguir temos os códigos de retorno da função VarType.
  • 44. Vista Virtual INFOR MÁT ICA Tabela - Valores de retorno da função VarType. Valor Descrição 0 Vazio (não inicializado) 1 Nulo (dados não válidos) 2 Inteiro 3 Inteiro longo 4 Número de precisão simples 5 Número de precisão dupla 6 Monetário. 7 Data 8 Texto 9 Objeto de automação 10 Erro 11 Boleano 12 Variant (somente é utilizado com Arrays de variantes) 13 Um objeto para acesso a dados. 17 Byte 8192 Array No exemplo a seguir, temos um exemplo de utilização da função VarType. Dim x,y,z Dim a, b Dim c(20) Dim mensagem As String x=12 y=23.456 y=123456789 a="Este é um valor de texto !" ‘Utilizamos a função Date( ), para capturar a data do sistema. b=Date() mensagem = "Tipo da variável x: " & Vartype(x) & Chr(13) mensagem = mensagem & "Tipo da variável y: " & Vartype(y) & Chr(13) mensagem = mensagem & "Tipo da variável z: " & Vartype(z) & Chr(13) mensagem = mensagem & "Tipo da variável a: " & Vartype(a) & Chr(13) mensagem = mensagem & "Tipo da variável b: " & Vartype(b) & Chr(13) mensagem = mensagem & "Tipo da variável c: " & Vartype(c) & Chr(13) MsgBox mensagem Ao executar este exemplo, obteremos o resultado indicado na Figura a seguir:
  • 45. Vista Virtual INFOR MÁT ICA Observe, principalmente, no tipo da variável z, o qual retornou 0. Isto significa que a variável z está vazia, ou seja, não foi inicializado. Este resultado está coerente com a Tabela anterior. Também podemos salientar o retorno para a variável b, o qual retornou 7, indicando que o valor armazenado nesta variável é do tipo Data, o que também está coerente com a Tabela anterior, uma vez que usamos a função Date() , para armazenar a data do sistema, na variável b. Finalmente observe o valor de retorno para a variável c, o qual retornou 8192, indicando que a variável c é um Array. Este resultado está coerente com a Tabela anterior, e com a declaração: Dim c(20), a qual declarou a variável c como sendo um Array. Muitas são as aplicações práticas para a função VarType, dentre as quais podemos destacar a validação dos dados digitados em um formulário. Exercício: Abra o formulário Teste no modo Estrutura, crie um botão chamado ExVarType e associe o código deste exemplo, ao evento Ao clicar deste botão. Teste o funcionamento do código.
  • 46. Vista Virtual INFOR MÁT ICA A função IsDate. A função IsDate recebe uma variável ou expressão como argumento, e determina se a variável ou expressão é uma data válida, ou pode ser convertida para uma data válida. Caso o argumento passado seja uma data válida, a função retorna Verdadeiro, caso contrário, retorna Falso. Podemos utilizar esta função, por exemplo, para verificar se o usuário digitou uma data válida, em um campo de um formulário. A sintaxe da função IsDate é a seguinte: IsDate(NomeDaVariável) ou IsDate(expressão) A seguir temos um exemplo de utilização da função IsDate. If IsDate(Me![DataDeEntrada]) Then MsgBox "Você digitou uma data válida !" Else MsgBox "Data inválida, digite novamente !" Me![DataDeEntrada] = Null Me![DataDeEntrada].SetFocus End If Exercício: Abra o formulário Teste no modo Estrutura, crie um botão chamado ExIsDate e associe o código deste exemplo, ao evento Ao clicar deste botão. Crie um campo do tipo Caixa de Texto, onde o usuário pode digitar uma data. Nomeie este campo como DataDeEntrada. Teste o funcionamento do código.
  • 47. Vista Virtual INFOR MÁT ICA A função IsEmpty. A função IsEmpty recebe uma variável ou expressão como argumento, e determina se, em algum momento, foi atribuído algum valor para a variável ou expressão. Caso tenha sido atribuído algum valor, a função retorna Verdadeiro, caso contrário, retorna Falso. Podemos utilizar esta função, por exemplo, para verificar se um campo de digitação obrigatória, como por exemplo o nome, não foi deixado em branco. A sintaxe da função IsEmpty é a seguinte: IsEmpty(NomeDaVariável) ou IsEmpty(expressão) A seguir temos um exemplo de utilização da função IsEmpty. Vamos declarar uma variável x, que nunca Será utilizada no nosso Script Dim a, b, c Dim x a=10 b=23 c=a+b If IsEmpty(x) Then MsgBox "A variável x, não foi utilizada !" End If A variável x foi declarada porém não foi inicializada, com isso possui está vazia, logo a função IsEmpty(x) irá retornar Verdadeiro. A função IsNull. A função IsNull recebe uma variável ou expressão como argumento, e determina se, em algum momento, foi atribuído o valor Null para a variável ou expressão. Caso tenha sido atribuído o valor Null, a função retorna Verdadeiro, caso contrário, retorna Falso. Para atribuirmos Null para uma variável, utilizamos a seguinte sintaxe: NomeDaVariável = Null
  • 48. Vista Virtual INFOR MÁT ICA IMPORTANTE: Uma variável com valor Null, não é a mesma coisa que uma variável com valor zero, ou uma variável de texto com tamanho zero. Quando é atribuído o valor Null para a variável, esta continua existindo na memória, porém sem nenhum valor definido. A sintaxe da função IsNull é a seguinte: IsNull(NomeDaVariável) ou IsNull(expressão) A seguir temos um exemplo de utilização da função IsNull. ' Vamos declarar uma variável x, e atribuir ' Null, para a variável. Dim x x = Null If IsNull(x) Then MsgBox "A variável x é Nula !" End If Este exemplo produz o seguinte resultado: A função IsNumeric. A função IsNumeric recebe uma variável ou expressão como argumento, e determina se o valor atribuído à variável ou expressão é numérico, ou pode ser convertido para numérico. Caso o valor seja numérico, ou possa ser convertido, a função retorna Verdadeiro, caso contrário, retorna Falso. A sintaxe da função IsNumeric é a seguinte: IsNumeric(NomeDaVariável) ou IsNumeric(expressão)
  • 49. Vista Virtual INFOR MÁT ICA A seguir temos um exemplo de utilização da função IsNumeric. Dim x,y,z x=123 'Atribuo um valor que não pode ser convertido 'para numérico y = "Riachuelo - 80" z = Date() mensagem = "Valor de x: " & x &" É numérico ? " & IsNumeric(x)& Chr(13) mensagem = mensagem & "Valor de y: " & y &" É numérico ? " & IsNumeric(y)& Chr(13) mensagem = mensagem & "Valor de z: " & z &" É numérico ? " & IsNumeric(z) MsgBox mensagem Exercício: Abra o formulário Teste no modo Estrutura, crie um botão chamado ExIsNumeric e associe o código deste exemplo, ao evento Ao clicar deste botão. Teste o funcionamento do código. Cabe salientar a utilização da função Date(), para capturar a data do sistema, e atribuir esta data à variável z. Observe que esta data não foi considerada um valor numérico para a função IsNumeric. A função IsObject. A função IsObject recebe uma variável como argumento, e determina se o valor atribuído à variável é um Objeto Activex, se for um objeto Activex, a função retorna Verdadeiro, caso contrário, retorna Falso. A sintaxe da função IsObject é a seguinte: IsObject(NomeDaVariável) ou IsObject(expressão)
  • 50. Vista Virtual INFOR MÁT ICA Funções para conversão de tipos. Neste item aprenderemos a utilizar as principais funções para conversão de tipos. Existem situações em que um determinado tipo de dado, deve ser convertido para outro. Por exemplo, se tivermos um número, armazenado na forma de texto, precisamos convertê-lo para inteiro ou double, para que possamos realizar cálculos com o mesmo. Faremos um exemplo de cálculo do DV do CPF, onde o CPF é um valor do tipo texto. Ao extrairmos cada dígito do CPF, estes serão extraítos como caracteres de texto. Precisaremos utilizar uma função de conversão, para convertê- los para números, a fim de que possamos efetuar os cálculos necessários. Na seqüência, apresento as principais funções de conversão, bem como um pequeno fragmento de código, exemplificando a utilização de cada uma delas. Função Cbool. A função Cbool converte uma variável ou resultado de um expressão, para o subtipo Boolean. Qualquer número, com exceção do zero, é automaticamente convertido para Verdadeiro. O valor zero é sempre convertido para Falso. O argumento desta função, não pode ser Texto, caso contrário será gerado um erro em tempo de execução. Observe este linha de código: MsgBox cbool(10>25) & chr(13) & cbool(3) Esta linha gera a mensagem indicada na Figura a seguir: A expressão 10>25 é avaliada, como a expressão é falsa, a função Cbool retorna Falso. Já no segundo uso da função Cbool, foi passado o parâmetro 3 para a função. Qualquer valor diferente de zero (com exceção de texto), a função interpreta como Verdadeiro, o que é comprovado pela Figura anterior.
  • 51. Vista Virtual INFOR MÁT ICA Função CByte. A função CByte converte uma variável ou resultado de um expressão, para o subtipo Byte. O valor a ser convertido, deve estar na faixa aceitável para o tipo byte, que vai de 0 à 255. Caso o número esteja fora desta faixa, será gerada uma mensagem de erro, em tempo de execução. O argumento desta função, não pode ser Texto, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CByte(10+34) & chr(13) & CByte(35) Esta linha gera a mensagem indicada na Figura a seguir: A expressão 10+34 é calculada, e o resultado (44), é convertido para o tipo byte. A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução, pois o valor a ser convertido para byte, está fora da faixa de 0 à 255. MsgBox CByte(100+200) Função CCur. A função CCur converte uma variável ou resultado de um expressão, para o subtipo Currency. O argumento desta função, não pode ser Texto, caso contrário será gerado um erro. Observe este linha de código: MsgBox CCur(250.335677+324.3333) & chr(13) & CCur(1250.326582) Esta linha gera a mensagem indicada na Figura a seguir: A expressão 250.335677+324.3333 é calculada, e o resultado é convertido para o tipo Currency. Se passarmos um argumento de texto para a função CCur, será gerado um erro de execução, conforme indicado na Figura a seguir:
  • 52. Vista Virtual INFOR MÁT ICA Função CDate. A função CDate converte uma variável ou resultado de um expressão, para o subtipo Date. O argumento desta função deve estar em um formato que seja aceitável para datas, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CDate(“31/10/1980”) & chr(13) & CDate(“23-01-2007”) Esta linha gera a mensagem indicada na Figura a seguir:
  • 53. Vista Virtual INFOR MÁT ICA A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução, conforme indicado na próxima figura: MsgBox CDate(“31/02/1980”) Função CDbl. A função CDbl converte uma variável ou resultado de um expressão, para o subtipo Double. O argumento desta função não pode ser do tipo texto, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CDbl("4.940651247E-17") Esta linha gera a mensagem indicada na Figura a seguir:
  • 54. Vista Virtual INFOR MÁT ICA Função CInt. A função CInt converte uma variável ou resultado de um expressão, para o subtipo Integer. O argumento desta função não pode ser do tipo texto, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CInt(32.36) & Chr(13) & CInt(20.35+40.45) Esta linha gera a mensagem indicada na Figura a seguir: A linha de código abaixo, irá gerar uma mensagem de erro, em tempo de execução. Função CLng. A função CLng converte uma variável ou resultado de um expressão, para o subtipo Long. O argumento desta função não pode ser do tipo texto, caso contrário será gerada uma mensagem de erro, em tempo de execução. O argumento também não pode estar fora da faixa admitida pelo subtipo Long, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CLng("3462315") Esta linha gera a mensagem indicada na Figura a seguir:
  • 55. Vista Virtual INFOR MÁT ICA Função CSng. A função CSng converte uma variável ou resultado de um expressão, para o subtipo Single. O argumento desta função não pode ser do tipo texto, caso contrário será gerada uma mensagem de erro, em tempo de execução. O argumento também não pode estar fora da faixa admitida pelo subtipo Single, caso contrário será gerada uma mensagem de erro, em tempo de execução. Observe este linha de código: MsgBox CSng("3.1418256927") Esta linha gera a mensagem indicada na Figura a seguir: Função CStr. A função CStr converte uma variável ou resultado de um expressão, para o subtipo String. Observe este linha de código: MsgBox CStr("12345" & " hectares de terra") Esta linha gera a mensagem indicada na Figura a seguir:
  • 56. Vista Virtual INFOR MÁT ICA Outras funções do VBScript – Tratamento de String, Datas e Funções matemáticas. Neste item, aprenderemos a utilizar as principais funções do VBA. Apresentaremos as funções divididas em categorias, conforme a funcionalidade destas. Trataremos das seguintes categorias: Funções para manipulação de String. Funções para manipulação de Data/Hora. Funções matemáticas. Funções para tratamento de String. Veremos as principais funções para tratamento de String. Função Asc. A função Asc, retorna o valor numérico do código ASCII, para a primeira letra de uma String. Considere o exemplo: Asc(“Ainda chovia”) Este exemplo de uso da função retorna o valor 65, o qual é o código ASCII, para a letra A maiúscula. Caso fosse a letra "a" minúscula, o código retornado seria 97 e assim por diante. Função Chr. A função Chr(número), recebe um número como parâmetro, e retorna o caracter ASCII, associado ao número passado como parâmetro. Considere o exemplo: Chr(65) Este exemplo de uso da função retorna o caracter "A" maiúsculo. NOTA: Até agora, utilizamos a função Chr em diversos exemplos. Utilizamos o Chr(13), para simular um ENTER, o que faz uma quebra de linha, nas mensagens montadas com o MsgBox. Função Len. Esta função determina o tamanho da String que foi passada como parâmetro para a função. Considere o exemplo: MsgBox Len(“Este é um exemplo de uso da função Len !!”) Este exemplo de uso da função, retorna 41, conforme indicado na Figura a seguir:
  • 57. Vista Virtual INFOR MÁT ICA Função LCase. Esta função converte para minúsculas, a String que foi passada como parâmetro para a função. Considere o exemplo: MsgBox Lcase(“ESTE É UM EXEMPLO DE USO DA FUNÇÃO LCASE!!”)Este exemplo de uso da função, converte o parâmetro passado, para letras minúsculas, conforme indicado na Figura a seguir: Função UCase. Esta função converte para MAIÚSCULAS, a String que foi passada como parâmetro para a função. Considere o exemplo: MsgBox Lcase(“este é um exemplo do uso da função ucase !!”) Este exemplo de uso da função, converte o parâmetro passado, para letras maiúsculas, conforme indicado na Figura a seguir: Função Left. Esta função retorna um número especificado de caracteres, a partir do início (Left – Esquerda) de uma String. É importante salientar que espaços em branco também devem ser considerados. O formato geral da função é o seguinte: Left(String, n)
  • 58. Vista Virtual INFOR MÁT ICA onde n é o número de caracteres a retornar. Considere o exemplo: MsgBox Left(“VistaVirtual Informática LTDA”,5) Este exemplo de uso da função, retorna as cinco primeiras letras da String passada, neste caso, retornará VistaVirtual. Vamos alterar um pouco o nosso exemplo: MsgBox Left(“VistaVirtual Informática LTDA”,7) Irá retornar: VistaVirtual I Observe que o espaço em branco também é considerado. Nota: Durante a primeira semana do treinamento utilizamos a função Left() (Esquerda()) em consultas e formulários. Função Right. Esta função retorna um número especificado de caracteres, a partir do final (Right – Direita) de uma String. É importante salientar que espaços em branco também devem ser considerados. O formato geral da função é o seguinte: Right(String, n) onde n é o número de caracteres a retornar. Considere o exemplo: MsgBox Right(“VistaVirtual Informática”,6) Este exemplo de uso da função, retorna as seis ultimas letras da String passada, neste caso, retornará “mática”. Vamos alterar um pouco o nosso exemplo: MsgBox Right(“VistaVirtual Informática”,10) Irá retornar: nformática Observe que o espaço em branco também é considerado. Nota: Durante a primeira semana do treinamento utilizamos a função Right() (Direita()) em consultas e formulários. Função Mid.
  • 59. Vista Virtual INFOR MÁT ICA Esta função retorna um número especificado de caracteres, a partir de uma posição especificada, dentro da String. É importante salientar que espaços em branco também devem ser considerados. O formato geral da função é o seguinte: Mid(String, posicao_inicio, n) onde: posicao_inicio é a posição a partir da qual devem ser retornados caracteres n é o número de caracteres a retornar. Considere alguns exemplos: Mid(“VistaVirtual Informática”,7,5) Este exemplo de uso da função, retorna, a partir da posição 7, 5 caracteres, neste caso, retornará Infor. Mid(“SANTA MARIA”,3,7) , irá retornar NTA MAR. Observe que o espaço em branco também é considerado. Um detalhe interessante, é que podemos utilizar o valor retornado por uma função, como parâmetro para outra função. Considere o seguinte exemplo: LCase(Mid(“SANTA MARIA”,3,7)) Este exemplo retorna nta mar. A função Mid retira os caracteres NTA MAR, os quais são passados como parâmetros para a função LCase, a qual converte os caracteres para minúsculos. Função String. Esta função retorna um determinado caracter, um número especificado de vezes. O formato geral da função é o seguinte: String(n, Caracter) onde n é o número de vezes que Caractere deve ser repitido. Considere o exemplo: MsgBox String(35,”*”) A Figura a seguir mostra o resultado deste comando:
  • 60. Vista Virtual INFOR MÁT ICA Funções para tratamento de Data e Hora. Veremos as principais funções para tratamento de Data e Hora. Função Date. Retorna a data corrente do sistema. Não precisamos passar parâmetros para esta função. Considere o exemplo abaixo: MsgBox “Data do Sistema: “ & Date() O resultado deste comando, está indicado na Figura a seguir: Função Time. Retorna a hora corrente do sistema. Não precisamos passar parâmetros para esta função. Considere o exemplo abaixo: MsgBox “Hora do Sistema: “ & Time( ) O resultado deste comando, está indicado na Figura a seguir: Treinamento de Access Avançado – Parte II
  • 61. Vista Virtual INFOR MÁT ICA Função Day. Recebe como parâmetro uma data, e retorna um número entre 1 e 31, indicando o dia do mês. O formato geral é o seguinte: Day(data) Considere o exemplo abaixo: MsgBox “Dia do mês: “ & Day(Date( )) O resultado deste comando, está indicado na Figura a seguir: A função Date( ) captura a data do sistema e passa como parâmetro para a função Day, a qual por sua vez, retorna apenas o dia do mês. Função Month. Recebe como parâmetro uma data, e retorna um número entre 1 e 12, indicando o mês do ano. O formato geral é o seguinte: Month(data) Considere o exemplo abaixo: MsgBox “Mês do ano: “ & Month(Date( )) O resultado deste comando, está indicado na Figura a seguir: A função Date( ) captura a data do sistema e passa como parâmetro para a função Month, a qual por sua vez, retorna apenas o mês do ano Função Now. Retorna a hora e a data corrente do sistema. Não precisamos passar parâmetros para esta função. Considere o exemplo abaixo:
  • 62. Vista Virtual INFOR MÁT ICA MsgBox “Data e Hora do Sistema: “ & Now( ) O resultado deste comando, está indicado na Figura a seguir: Função MonthName. Recebe como parâmetro um número, indicativo do mês do ano (1 – Janeiro, 2 – Fevereiro, e assim por diante), e um segundo parâmetro que pode ser Verdadeiro ou Falso. Se o segundo parâmetro for verdadeiro, o nome do mês será exibido abreviadamente. O formato geral é o seguinte: MonthName(número_do_mês, abreviar) Considere o exemplo abaixo: MsgBox “Mês do ano: “ & MonthName(Month(Date(),False) O resultado deste comando, está indicado na Figura a seguir: A função Date() captura a data do sistema e passa como parâmetro para a função Month. A função Month retorna o número do mês retornado pela data. Este número é passado como primeiro parâmetro para a função MonthName. O segundo parâmetro é definido em Falso, o que significa que é para exibir o nome do mês por extenso, isto é, não abreviado. Função Hour. Recebe como parâmetro uma hora, e retorna um número entre 0 e 23, indicando o hora do dia. O formato geral é o seguinte: Hour(horário) Considere o exemplo abaixo: MsgBox “Hora do dia: “ & Hour(Time( ))
  • 63. Vista Virtual INFOR MÁT ICA O resultado deste comando, está indicado na Figura a seguir: A função Time() captura a hora do sistema e passa como parâmetro para a função Hour(), a qual por sua vez, retorna apenas o hora do dia. A função DateDiff. Esta função pode ser utilizada para determinar o número de intervalos (em dias, trimestres, semestres, anos, etc), entre duas datas. A sintaxe desta função é o seguinte: DateDiff(intervalo, data1, data2) O parâmetro intervalo é uma String que diz que tipo de intervalo vamos calcular. Por exemplo, é este parâmetro que define se queremos calcular o número de dias, ou o número de meses entre duas datas. Na Tabela a seguir, temos os valores possíveis para o parâmetro intervalo. Tabela - Valores para o parâmetro intervalo. Valor Descrição yyyy Anos q Trimestres m Meses y Dias do ano (o mesmo que dias) d Dias w Semanas ww Semanas do ano (o mesmo que semanas) h Horas n Minutos s Segundos A título de exemplo, vamos calcular o número de meses, desde o descobrimento do Brasil, até 31 de Dezembro de 1999. Para isso, utilizaríamos o seguinte comando MsgBox “Meses desde o descobrimento: “ & DateDiff(“m”,”22/04/1500”,”31/12/1999”) O resultado deste comando, pode ser conferido na Figura a seguir: Vamos modificar um pouco o nosso exemplo, e calcular o número de horas desde o
  • 64. Vista Virtual INFOR MÁT ICA descobrimento. Para isto, podemos utilizar o seguinte comando: MsgBox “Meses desde o descobrimento: “ & DateDiff(“h”,”22/04/1500”,”31/12/1999”) O resultado deste comando, pode ser conferido na Figura a seguir: A função DateAdd. Esta função pode ser utilizada para determinar uma data futura, com base em uma data fornecida, o tipo de período a ser acrescentado (dias, meses, anos, etc), e o número de períodos a serem acrescentados. A sintaxe desta função é o seguinte: DateAdd(intervalo, número_de_intervalos, data) O parâmetro intervalo é uma String que diz que tipo de intervalo vamos acrescentar. Por exemplo, é este parâmetro que define se queremos acrescentar um número especificado de dias, meses, anos, etc. Na Tabela a seguir, temos os valores possíveis para o parâmetro intervalo. Tabela - Valores para o parâmetro intervalo. Valor Descrição yyyy Anos q Trimestres m Meses y Dias do ano (o mesmo que dias) d Dias w Semanas ww Semanas do ano (o mesmo que semanas) h Horas n Minutos s Segundos A título de exemplo, vamos calcular a data em que tivemos um período de 1000 meses, após o descobrimento do Brasil. Para isso, utilizaríamos o seguinte comando: MsgBox “Mil meses após o descobrimento foi em : “ & DateAdd(“m”,1000,”22/04/1500”) O resultado deste comando, pode ser conferido na Figura a seguir:
  • 65. Vista Virtual INFOR MÁT ICA Vamos modificar um pouco o nosso exemplo, e calcular em que data teremos passado um milhão de dias após o descobrimento. MsgBox “Um milhão de dias após o descobrimento em : “ & DateAdd(“d”,1000000,”22/04/1500”) O resultado deste comando, pode ser conferido na Figura a seguir: Função Year. Recebe como parâmetro uma data, e retorna um número indicativo do ano. O formato geral é o seguinte: Year(data) Considere o exemplo abaixo: MsgBox “Ano atual: “ & Year(Date( )) O resultado deste comando, está indicado na Figura a seguir: A função Date() captura a data do sistema e passa como parâmetro para a função Year, a qual por sua vez, retorna apenas o ano. Função WeekDay. Recebe como parâmetros uma data, e um parâmetro opcional, que indica qual o primeiro dia da semana. Se este parâmetro for omitido, o primeiro dia da semana será considerado Domingo. O valor para o primeiro dia da semana é numérico: 1 – Domingo, 2 – Segunda-feira, e assim por diante. WeekDay(data, prim_dia_semana.) Considere o exemplo abaixo: MsgBox “Dia da semana: “ & WeekDay(“31/12/1999”)
  • 66. Vista Virtual INFOR MÁT ICA O resultado deste comando, está indicado na Figura a seguir: O valor 6, indica que foi uma Sexta-feira, o que confere com o calendário. Poderíamos determinar que o primeiro dia da semana é a Segunda- feira (2 para o último parâmetro). Com isso o nosso exemplo, ficaria assim: MsgBox “Dia da semana: “ & WeekDay(“31/12/1999”,2) O resultado deste comando, está indicado na Figura a seguir: O valor 5, indica que foi uma Sexta-feira, pois agora a Segunda- feira passou a ser o dia 1, a Terça-feira o dia 2, e assim por diante. Novamente confere com o calendário. Função WeekDayName. Recebe como parâmetro um número, indicativo do dia da semana, e um segundo parâmetro que pode ser Verdadeiro ou Falso. Se o segundo parâmetro for verdadeiro, o nome do dia da semana será exibido abreviadamente. O formato geral é o seguinte: WeekDayName(número_do_dia, abreviar) Considere o exemplo abaixo: MsgBox “Dia da semana: “ & WeekDayName(6,False) O resultado deste comando, está indicado na Figura a seguir:
  • 67. Vista Virtual INFOR MÁT ICA Funções para Cálculos matemáticos. Veremos as principais funções para efetuar cálculos matemáticos. Na Tabela a seguir, temos a descrição das principais funções matemáticas, disponíveis no VBA.
  • 68. Vista Virtual INFOR MÁT ICA Tabela - Funções para cálculos matemáticos. Função Descrição Abs(n) Retorna o valor absoluto (sem sinal), do número n. Atn(n) Retorna o valor do arco, cuja tangente é o número n. O número n deve ser fornecido em radianos. Cos(n) Retorna o coseno do número n. O número n deve ser fornecido em radianos. Exp(n) Retorna o número e (logaritmo neperiano e=2,7183), elevado no número n. Log(n) Retorna o logaritmo natural de um número n. Rnd(n) Retorna um número aleatório entre 0 e 1. Sgn(n) Retorna um número inteiro, indicando o sinal do número n. Retorna –1 para números negativos e 1 para números positivos. Sin(n) Retorna o seno do número n. O número n deve ser fornecido em radianos Sqr(n) Retorna a Raiz quadrada do número n. Tan(n) Retorna a tangente do número n. O número n deve ser fornecido em radianos. NOTA: Para converter graus para radianos, multiplique o valor em graus por pi (3.14), e divida o resultado por 180. Na Tabela a seguir temos alguns exemplos de utilização das funções matemáticas do VBA. Tabela - Alguns exemplos de utilização das funções matemáticas. Exemplo Valor de retorno. Abs(-2350) 2350 Atn(2) 1,1071487177 Cos(0) 1 Exp(1) 2,71828182845905 Log(1000) 6,90775527898214 Rnd*10 Gera um número aleatório entre 0 e 10 Sgn(-235) Retorna –1, pois o número é negativo Sin(0) Retorna 0 Sqr(400) Retorna 20 Tan(0) Retorna 0 Criando suas próprias funções e procedimentos. Neste item, aprenderemos a criar nossas próprias funções e Sub- rotinas . O princípio por trás da criação de funções e sub- rotinas, é o de reaproveitamento de código e facilidade de manutenção do programa. Imagine que estejamos criando uma página para cálculos financeiros, por exemplo, depreciação contábil. Vamos supor que em diversos locais, seja necessária a realização do cálculo de depreciação. Poderíamos colocar o código que faz o cálculo, em cada um dos pontos, onde o mesmo seja necessário. Porém esta não é a melhor maneira de criarmos nossos programas. Imagine, por exemplo, quando fosse necessário alterar a maneira de realizar os cálculos. Teríamos que repassar todos os módulos de código, procurando os pontos onde o código está , e fazer as alterações. Sem contar que estaríamos criando um Script bastante longo, dependendo do número de cálculos necessários. Para resolver estes problemas, poderíamos criar uma função ou sub- rotina que faz os cálculos de depreciação. Depois, em cada local onde precisamos fazer os cálculos, é
  • 69. Vista Virtual INFOR MÁT ICA só chamar a função (ou sub- rotina), para fazer os cálculos. Quando fosse necessária a alteração da metodologia de cálculo, era só alterar a função (ou sub-rotina) e pronto, os novos cálculos passarão a ser feitos com base na nova metodologia. Isto poupa esforço, reduz o número de linhas de código, e facilita a manutenção, além de reduzir a possibilidade de erros. Agora é chegada a hora de aprendermos a criar funções e sub-rotinas. Estes procedimentos/funções são criados em módulos separados, isto é, não ligados a nenhum formulário/relatório. Quando uma destas funções/procedimentos for necessária, basta chamar a respectiva função/procedimento que o Microsoft Access se encarrega de localizar a função/procedimento, passar os parâmetros necessários (se for o caso) e receber os resultados retornados, caso seja uma função. NOTA: Vamos falar um pouco mais sobre o termo Procedimento. Um procedimento é um grupo de instruções que pode ser chamado pelo nome atribuído ao procedimento. Neste contexto, funções e sub- rotinas, são tipos de procedimentos. Criando e utilizando Sub-rotinas. Uma sub-rotina é um grupo de comandos que podem ser executados, simplesmente através da chamada do nome da Sub-rotina. Podemos passar um ou mais argumentos para uma Sub-rotina. Quando uma sub- rotina é chamada, a execução desloca-se para dentro da Sub-rotina, depois de executados todos os comandos dentro da Sub-rotina, a execução do código continua, com o comando seguinte ao que chamou a Sub-rotina. A sintaxe para declaração de uma Sub-rotina é a seguinte: Sub Nome_da_Sub-rotina(argumento1, argumento2, ..., argumenton) Comando1 Comando2 ... Comandon End Sub Uma Sub-rotina pode, ou não, conter argumentos. Caso sejam necessários argumentos, os mesmos serão passados quando a Sub- rotina for chamada, e devem ser passados, na mesma ordem em que foram definidos. DICA: Quando você criar Sub-rotinas, procure utilizar nomes que descrevam a função da Sub-rotina. Com isso você torna o entendimento do código mais fácil para quem for utilizá- lo. Considere o seguinte exemplo de declaração de uma Sub-rotina: Sub Calcula_imposto(salario, desconto, extras) Comando1 Comando2 ... Comandon End Sub Neste caso, declaramos uma rotina chamada Calcula_imposto, a qual espera receber 3 parâmetros: salario, desconto e extras. Os parâmetros devem ser fornecidos nesta ordem,
  • 70. Vista Virtual INFOR MÁT ICA para que a Sub-rotina funcione corretamente. Uma vez criada a Sub-rotina, podemos chamá-la, simplesmente digitando o nome da Sub- rotina, ou utilizando a palavra Call, mais o nome da Sub-rotina. Nos exemplos abaixo, temos dois métodos de chamada da Sub-rotina Calcula_imposto: Calcula_imposto(1500,23,125) ou Call Calcula_imposto(1500,23,125) Observe que os parâmetros são passados dentro do parênteses. Também poderíamos declarar uma Sub-rotina, sem parâmetros. Neste caso posso simplesmente não utilizar os parênteses após o nome da Sub-rotina, ou utilizar um par de parênteses, sem nada dentro, conforme indicado abaixo: Sub Nome_da_Sub-rotina Comando1 Comando2 ... Comandon End Sub ou Sub Nome_da_Sub-rotina( ) Comando1 Comando2 ... Comandon End Sub Por exemplo, poderíamos criar uma Sub-rotina que exibe uma Caixa de mensagem com a Data do sistema e a hora, no Formato indicado na Figura a seguir: Poderíamos criar todos os comandos necessários, para exibir a hora e a data neste formato, cada vez que a exibição fosse necessária.
  • 71. Vista Virtual INFOR MÁT ICA Porém é mais prático criar uma Sub-rotina que faz este trabalho. Cada vez que precisarmos exibir a data e a hora neste formato, é só chamarmos a Sub-rotina. Na Listagem a seguir temos o código da Sub-rotina exibe_data_hora(), a qual faz a exibição da data e da hora, no formato proposto pela Figura anterior. Listagem– A Sub-rotina exibe_data_hora Sub exibe_data_hora mes_atual=Month(Date()) mes_nome=MonthName(mes_atual,False) mensagem = "Ano atual: " & Year(Date()) & Chr(13) mensagem = mensagem & "Mês atual: " & mes_nome & Chr(13) mensagem = mensagem & "Hoje é dia: " & Day(Date())& Chr(13) mensagem = mensagem & Chr(13) & "***************" & Chr(13)& Chr(13) hora_atual = Hour(Time()) minuto_atual = Minute(Time()) secundo_atual = Second(Time()) mensagem = mensagem & "Hora atual: " & hora_atual & chr(13) mensagem = mensagem & "Minuto atual: " & minuto_atual & chr(13) mensagem = mensagem & "Secundo atual: " & secundo_atual MsgBox mensagem End Sub Agora, cada vez que for necessário exibir a data e a hora nos formatos do exemplo, basta chamar a Sub-rotina exibe_data_hora, utilizando um dos seguintes comandos: Call exibe_data_hora ou exibe_data_hora Exercício: Crie um novo módulo chamado Utilitários. Dentro deste módulo crie o procedimento exibe_data_hora. Salve o módulo. Abra o formulário Teste no modo estrutura. Crie um botão chamado ExSupProc. Associe o seguinte código ao evento Ao clicar deste botão: Call exibe_data_hora Teste o funcionamento do botão. Criando e utilizando Funções
  • 72. Vista Virtual INFOR MÁT ICA Uma Função é um grupo de comandos que podem ser executados, simplesmente através da chamada do nome da Funçao. Podemos passar um ou mais argumentos para uma Função. Quando uma Função é chamada, a execução desloca-se para dentro da Função, depois de executados todos os comandos dentro da Função, a execução do código continua, com o comando seguinte ao que chamou a Função. A diferença da Função para a Sub-rotina, é que a Função sempre retorna um ou mais valores para o comando que a chamou. A sintaxe para declaração de uma Função é a seguinte: Function Nome_da_Função(argumento1, argumento2, ..., argumenton) Comando1 Comando2 ... Comandon End Function Uma Função pode, ou não, conter argumentos. Caso sejam necessários argumentos, estes serão passados quando a Função for chamada, e devem ser passados, na mesma ordem em que foram definidos. DICA: Quando você criar Função, procure utilizar nomes que descrevam os objetivos da Função. Com isso você torna o entendimento do código mais fácil para quem for utilizá-lo. Considere o seguinte exemplo de declaração de uma Função: Função Converte_para_dolar(valor_em_real, cotacao_dolar) Comando1 Comando2 ... Comandon End Function Neste caso, declaramos uma Função chamada Converte_para_dolar, a qual espera receber 2 parâmetros: um valor em real e a cotação do dólar. Uma vez criada a Função, devemos chamá-la, em um comando de atribuição, isto é, o valor retornado pela função, deve ser atribuído a uma variável, ou exibido através de um comando como MsgBox. No exemplo abaixo, estamos atribuindo o valor de retorno da função, à variável valor_dolar. valor_dolar = Converte_para_dolar (1500,1.81) Também poderíamos exibir o valor retornado pela função, utilizando o comando MsgBox, conforme indicado a seguir: MsgBox “Valor em dólar: “ & Converte_para_dolar (1500,1.81) Observe que os parâmetros são passados dentro dos parênteses, e na mesma ordem definida quando da criação da função. Também poderíamos declarar uma Função, sem parâmetros. Neste caso posso simplesmente não utilizar os parênteses após o nome da Função, ou utilizar um par de
  • 73. Vista Virtual INFOR MÁT ICA parênteses, sem nada dentro, conforme indicado abaixo: Function Nome_da_Função Comando1 Comando2 ... Comandon End Function ou Function Nome_da_Função( ) Comando1 Comando2 ... Comandon End Function Por exemplo, vamos criar uma função que converte um valor de um ângulo de Graus para Radianos. Depois utilizaremos a função dentro de um laço For...Next, para exibir o valor em radianos, para os ângulos de 0 à 20 graus. No exemplo a seguir temos o código onde foi criada a função CRad, que converte um valor em graus para radianos. Depois utilizamos um laço for para exibir, através de uma Caixa de mensagem os valores em radianos, para os ângulos de 0 à 20 graus. 'Criação da função CRad. Function CRad(valor_graus) CRad = (valor_graus*3.14)/180 End Function 'Agora utilizamos a função dentro do laço For/Next. For i=0 to 20 mensagem = mensagem & "Angulo: " & i & "Valor em Radianos: " mensagem = mensagem & FormatNumber(CRad(i),5)& Chr(13) Next MsgBox mensagem Observe que dentro da função, atribuímos a variável CRad um determinado valor. É isso que caracteriza uma função. Dentro do código da função, devemos atribuir a uma variável que tenha o mesmo nome da função, um determinado valor. Este valor é que será o valor de retorno da função. Cabe salientar o uso da função FormatNumber, dentro do laço For. A função FormatNumber é utilizada para formatar a maneira como um número é exibido. Neste caso, utilizamos a função FormatNumber, para limitar o número de casas decimais, a 5 casas depois da vírgula. Em cada "passada" do laço For...Next, chamamos a função CRad(i), para fazer a
  • 74. Vista Virtual INFOR MÁT ICA conversão de Graus para radianos. O Valor retornado pela função CRad, é passado para a função FormatNumber, para ser formatado com apenas 5 casas decimais. Funções que serão utilizadas em vários Formulários/Relatórios, devem ser criadas em um Módulo separada. Depois é só chamar a função onde esta for necessária. Exercício: Crie uma função chamada ValorImpostoPF. Esta função deve receber os seguintes parâmetros: Total de rendimentos - TotRed. Total de deduções - TotDed. Imposto retido na fonte - ImpRet. Com base na tabela oficial do IR, a função calcula o imposto devido e informa se existe imposto a restituir ou a pagar e qual o respectivo valor. Criar um formulário chamado CalcIRPF, no qual temos três campos, um para cada parâmetro da função. O usuário preenche os valores deste campo e clica em um botão Calcular. O evento Ao clicar chama a função ValorImpostoPF e exibe o resultado dos cálculos. Cálculo do Dígito Verificador: CPF, CNPJ e Processos. Neste tópico aprenderemos a utilizar o VBA para criar funções de validação do DV do CPF, CNPJ e Processos (com dois ou quatro dígitos para o ano). Os algorítmos de cálculo foram publicados no Diário Oficial, Seção I, de 29/12/1999. Nota: Os algorítmos para cálculo do DV são de domínio público, já tendo sido publicados por diversas revistas de circulação nacional e amplamente disponíveis em diversos sites da Internet. Como calcular o DV do CPF. Para entender o algorítmo de cálculo do CPF vamos utilizar um exemplo prático. Considere o seguinte CPF (sem o DV): Posição 1 2 3 4 5 6 7 8 9 Número 3 3 3 4 4 4 5 5 5 Começamos a multiplicar os dígitos do CPF, a partir da posição 9, por 2, 3, 4, 5 e assim por diante, conforme indicado na tabela a seguir: Posição 1 2 3 4 5 6 7 8 9 Número 3 3 3 4 4 4 5 5 5 Multiplica por: 10 9 8 7 6 5 4 3 2 Resultado 30 27 24 28 24 20 20 15 10 Somo os resultados obtidos na quarta linha da tabela anterior:
  • 75. Vista Virtual INFOR MÁT ICA Soma1 = 30+27+24+28+24+20+20+15+10 Soma1 = 198 Faço a divisão desta soma por 11 e determino o resto da divisão: 198/11 Resulta em uma divisão exata, com resto 0 Regra: Quando o resto é zero ou um, o DV é 0. Quando o resto é diferente de zero ou um, o DV é obtido fazendo-se: 11-resto Neste caso como o resto foi zero, o primeiro DV é zero: DV1=0 O DV1 calculado passa a fazer parte do CPF, conforme indicado pela tabela a seguir: Posição 1 2 3 4 5 6 7 8 9 10 Número 3 3 3 4 4 4 5 5 5 0 Agora repetimos o processo anterior, porém já considerando o DV1 como parte integrande do CPF, conforme indicado pela tabela a seguir: Posição 1 2 3 4 5 6 7 8 9 10 Número 3 3 3 4 4 4 5 5 5 0 Multiplica por: 11 10 9 8 7 6 5 4 3 2 Resultado 33 30 27 32 28 24 25 20 15 0 Somo os resultados obtidos na quarta linha da tabela anterior: Soma2 = 33+30+27+32+28+24+25+20+15+0 Soma1 = 234 Faço a divisão desta soma por 11 e determino o resto da divisão: 234/11 Resulta em (21), com resto 3 Regra: Quando o resto é zero ou um, o DV é 0. Quando o resto é diferente de zero ou um, o DV é obtido fazendo-se: 11-resto Neste caso como o resto foi 3, o segundo DV é : DV2 = 11-3 DV2 = 8 Com isso o CPF, já com os dois DVs fica conforme indicado na tabela a seguir: Posição 1 2 3 4 5 6 7 8 9 10 11 Número 3 3 3 4 4 4 5 5 5 0 8 Ou seja: 333.444.555-08 Os algorítmos para cálculo dos DVs de CNPJ e processos (dois ou quatro dígitos para o ano) são exatamente iguais. A única diferença é o número de dígitos do CNPJ ou
  • 76. Vista Virtual INFOR MÁT ICA dos processos que são diferentes do CPF. Juntando Tudo: Agora vamos juntar, em um exercício, os conhecimentos apresentados sobre VBA, até o momento. Exercício: Criar um módulo chamado "Funções de Validação". Neste módulo criar duas funções: Função ValidaCPF(NúmeroDoCPF): Esta função recebe como parâmetro um número de CPF e retorna Verdadeiro se o número for válido e Falso caso contrário. Criar um formulário chamado Teste de DVs. Adicionar um campo para digitação do CPF neste formulário. Usar uma máscara de entrada, neste campo, que considera como caracteres do CPF os pontos e o traço. Este fator é importante na hora de criarmos a função ValidaCPF(NúmeroDoCPF). Testar a função ValidaCPF(NúmeroDoCPF), criada anteriormente. Função ValidaCNPJ(NúmeroDoCNPJ): Esta função recebe como parâmetro um número de CNPJ e retorna Verdadeiro se o número for válido e Falso caso contrário. Abrir o formulário Teste de DVs, criado anteriormente. Adicionar um campo para digitação do CNPJ, neste formulário. Usar uma máscara de entrada, neste campo, que considera como caracteres do CNPJ os pontos, a barra e o traço. Este fator é importante na hora de criarmos a função ValidaCNPJ(NúmeroDoCNPJ). Testar a função ValidaCNPJ(NúmeroDoCNPJ). Para testar a função ValidaCPF você pode utilizar os seguintes valores: 999.000.555-94 111.222.333-96 777.000.888-37 000.999.000-33 Para testar a função ValidaCNPJ você pode utilizar os seguintes valores: 11.222.333/0001-81 99.222.333/0001-22 66.777.888/0150-22 66.777.888/0151-03 66.000.888/0151-00