Você está na página 1de 96

Sumrio

1. ORIENTAO A EVENTOS...............................................................................................................2 1.1. ORDEM DE EXECUO DOS EVENTOS....................................................................................3 2. NORMAS DE NOMENCLATURA......................................................................................................5 2.1. JANELA DE CDIGO .....................................................................................................................6 3. VARIVEIS............................................................................................................................................7 3.1. DECLARAO DE VARIVEIS ...................................................................................................7 3.2. OPERADORES...............................................................................................................................11 3.2.4. PRECEDNCIAS ........................................................................................................................11 4. ESTRUTURAS DE PROGRAMAO .............................................................................................12 4.1. COMANDOS CONDICIONAIS ....................................................................................................12 4.2. COMANDOS DE LAOS CONDICIONAIS ................................................................................13 5.1. ACESSO RANDMICO ................................................................................................................15 5.2. ACESSO SEQUENCIAL................................................................................................................18 5.3. ACESSO BINRIO ........................................................................................................................20 6. PROCEDIMENTOS - FUNES E SUBROTINAS........................................................................25 6.1. ARGUMENTOS BYVAL E BYREF .............................................................................................26 6.2. ARGUMENTOS OPCIONAIS .......................................................................................................27 7. UTILIZAO DE OBJETOS DO ACCESS.....................................................................................28 7.1. OBJETO DOCMD ..........................................................................................................................28 7.2. OBJETO SCREEN..........................................................................................................................28 8. TRATAMENTO DE ERROS..............................................................................................................29 9. LINGUAGEM SQL.............................................................................................................................35 9.1. LINGUAGEM DE MANIPULAO DE DADOS .......................................................................35 9.2.1. INSTRUO CREATE TABLE .................................................................................................40 9.2.2. INSTRUO CREATE INDEX .................................................................................................40 9.2.3. INSTRUO DROP TABLE OU DROP INDEX .......................................................................41 9.2.4. INSTRUO ALTER TABLE....................................................................................................41 9.2.5. CLUSULA CONSTRAINT.......................................................................................................42 9.3. FUNES AGREGADAS .............................................................................................................42 10. TCNICAS DE PESQUISA DE DADOS.........................................................................................43 10.1. MTODO FIND............................................................................................................................45 10.2. MTODO SEEK ...........................................................................................................................47 11. INTEGRANDO COM O OFFICE 2000...........................................................................................50 11.1 FUNES CREATEOBJECT E GETOBJECT ............................................................................51 11.2. INSTANCIANDO O MICROSOFT WORD ................................................................................52 11.3. INSTANCIANDO O MICROSOFT EXCEL................................................................................53 11.4. INSTANCIANDO O MICROSOFT ACCESS .............................................................................55 12. EXERCCIOS PROPOSTOS............................................................................................................57 ANEXO 1 ..................................................................................................................................................59 ANEXO 2 ..................................................................................................................................................73

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

1. ORIENTAO A EVENTOS
Um evento uma ao especfica que ocorre sobre e/ou com um determinado objeto. O Access pode responder a vrios eventos simultaneamente, como por exemplo: cliques de mouse, alteraes em dados, abertura ou fechamento de formulrios e muitos outros. Os eventos so, geralmente, o resultado de uma ao do usurio. Podemos criar a nossa prpria resposta a um evento atravs de um procedimento de evento ou de uma macro. Quando voc cria um procedimento de evento para um objeto, o Microsoft Access adiciona um modelo de procedimento de evento nomeado para o evento do objeto formulrio ou o objeto relatrio. Tudo o que voc precisa fazer adicionar o cdigo que responda s aes quando ocorrer(em) o(s) evento(s) para o formulrio ou relatrio. Abaixo a lista de eventos disponveis em ordem alfabtica: Evento Activate AfterDelConfirm AfterInsert AfterUpdate ApplyFilter BeforeDelConfirm BeforeInsert BeforeUpdate Change Click Close Current DblClick Deactivate Delete Enter Error Exit Filter Format GotFocus Initialize ItemAdded ItemRemoved KeyDown KeyPress KeyUp Load LostFocus MouseDown MouseMove MouseUp NoData NotInList Open Page Print Resize 2 Propriedade do Evento Ao Ativar Aps Confirmar Excluso Aps Inserir Aps Atualizar Ao Aplicar Filtro Antes De Confirmar Excluso Antes De Inserir Antes De Atualizar Ao Alterar Ao Clicar Ao Fechar No Atual Ao Clicar Duas Vezes Ao Desativar Ao Excluir Ao Entrar Ao Ocorrer Erro Ao Sair Ao Filtrar Ao Formatar Ao Receber Foco nenhuma nenhuma nenhuma Ao Apertar Tecla Ao Pressionar Tecla Ao Liberar Tecla Ao Carregar Ao Perder Foco Ao Apertar Mouse Ao Mover Mouse Ao Liberar Mouse Se Nenhum Dado Se No Estiver Na Lista Ao Abrir Na Pgina Ao Imprimir Ao Redimensionar

ACCESS 2000 PROGRAMAO EM VBA Evento Retreat Terminate Timer Unload Updated Propriedade do Evento Ao Retirar nenhuma No Cronmetro Ao Descarregar Ao Atualizar

SENAC-RS

Tabela 1 - Eventos

Uma nica ao pode acionar vrios eventos que ocorrem em uma seqncia especfica, visto que a execuo do Visual Basic se d de modo assncrono, ou seja, o processador pode executar diversas tarefas simultaneamente todas elas independentes umas das outras, sem necessariamente uma ter que encerrar para iniciar outra, ou uma ficar aguardando a outra. Portanto, muito importante saber em que ordem os eventos acontecem, porque isso pode afetar a sua execuo.

1.1. ORDEM DE EXECUO DOS EVENTOS


Movendo o foco para um controle: Enter (Ao entrar) GotFocus (Ao receber foco) Abrindo um formulrio: Open (Ao abrir) Activate (Ao ativar) Current (No atual) (Ao entrar) GotFocus (Ao receber foco) Abandonando um controle num formulrio: Exit (Ao sair) LostFocus (Ao perder foco) Movendo o foco para um outro controle: Exit (Ao sair) LostFocus (Ao perder foco) (Ao receber foco) Fechando um formulrio: Exit (Ao sair) LostFocus (Ao perder foco) Deactivate (Ao desativar) Close (Ao fechar) Enter (Ao entrar) GotFocus Enter

Unload (Ao descarregar)

Alterando e atualizando dados em um controle: BeforeUpdate (Antes de atualizar) AfterUpdate (Depois de atualizar) Exit (Ao sair) LostFocus (Ao perder foco) Alterando o contedo de uma caixa de texto Change (Ao alterar) BeforeUpdate (Antes de atualizar) (Depois de atualizar) Pressionando uma tecla em uma caixa de texto: KeyDown (Ao apertar tecla) KeyPress (Ao pressionar tecla) (Ao alterar) KeyUp (Ao liberar tecla) AfterUpdate

Change

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Excluindo um registro: Delete (Ao excluir) BeforeDelConfirm (Confirmar antes de excluir) AfterDelConfirm (Aps confirmar excluso) Criando um novo registro: Current (No atual) Enter (Ao entrar) GotFocus (Ao receber foco) BeforeInsert (Antes de inserir) AfterInsert (Depois de inserir) Abrindo um formulrio: Open (Ao abrir) Load (Ao carregar) Activate (Ao ativar) Current (No atual) Fechando um formulrio: Unload (Ao descarregar) Resize (Ao redimensionar)

Deactivate (Ao desativar)

Close (Ao fechar)

Clicando em um outro controle: No primeiro controle: Exit (Ao sair) LostFocus (Ao perder foco) No segundo controle: Enter (Ao entrar) GotFocus (Ao receber foco) MouseDown (Ao apertar mouse) MouseUp (Ao liberar mouse) Click (Ao clicar) Imprimindo ou visualizando um relatrio: Open (Ao abrir) Activate (Ao ativar) Format (Ao formatar) (Ao imprimir) Close (Ao fechar) Deactivate (Ao desativar) Print

Sempre que manipulamos os objetos do Access devemos saber que eles esto abaixo do objeto Application, que se refere ao aplicativo ativo de banco de dados, conforme demonstra o esquema abaixo:

Figura 1 - Objeto Application

Este objeto contm todas as colees e objetos do Microsoft Access, incluindo a coleo de formulrios (Forms), a coleo de relatrios (Reports), a coleo de mdulos (Modules), a coleo de referncias (References), o objeto de tela (Screen) e o objeto de executar aes (DoCmd). Voc pode utilizar o objeto Application para aplicar definies de propriedades ou mtodos a todo o aplicativo do Microsoft Access. Um exemplo seria utilizar o mtodo SetOption do objeto Application para definir uma das opes do banco de dados, selecionar a caixa de Barra de Status na guia Exibir da janela de dilogo Opes do menu Ferramentas. Application.SetOption "Mostrar Barra de Status", True

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

2. NORMAS DE NOMENCLATURA
Voc deve sempre se preocupar com a documentao e a padronizao de variveis, controles e objetos e do sistema como um todo, para que se tenha um aplicativo com uma programao bem legvel e que o processo de manuteno seja o mais fcil e eficiente possvel. Portanto, adotaremos a referncia da LNC - Leszinsky Naming Conventions e a RNC - Reddick Naming Conventions. Estas normas para nomenclatura so utilizadas internacionalmente, chamadas de notaes hngaras, e fornecem um mtodo capaz de tornar compreensvel o significado de cada objeto ao qual o cdigo faz referncia. De forma bem simples demonstraremos o seu emprego: [prefixo][marca](nome_do_componente)[sufixo] Ex.: gstrNome_Cliente - varivel tipo global, cujo contedo um string e armazena a informao do Nome do Cliente. Abaixo as tabelas com as principais caractersticas destas convenes: PREFIXO s l g a i MARCA byt f int lng sng dbl cur dtm obj str var MARCA app chk cbo cmd ctl ocx frm img lbl lst bas/mdl opt TIPO DE OBJETO Varivel local esttica Varivel local ao mdulo Varivel global ou pblica Matriz (array) ndice de matriz ou coleo
Tabela 2 - Prefixos para variveis

TIPO DE VARIVEL Byte Boolean Integer Long Single Double Currency Date Object String Variant
Tabela 3 - Marcas para variveis

TIPO DE CONTROLE Application Check Box Combo Box Command Button Control Collection Control Customized Form Image Control Label List Box Module Option Button

ACCESS 2000 PROGRAMAO EM VBA MARCA rpt txt MARCA Min First Last Lim Max Cnt TIPO DE CONTROLE Report Text Box

SENAC-RS

Tabela 4 - Marcas para controles e objetos

TIPO DE SUFIXO O menor elemento retornado O primeiro elemento retornado O ltimo elemento retornado O limite superior dos elementos utilizados O maior elemento retornado Para campos do tipo Autonumerao
Tabela 5 - Marcas para sufixos

2.1. JANELA DE CDIGO


Inicia, pra ou redefine a execuo do cdigo Exibe a janela depurar Exibe o explorador de objetos Exibe a janela de inspeo de variveis

Ativa/Desativa pontos de interrupp Seleciona desejado Insere mdulo ou procedimento na rea de cdigo o objeto Seleciona o procedimento, mtodo ou evento do objeto.

rea de cdigo onde escrevemos os comandos em VBA.

Figura 2 - Janela de Cdigo do VBA

Visualiza somente um todos procedimentos janela

ou da

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

3. VARIVEIS 3.1. DECLARAO DE VARIVEIS


A declarao de nomes de variveis no obrigatria no Visual Basic, mas recomendada, pois com esta precauo evitam-se erros de digitao e atribuio de valores. Variveis so estruturas onde armazenamos qualquer tipo de informao e que sero utilizadas no nosso cdigo. Na criao do nome da varivel, devemos seguir as seguintes regras: Comece o nome com uma letra, aps pode conter letras e/ou nmeros; O nome deve conter apenas letras, nmeros e o caracter underscore (sublinhado). Caracteres de pontuao, acentuao e espaos no devem ser utilizados; O nome no deve exceder 40 caracteres. No podem ser utilizadas palavras reservadas do Access, como por exemplo, as propriedades Nome(Name) e Valor(Value) dos objetos. TIPO Byte Boolean Integer Long Single Double Currency Date Object String Variant Userdefined DESCRIO 1 byte 2 bytes Inteiro de 2 bytes Inteiro de 4 bytes Nmero de Ponto Flutuante de 4 bytes LIMITE

0 a 255 True ou False -32.768 at 32.767 -2.147.483.648 at 2.147.483.647 -3,402823E38 at -1,401298E-45 para valores negativos 1,401298E-45 at 3,402823E38 para valores positivos Nmero de Ponto -1,797693E308 a -4,940656E-324 para Flutuante de 8 bytes valores negativos; 4,940656E-324 at 1,797693E308 para valores positivos Ponto Decimal fixo -922.337.203.685.477,5808 at com 8 bytes 922.337.203.685.477,5807 8 bytes 1 de janeiro de 100 at 31 de dezembro de 9999 4 bytes Qualquer referncia a Objeto String de caracteres 1 a 65.400 aproximadamente 16 a 22 bytes Qualquer tipo de dado Nmero Requerido Cada elemento obedece seu tipo
Tabela 6 - Tipos Fundamentais de Variveis

Quando voc declara uma varivel dentro de uma procedimento ou funo, apenas o cdigo contido neste procedimento pode acessar ou trocar o valor desta varivel, significando que o escopo ou alcance daquela varivel restrito ou local quele procedimento. s vezes, voc pode necessitar usar a varivel com um alcance maior, de forma que o seu contedo esteja disponvel para todas os procedimentos contidos dentro de um formulrio, ou mesmo que ela possa ser visto por todos os mdulos em todos os formulrios de uma aplicao. O Visual Basic permite que voc especifique o escopo ou alcance de uma varivel dependendo da forma que voc a declarar.

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

3.1.1. DECLARAO IMPLCITA DE VARIVEIS


Voc no precisa declarar uma varivel antes de us-la. Por exemplo, voc pode escrever uma funo como abaixo: Function ValidaData(Data) dtmData = Data If isdate(Data) Then ValidaData = True Else ValidaData = False Endif .... .... End Function Voc no tem que declarar dtmData antes de us-lo na funo. O Visual Basic automaticamente cria uma varivel com o seu nome, de forma que voc pode us-lo como se houvesse explicitamente declarado a varivel. Ao mesmo tempo que este procedimento conveniente , ele tambm pode levar a erros em seu cdigo se voc escrever uma varivel de forma errada.

3.1.2. DECLARAO EXPLCITA DE VARIVEIS


Para evitar o problema de variveis escritas de forma errada , voc pode estipular que o Visual Basic ir sempre gerar uma mensagem de erro quando encontrar um nome no previamente declarado explicitamente como uma varivel. Para fazer isto, coloque a sentena abaixo na seo Declarations do formulrio ou do mdulo de cdigo, conforme mostra a figura :

Esta instruo obriga declarao de variveis.

Figura 3 - Janela de Mdulo

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

3.1.3. DECLARAO DE CONSTANTES


Utilizada quando um valor ou um sring repete-se constantemente dentro do cdigo com o propsito de aumentar a legibilidade do cdigo e facilidade de modificao de seu contedo. Sintaxe: [Public] Const nome_constante = expresso Exemplos: Const PI=3.141592654 Public Const MAX_REG=20 Const NEW_MAX_REG = MAX_REG * 3 Tipos de variveis definidos pelo usurio (estruturas) : Voc pode criar tipos de variveis definidos pelo usurio com o uso sentena TYPE, que deve ser colocada na seo de declaraes de um mdulo cdigo. Um tipo criado pelo usurio sempre visto de forma global dentro cdigo, apesar de que as variveis declaradas com este tipo possam ser globais locais as funes ou aos mdulos do formulrio. Abaixo criamos um tipo definido pelo usurio que guarda as informaes um usurio. Type RegUsuario Cod As Integer Nome As String Cargo As String Salario As Currency End Type Voc pode declarar uma varivel global ou local ou a nvel de mdulo com o tipo RegUsuario. Dim Cadastro As RegUsuario Podemos atribuir valores aos elementos da varivel desta maneira: RegUsuario.Cod = "0001" RegUsuario.Nome = "Patricia Santos" RegUsuario.Cargo = "Recepcionista" RegUsuario.Salario = "1800" da de do ou de

3.1.4. DECLARAO DE ARRAYS


De uma maneira bem simplificada, os Arrays so conjuntos de variveis de memria agrupadas com um mesmo nome, sendo que cada uma destas variveis completamente distinta uma da outra. Neste caso, o que diferencia um elemento do outro a sua posio relativa dentro do array. Imagine que o seu programa utiliza trs variveis de memria para armazenar os preos de produtos concorrentes com os fabricados pela sua empresa. Neste caso, voc poderia resolver o problema atravs da seguinte maneira: Dim Preco1 As Single, Preco2 As Single, Preco3 As Single Preco1 = txtPrecoConc1.Text Preco2 = txtPrecoConc2.Text Preco3 = txtPrecoConc3.Text

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Vamos, ento utilizar a estrutura de array para armazenar estas informaes: Dim Preco(3) As Single Preco(1) = txtPrecoConc1.Text Preco(2) = txtPrecoConc2.Text Preco(3) = txtPrecoConc3.Text Note que cada uma destas variveis completamente independente das outras, exceto pelo fato de todas possurem o mesmo nome comum. Quaisquer alteraes feitas em um elemento do array no so refletidas nos demais componentes. Neste caso, voc pode referenciar cada elemento do array atravs de seu nome e sua posio relativa: Valor = Preco(2) * 1.25 Vamos declarar um array para que possamos utiliz-lo com no exemplo anterior: Dim NomeVar[ ([Dimenso]) ][As Tipo] Onde: NomeVar : o nome do array que voc deseja criar. Este nome segue as mesmas regras da criao de variveis. Dimenso : a dimenso da varivel Array. Voc pode declarar o elemento inicial e final do array atravs da seguinte sintaxe: [Inicial To] Final Tipo : Segue as mesmas regras de tipos de dados. Voc no precisa declarar o limite inferior do array, somente o extremo superior. Quando voc no declara o limite inferior, o Visual Basic segue o padro estabelecido pela declarao Option Base. Em outras palavras, se voc no incluir a declarao Option Base em suas procedures, o limite inferior do array sempre ser, por default, o valor ZERO. Caso esta opo esteja declarada como Option Base 1, o limite inferior do array ser o nmero 1. Se utilizarmos o comando Dim Preco(4) para criarmos um array, ele conter quatro elementos, sendo que podemos acess-los nas posies de 0 a 3. Se voc tentar referenciar o elemento Preco(4) estar tentando referenciar o quinto elemento do array, sendo que ele no existe! Observaes: Voc tambm pode utilizar o comando Dim para declarar um Array dinmico, isto , sem dimenso definida. Neste caso, o seu array seria declarado da seguinte forma: Dim TempoEmpresa() As Integer Este recurso til quando voc no sabe ao certo quantos elementos iro compor seu array, mas j quer deix-lo declarado em seu cdigo. Depois para dimension-lo, usa-se o comando Redim. Outro ponto a ser considerado que voc pode criar um array sem definir o tipo de dados que ele conter. Todos os seus elementos sero do tipo de dados Variant (cada um dos seus elementos ter 16 bytes de tamanho). A sintaxe do comando Redim praticamente idntica do comando Dim: Redim [Preserve] NomeVar(dimenso) [As Tipo] Onde: Preserve: Mantm todos os dados existentes no array que est sendo redimensionado. 10

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

3.2. OPERADORES
Como voc j deve estar imaginando, operadores so sinais grficos que indicam determinadas operaes a serem realizadas, e se dividem em quatro categorias distintas:
Operadores Aritmticos

Operadores de Comparao Operadores de Concatenao Operadores Lgicos

utilizados para a realizao de clculos matemticos. utilizados em expresses para comparar


dois ou mais valores existentes.

utilizados para a combinao de strings. realizam operaes lgicas entre dois ou mais valores existentes.

3.2.1. OPERADORES ARITMTICOS


So utilizados para operaes matemticas entre dados numricos:

+ * / ^ \

Soma de dois nmeros quaisquer. Subtrai dois nmeros quaisquer ou indica que um determinado nmero negativo. Multiplica dois nmeros quaisquer. Divide dois nmeros quaisquer. Eleva um dado nmero a uma potncia qualquer. Divide dois nmeros e retorna um valor inteiro.

3.2.2. OPERADORES DE COMPARAO


Estes operadores servem para indicar uma operao de comparao entre dois ou mais valores ou expresses existentes. Aps avaliar a expresso que contm este tipo de operador , o VB retornar o valor True caso a comparao seja verdadeira ou o valor False, caso a comparao no se verifique. Temos, ento: <, <=, >, >=, <> e =

3.2.3. OPERADORES LGICOS


Este tipo de operador utilizado para testar logicamente duas ou mais expresses ou variveis de memria, baseando-se na lgebra booleana. Temos, ento: NOT, AND e OR

3.2.4. PRECEDNCIAS
Quando uma expresso composta por vrios operadores existem regras para indicar sua prioridade de execuo. Para evitarmos que se encontre um valor diferente para uma mesma expresso, o VBA adota a seguinte ordem no momento de avaliar uma expresso:

11

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Operadores Aritmticos

Operadores de Comparao

Operadores Lgicos

Imagine encontrar a seguinte expresso:

7 * 3 > 16 ^ 2 And 200 / 4 = 3 * 12


A mesma seria avaliada da seguinte forma

7*3 1

> 16 ^ 2 2 5

And

200 / 4 3

3 * 12 4

4. ESTRUTURAS DE PROGRAMAO 4.1. COMANDOS CONDICIONAIS


As sentenas que controlam decises condicionais para executar uma ou mais instrues. A instruo avalia a expresso contida na condio, se verdadeiro realiza os comando do bloco Then e se for falsa o do bloco Else. Podemos, tambm, utilizarmos outra estrutura de teste no uso de mltiplas instrues.

If condio Then comando If condio Then comando1 comando2 Else comando3 comando4 End If If condio1 Then comando1 comando2 ElseIf condio2 Then comando3 Else comando4 End If IIf(condio,clusula Ento,clusula Seno) Select Case expresso Case item1 bloco_de_comandos1 Case item2 bloco_de_comandos2 Case Else bloco_de_comandosX End Select
12

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Cada item de teste uma lista de um ou mais valores. Se houver mais de um valor, eles estaro separados por vrgulas. Cada bloco de comandos contm um comando, mais de um comando ou nenhum comando. Se mais de um Case coincide com a expresso testada, apenas o bloco de comandos associado com o primeiro Case coincidente ser executado. O Visual Basic executar comandos no bloco Case Else (que opcional) se nenhum dos valores na lista de itens coincidir com a expresso de teste.

4.2. COMANDOS DE LAOS CONDICIONAIS


Do ... Loop
Use o Do ... Loop para executar um bloco de comandos por um nmero indefinido de vezes. Existem variaes da sentena Do... , mais cada uma avalia uma condio numrica para determinar quando continuar a execuo. Assim como acontece com o If_Then a condio precisa resultar em um valor numrico que possa ser traduzido como True(-1) ou False (0). A estrutura abaixo executada enquanto a condio for True:

Do While condio bloco_de_comandos Loop


Outra variao do Do...Loop executa primeiro os comandos e depois testa a condio. Esta variao garante pelo menos uma vez a execuo do bloco de comandos :

Do bloco_de_comandos Loop While condio


As duas variaes abaixo so analogas as anteriores , com a exceo de que elas ficam em loop enquanto a condio de teste Falsa. Executa zero ou mais vezes

Do Until condio bloco_de_comandos Loop


Executa pelo menos uma vez

OBSERVAO: Note bem que Do Until condio equivalente a instruo de Do While Not condio.

Do bloco_de_comandos Loop Until condio For ... Next


Esta uma estrutura de repetio utilizada quando se sabe previamente o nmero de vezes que um bloco de comandos ser executado. O For...Next utiliza um contador que incrementado ou decrementado durante cada repetio. Sua sintaxe :

For contador = incio To final [ Step incremento ] comandos Next [ contador ]

13

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Os argumentos contador, inicio , final e incremento so todos numricos. O argumento incremento pode ser positivo ou negativo. Se incremento positivo, inicio deve ser menor ou igual a final. Se incremento negativo, inicio deve ser maior ou igual a final, para que os comandos sejam executados. Se o incremento no for informado ento ele ter seu valor assumido como 1. O comando Exit permite que voc abandone diretamente um bloco For..Next, Do...Loop, Sub procedure, ou Function procedure. Vejamos o exemplo:

For intInd = 1 To 100 strNome= txtNome_Cliente If strNome = "Mario Paranhos" Then Exit For End If Next intInd

OBSERVAO: Podemos utilizar estas sadas foradas: Exit Do Exit For Exit Function Exit Sub

Go To Faz com que o programa desvie incondicionalmente para um rtulo ou uma linha especificada dentro de uma procedure. No se recomenda utilizar este comando para programao estruturada, somente para desvio quando acontecer um erro. Sintaxe: Go To (rtulo | nmero de linha) Exemplo:

... On Error Go To Trata_Erro ... ... Trata_Erro: MsgBox Err.Description ... ... End Sub For Each elemento In elemento ... Next
Permite que voc percorra os elementos de uma coleo ou matriz

Exemplo: Dim ctl as Control For Each ctl in Me If ctl.Name = vbText Then Debug.Print "Este Controle uma Caixa de Texto." Endif Next With objeto ... End With
Esta instruo permite que se referencie a vrias propriedades de um objeto de uma s vez. Exemplo:

With Me!txtNome .BackColor = 0 .Visible = True .Enabled = True End With

14

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

5. MANIPULAO DE ARQUIVOS
Um arquivo nada mais do que uma srie de bytes relacionados e localizados em disco. Quando uma aplicao acessa um arquivo, necessrio fazer suposies sobre o tipo de dado que ser acessado (integer, single, ou outros tipos de dados). Existem trs tipos de acesso a arquivos: Randmico Seqencial Binrio

5.1. ACESSO RANDMICO


Um arquivo aberto para acesso randmico composto de uma srie de registros de mesmo tamanho. Apesar de um registro precisar, necessariamente, corresponder a um nico tipo de dado, isto no representa muitas restries, uma vez que podemos utilizar o tipo de dado definido pelo usurio (Type). O acesso randmico possui muitas vantagens em acesso e tratamento de registros. Por outro lado, os dados dentro de um registro so geralmente, menores do que o tamanho reservado para eles, o que ocasiona um espao de disco perdido. Em um arquivo de acesso randmico, os bytes formam registros com estruturas idnticas, cada uma contendo um ou mais campos. Um registro com um nico campo corresponde a um nico tipo padro, como integer ou string de tamanho fixo. Um registro com mais de um campo corresponde a qualquer estrutura de dados definida pelo usurio. Em um arquivo aberto para acesso randmico, todos os registros precisam corresponder a um nico tipo. Antes de abrir um arquivo para acesso randmico, definimos o tipo de registro que o arquivo dever armazenar. No exemplo que ser tratado nesta seo, Agenda de Telefones, o tipo de registro declarado como um tipo definido pelo usurio e recebe o nome de Registro:

Figura 4 - Declarao de um Registro

Obs.: Dentro de um mdulo global podemos utilizar a declarao anterior com escopo Public ou Private, porm, dentro de formulrios, apenas o escopo Private aceito (e obrigatrio)

15

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Notamos que todos os strings so de tamanho fixo. Isto se torna necessrio uma vez que o registro precisa ter um comprimento pr-determinado e fixo. Notamos tambm que, se Nome possuir somente 10 caracteres, os 5 caracteres restantes so preenchidos com espaos em branco. Da mesma forma que se Nome for maior que 15, os caracteres a partir do 15 sero ignorados (truncados). Para abrir um arquivo de acesso randmico, utilizamos a sintaxe para a declarao Open

Open <Arquivo> For Random As numero_arquivo Len = tamanho_registro Onde:


Len = tamanho_registro, utilizamos para especificar o tamanho do registro. Se este valor for incorreto, o acesso ser inadequado e os dados inconsistentes.

Exemplo:

Figura 6 - Comando Open

Para editar um arquivo aberto por acesso randmico, devemos copiar os registros provenientes do arquivo para variveis, alter-las se necessrio e depois copi-las de volta para o arquivo. Lendo registros do arquivo: Devemos utilizar a declarao Get para copiar os registros para as variveis do programa. Para realizar esta tarefa utilizamos a seguinte sintaxe: Get NumArq, Posicao, Agenda Onde: NumArq - Varivel que contm o nmero utilizado para abrir o arquivo na declarao Open. Posio - Varivel que contm o nmero do registro a ser copiado do arquivo especificado. Agenda - Varivel do tipo Registro que receber o contedo do registro.

16

ACCESS 2000 PROGRAMAO EM VBA Gravando no arquivo

SENAC-RS

Devemos utilizar a declarao Put para copiar registros em arquivos de acesso randmico. Para adicionar um novo registro no final de um arquivo de acesso randmico, devemos utilizar a declarao Put mostrada no procedimento evento Insere_click a seguir. Notemos que a posio de insero uma a mais do que a ltima posio do arquivo. Por exemplo, se um arquivo possuir 8 registros, devemos inserir o novo registro na posio 9.

Figura 7 - Gravando Registro

Deletando Registros Podemos deletar um registro simplesmente limpando todos os seus campos, contudo, apesar de vazio, o registro ainda existiria no arquivo. Ou seja, nesta soluo criamos buracos no arquivo gerando espaos no disco perdidos e problemas em operaes seqenciais. A melhor maneira de deletar um registro copiar todos os registros posteriores a ele para uma posio anterior. Por exemplo, vamos supor que o registro 6 deve ser deletado de um arquivo que contenha 8 registros: Neste caso devemos copiar o registro 7 sobre o 6, que ser apagado, e o registro 8 devemos copiar sobre o registro 7, que agora o registro 6.

Figura 8 - Excluindo Registros

O procedimento Deleta_Click possui uma falha: A ltima iterao da malha For..Next copia o ltimo registro sobre o registro anterior a ele, deixando, contudo, o ltimo registro com duas cpias no arquivo - na penltima e ltima posio.

17

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Para remover uma das cpias deste registro duplicado devemos seguir os seguintes passos. Criar um novo arquivo Copiar todos os registros vlidos do arquivo original para o novo arquivo Fechar todos os arquivos abertos atravs da declarao Close Utilizar a declarao Kill para apagar o arquivo original do disco Utilizar a declarao Name para renomear o novo arquivo com o nome do arquivo original Abrir novamente o arquivo e atualizar o valor de suas variveis de controle.

5.2. ACESSO SEQUENCIAL


O acesso a arquivos de maneira seqencial, oferece melhores resultados quando o arquivo formado por um texto, como um arquivo criado por um editor de texto normal. Quando abrimos um arquivo para acesso seqencial, podemos realizar uma entre as trs operaes a seguir Ler caracteres do arquivo (Input) Gravar caracteres no comeo do arquivo (Output) Gravar caracteres no fim do arquivo (Append) Aps abrir o arquivo para uma das operaes anteriores, necessrio fechar o arquivo, atravs da declarao Close, antes de reabri-lo para uma outra operao. Para abrir um arquivo para acesso seqencial utilizamos a declarao Open com a seguinte sintaxe:

Open arquivo For [Input / Output / Append] As ArqNum [Len]=TamanhoBuffer


OBS.: Quando utilizamos Input, o arquivo j deve existir, caso contrrio o VB produzir um erro. Contudo, quando tentamos abrir um arquivo inexistente com Output ou Append, o VBA primeiramente cria o arquivo e depois o abre. Para editar um arquivo aberto por acesso seqencial, devemos copiar o contedo do arquivo para varivel, alter-las se necessrio e depois copi-las de volta para o arquivo. Para ler o contedo de um arquivo de texto, devemos abrir o arquivo para acesso seqencial atravs da declarao Input. Utilizamos em seguida as declaraes Line Input #, Input$, ou Input # para copiar o arquivo para as variveis do programa. Normalmente, todo o contedo de um arquivo texto lido de uma nica vez. Contudo, o VBA oferece algumas ferramentas que permitem ler e gravar arquivos seqenciais linha por linha.

18

ACCESS 2000 PROGRAMAO EM VBA Exemplo:

SENAC-RS

Figura 9 - Lendo Registros

O cdigo acima l o contedo de um arquivo at que a funo EOF retorne True, indicando que o fim de arquivo foi encontrado. A cada iterao do lao, a declarao Line Input# armazena uma nica linha do arquivo na varivel ProximaLinha. A declarao Line Input# reconhece o fim de uma linha de texto quando encontra a seqncia de caracteres nova linha e retorno do carro (linefeed e carriage return - vbCrLf). Contudo, estes caracteres no so lidos pela declarao, logo se quisermos armazenar esta seqncia de caracteres na varivel devemos proceder como no cdigo acima. Podemos utilizar a funo Input para copiar qualquer nmero de caracteres de um arquivo para uma varivel. Esta funo obedece a seguinte sintaxe: Input [$] (n,NumArq) Onde:

Input retorna um tipo de dado Variant e Input$ retorna uma String n; nmero de bytes (caracteres) a serem lidos
NumArq: Nmero do arquivo definido para uso na declarao Open Para lermos um arquivo inteiro para uma varivel do programa de uma nica vez utilizamos o seguinte cdigo: LinhasDoArquivo = Input$(LOF(NumArq),NumArq) Onde LOF(NumArq) retorna o tamanho do arquivo em bytes, ou seja o nmero de caracteres do arquivo. OBS.: Ao contrrio da declarao Line Input#, a funo Input l os caracteres de nova linha e retorno de carro. O VBA tambm suporta a declarao Input #. Utilizamos esta declarao para ler uma lista de expresses numricas e/ou strings escritas em um arquivo com a declarao Write #

19

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Caixas de texto so freqentemente utilizadas em VB para exibir arquivos de texto. O tamanho mximo de um arquivo que pode ser editado 32K, o que o mximo valor que pode ser atribudo a uma caixa de texto de mltiplas linhas em VB. Portanto, antes de lermos um arquivo para uma caixa de texto, devemos verificar o tamanho do mesmo. Obs.: 32000 a aproximao grosseira para 32K. Uma aproximao mais precisa seria de 32*1024 = 32768 Escrever strings: Para armazenar o contedo de variveis em um arquivo de texto, devemos abri-lo com Output ou Append e utilizarmos a declarao Print #. Por exemplo, o cdigo a seguir copia todo o contedo de uma caixa de texto para um arquivo: Print #NumArq, Text1.Text O VBA tambm suporta a declarao Write #. Esta declarao permite que se escreva uma lista de expresses numricas e/ou strings em um arquivo. As expresses so separadas automaticamente por vrgulas, sendo que as expresses strings so colocadas entre aspas.

5.3. ACESSO BINRIO


O acesso binrio permite uma flexibilidade muito maior para tratamento de arquivos, uma vez que os bytes neste tipo de arquivo podem representar qualquer tipo. Devemos utilizar acesso binrio quando desejarmos manter o arquivo com o menor tamanho possvel. Para abrir um arquivo para acesso binrio, devemos utilizar a seguinte sintaxe da declarao Open. Open Arquivo For Binary As NumArq Para entendermos melhor quando utilizar um arquivo de Acesso Binrio, vamos considerar um tipo de registro, Pessoa, utilizado para arquivos de acesso randmico. Este registro tpico descrito atravs da declarao Type...EndType:

Figura 10 - Declarao de Registro

20

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Neste exemplo so utilizados registros de tamanho fixo ( exigncia do acesso randmico ) para armazenar informaes sobre empregados de uma instituio. Todo registro neste arquivo ocupa 194 bytes (integer - 2bytes, double - 8bytes, Long - 4 bytes, 15,15,150), no importando o seu contedo. No campo Comentrios, a string Bom Trabalho ocupa o mesmo espao de disco que a string O empregado tem se mostrado um pouco indeciso quando colocado sobre presso. No aconselhado para cargos de gerncia. Pode acontecer tambm que 150 caracteres seja muito pouco para este campo Comentrios. Algumas vezes so necessrios cerca de 500 caracteres, contudo a mdia de 20 caracteres. Utilizando acesso randmico teramos que definir um tamanho do campo suficiente para armazenar a maior necessidade, ou seja 500 bytes. Com isto teramos em mdia 480 bytes no aproveitados por registro. Este tipo de problema pode ser evitado atravs do uso de arquivos com acesso binrio, uma vez que neste tipo de arquivo no necessrio a pr-definio do tamanho dos campos. Com isto o registro Pessoa pode assumir o seguinte aspecto:

Figura 11 - Declarao de Tipo de Dados

Cada registro Empregado armazena agora somente o nmero de bytes efetivamente utilizados. Isto, contudo, pode gerar um problema quando necessitamos determinar o tamanho de cada campo para efetivarmos a leitura dos dados. Uma boa maneira de solucionar este problema gravar um tipo de dado Integer, o qual informar o tamanho da string, no prprio arquivo antes de cada campo de tamanho varivel. Esta soluo tem um custo de espao em disco (2 bytes por string), porm, sem dvida, torna os registros Empregados, em mdia menores do que os utilizados em acesso randmico. O procedimento Escreve_um_Registro, descrito a seguir, grava um registro no arquivo de empregados:

21

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Figura 12 - Gravao de Registro

OBS.: Apesar do acesso binrio prover uma maior flexibilidade que o acesso randmico, requer mais cdigo para manipulao de operaes de I/O. A declarao Get, quando utilizada com variveis de tamanho fixo, ou de tamanho conhecido, l o nmero de bytes pr-determinados, mesmo que existam bytes no utilizados. Quando utilizamos a declarao Get para strings de tamanho varivel, lido somente o tamanho corrente(atual) da string. Considere o seguinte exemplo: Escola = "PEOPLE COMPUTAO" Get #1, , Escola ' String contm 17 caracteres ' L 17 bytes do arquivo #1 para a varivel escola

O procedimento Get_um_Registro, a seguir l os registros gravados pelo procedimento Escreve_Um_Registro visto anteriormente. Antes de lermos cada campo necessrio conhecermos o tamanho deste campo. Uma vez determinado o tamanho do campo utilizaremos a funo String$ para definir a varivel que receber os dados como uma varivel com o tamanho correto e inicialmente composta de espaos em branco.

22

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Figura 13 - Leitura de Registros (Get)

Uma outra maneira, mais simples, de realizarmos a mesma tarefa atravs da utilizao da declarao Input$. O procedimento Put_Um_Registro, ilustra a utilizao desta declarao:

Indiferente ao mtodo de acesso utilizado, importante manter a informao da localizao dos registros em um arquivo. Caso contrrio, ser preciso ler desde o comeo de um arquivo toda vez que for necessrio a recuperao de um dado, o que pode tornar uma aplicao consideravelmente lenta. 23

Figura 14 - Leitura de Registros (Input)

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

O acesso randmico tem alguma vantagem neste ponto, pois mantm as informaes da posio de seus registros baseado no tamanho dos mesmos e na posio do incio do arquivo. Tudo que precisamos fazer ento fornecer funo de escrita ou leitura o nmero do registro. Entretanto, isto somente til quando desejamos acessar no contedo de um de seus campos, como por exemplo o ltimo nome do empregado. Se estivermos utilizando acesso binrio, os dados sero localizados em lugares pr-estabelecidos, em alguns casos os dados binrios nem mesmo se encontram na forma de registros. Nestes casos necessrio o uso de algum mecanismo que manter, de alguma forma, informaes sobre a localizao dos registros no arquivo. Um destes mecanismos a tabela de localizao do arquivo (File Location table). Por exemplo, vamos supor que precisamos de um rpido acesso a qualquer dos registros dos empregados, e que utilizaremos o ltimo nome para localizar estes registros. Comearemos construindo um novo tipo de dado, e em seguida construiremos nossa tabela com base neste tipo.

Figura 15 - Tabela de Array

O cdigo acima cria uma tabela que pode ser utilizada para procurar um empregado pelo seu ltimo nome. A tabela fornece a localizao do comeo do registro especificado. Esta tabela pode ser lida ou criada a cada vez que o arquivo de empregados aberto. No devemos esquecer de atualizar esta tabela toda vez que o registro sofrer alguma alterao.

24

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

6. PROCEDIMENTOS - FUNES E SUBROTINAS


So trechos de programa que executam uma determinada tarefa. A tarefa a ser realizada pode ou no retornar um parmetro (resultado). Quando retorna parmetro chamada de funo. As subrotinas no retornam parmetros. Em Visual Basic as funes e subrotinas so declaradas de maneira quase idntica. Sintaxe [Static][Private][Public] Function Nome_Funo[(Lista Argumentos)] [As Tipo] [Bloco de Declaraes] [Nome_Funo = expresso] [Exit Function] [Bloco de Declaraes] [Nome_Funo = expresso] End Function

[Static][Private][Public] Sub Nome_Sub[(Lista Argumentos)] [As Tipo] [Bloco de Declaraes] [Exit Sub] [Bloco de Declaraes] End Sub

As funes e subrotinas possuem as seguintes partes: Static: Indica que as variveis locais da procedure so preservadas entre as chamadas. As variveis declaradas fora da procedure no so afetadas pelo atributo Static, mesmo que sejam acessadas pela procedure. Private: Indica que a funo ou subrotina acessvel apenas por funes ou subrotinas do mesmo mdulo em que foi escrita. Public: Indica que a funo ou subrotina acessvel por todas funes ou subrotinas no importando o escopo em que foi escrita. Function/Sub: Marca o incio da funo / subrotina NomeFuno / NomeSub: Nome da funo/subrotina. No devem ter o mesmo nome de palavras reservadas, funes ou subrotinas j declaradas. Pode-se evitar conflitos com procedures de outros mdulos utilizando a palavra Private (desde que o nome no coincida com o de outra funo, subrotina ou varivel do mdulo onde est sendo declarada).

25

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Lista Argumentos: Lista de variveis, com os argumentos que so passados quando a funo ou subrotina chamada. A passagem de mltiplas variveis feita separando-as por vrgula. Os argumentos so passados de duas formas: por referncia(default) ou por valor. Na passagem por referncia passado um ponteiro do tipo far (32 bits). Na passagem por valor, passado o valor da prpria varivel. A palavra chave ByVal que faz com que o argumento seja passado por valor. O argumento Lista Argumentos tem a seguinte sintaxe: [ByVal]varivel[()] [As Type] [,[ByVal]varivel[()] [As Tipo]]... ByVal: Palavra reservada, indica que o tipo de passagem do argumento por valor. Varivel: Nome da varivel que representa o argumento. As Tipo: Define o tipo da varivel retornada pela funo. Pode ser utilizado o caracter de sufixo (#,$,%,etc...) BlocoDeDeclaraes: Qualquer grupo de declaraes executadas internamente ao corpo da funo ou subrotina. Expresso: Valor de retorno da funo. O valor retornado atribudo ao nome da funo. Se nenhum valor for atribudo funo ser sempre retornado 0 (se o tipo numrico) ou (se string) Exit Function / Sub : Provoca o encerramento imediato da funo ou subrotina. End Function / Sub: Marca o final da procedure.

6.1. ARGUMENTOS BYVAL E BYREF


Indica que o argumento passado por valor e no por referncia (ByRef). Quando ByVal precede uma varivel de argumento numrico, o argumento convertido para o tipo numrico indicado em Declare (como Integer ou Long, por exemplo) antes de ser passado. Se precede uma string, o ponteiro passado para a procedure. Exemplo: Sub PesquisaFornecedor(Nome As Control, Indice As Integer) Static Fornecedor(4) As String Fornecedor(0) = "Antarctica" Fornecedor(1) = "Brahma" Fornecedor(2) = "Kaiser" Fornecedor(3) = "Skol" If TypeOf Control is LabelBox Then Nome.Caption = Fornecedor(Indice) ... End If End Sub OBS.: Como voc percebeu, a maneira default de passar parmetros no VBA sempre por referncia, j que nesse caso no necessrio a declarao explcita. Deve ser utilizado com muito cuidado, de modo a no alterar variveis acidentalmente. Por padro, utilize passagem de parmetros por valor, a menos que o outro mecanismo seja essencial.

26

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

6.2. ARGUMENTOS OPCIONAIS


Quando voc declara na definio de uma procedure que um parmetro opcional, o Visual Basic entende que quando o usurio fizer uma chamada a este procedimento, poder incluir ou no este argumento, sem que isto cause um erro de execuo. A maneira de declarar que um argumento opcional bastante simples. Basta incluir a palavra Optional antes do nome da varivel de memria que receber este argumento: Seguindo em nosso exemplo, a procedure CalculaMenorDez deve ter seus argumentos declarados da seguinte forma: Function CalculaMenorDez( Optional Valor, Optional Data) As Single Note que quando voc utilizar a opo optional para um argumento, todos os demais argumentos subseqentes devero ser opcionais tambm. Neste caso, voc dever incluir a palavra Optional na frente de cada um dos argumentos declarados em sua procedure. Para completarmos nosso exemplo vamos contar com a ajuda de uma nova funo, a IsMissing.

6.2.1. TESTANDO ARGUMENTOS NO PASSADOS


Esta funo IsMissing opera de uma forma bastante simples, retornando um valor lgico True ou False, indicando se o argumento opcional foi passado ou no ao procedimento. Se o valor de retorno for True (IsMissing=True - Est faltando = Verdadeiro) o argumento no foi passado. Analogamente a resposta False indica que o procedimento recebeu o parmetro indicado. A sintaxe desta funo : IsMissing(Nome do Argumento) Onde o Nome do Argumento o nome da varivel declarada como opcional na definio da procedure, como Valor ou Data em nosso exemplo. Exemplo: Function CalculaMenorDez(Optional Valor, Optional Data) As Single If IsMissing(Valor) Then MsgBox("No recebi o parmetro Valor.") Else ValorSeguro = Valor * 1.01 Valor = ValorSeguro + 1 If IsMissing(Data) Then MsgBox("No recebi o parmetro Data.") Else MsgBox("OK. Recebi os parmetros.") End If CalculaMenorDez=Valor End If End Function

27

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

7. UTILIZAO DE OBJETOS DO ACCESS 7.1. OBJETO DOCMD


Voc pode utilizar os mtodos do objeto DoCmd para executar aes do Microsoft Access a partir do Visual Basic para Aplicativos. Uma ao pode realizar tarefas como fechar janelas, abrir formulrios e definir o valor de controles. Este objeto pode executar todas as aes de macros disponveis e ainda o mtodo RunCommand que permite ativar qualquer uma das opes dos menus disponveis dentro do Access. Sintaxe: [Application.]DoCmd.Nome_Metodo [arg1, arg2, ...] Exemplo: Docmd.OpenForm "frmFuncionarios", acNormal Docmd.OpenReport "rptPedidos", acViewPreview A maioria dos mtodos deste objeto tm argumentos obrigatrios, e outros so opcionais. Se voc omitir os argumentos opcionais, eles assumiro os valores padro do mtodo. Por exemplo, o mtodo OpenForm utiliza sete argumentos, mas somente o primeiro argumento, o nome do formulrio, obrigatrio. O exemplo abaixo mostra como voc pode abrir o formulrio frmFuncionarios e somente exibir os funcionrios com o cargo de "Representante de Vendas". DoCmd.OpenForm "Funcionarios", , ,"[Cargo] = 'Representante de Vendas'"

7.2. OBJETO SCREEN


O objeto Screen se refere a determinado formulrio, relatrio ou controle, que tem atualmente o foco. Voc pode, por exemplo, utilizar o objeto Screen com a propriedade ActiveForm para referir-se ao formulrio na janela ativa sem conhecer o nome do formulrio. O exemplo abaixo exibe o nome do formulrio que est na janela ativa. MsgBox Screen.ActiveForm.Name O exemplo a seguir utiliza o objeto Screen para imprimir o nome do formulrio que est na janela ativa e o nome do controle ativo nesse formulrio. Dim frm As Form Dim ctl As Control ' Retorna objeto Form apontando para o formulrio ativo. Set frm = Screen.ActiveForm MsgBox frm.Nome & " o formulrio que tem o foco ativo." ' Retorna objeto Control apontando para o controle ativo. Set ctl = Screen.ActiveControl MsgBox ctl.Nome & " o controle que tem o foco ativo neste formulrio." Este objeto no torna ativo um formulrio, relatrio ou controle. Para tornlo ativo um formulrio, relatrio ou controle, voc deve utilizar o mtodo SelectObject do objeto DoCmd. O Access retorna um erro em tempo de execuo caso no encontre nenhum objeto ativo. Voc pode utilizar a propriedade ActiveForm juntamente com o objeto Screen para identificar ou referir-se ao formulrio que tem o foco. Se um subformulrio tiver o foco, A propriedade ActiveForm se refere ao formulrio principal.

28

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

8. TRATAMENTO DE ERROS
Nenhum programa a prova de erros. Logo, quando isto acontece, faz com que o programa seja inesperadamente interrompido, e se nenhuma rotina especfica existir para tratar esta ocorrncia, o programa ser finalizado. Existem trs tipos de erros que podem acontecer em um programa: Erros de sintaxe: Ocorrem quando se digita equivocadamente um comando, propriedade, o nome de um controle ou um mtodo do VBA. O compilador da linguagem identifica o erro e marca o erro em vermelho. Erros de lgica: So erros que produzem resultados imprecisos ou invlidos, quando criamos um sequncia de comandos incorretas. Este tipo de erro s o desenvolvedor pode corrigir. Erros inesperados: Ocorrem de modo inesperado, ou seja, o sistema tenta executar algum comando/operao no disponvel ou impossvel. . O compilador da linguagem identifica este erro e exibe uma mensagem. Abaixo algumas dicas para no termos problemas com os erros mais comuns: Usarmos sempre a opo Option Explicit para obrigar a declarao das variveis utilizadas; Sempre escreva o procedimento ou funo em uma folha de papel para depois transferir para o mdulo, utilize-se do portugus estruturado; Comente ao mximo o seu programa; Crie sempre uma rotina de tratamento de erros em seus mdulos. Os assistentes do Access, quando criam algum controle ou procedimento do evento, j introduzem no cdigo a rotina padro de tratamento de erros.

Zera o cdigo de erro retornado Descrio do cdigo de erro retornado

Valor do cdigo do erro retornado

Figura 16 - Mtodo Err (Erro)

29

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Existem trs instrues para gerenciarmos o erro: On Error GoTo nmero_da_linha | rtulo - Desvia o controle do programa para uma determinada linha ou um rtulo do seu cdigo. As instrues subsequentes ao ponto onde ocorreu o erro ficam interrompidas de executar at que a rotina de tratamento de erro determine o que fazer. On Error Resume Next - Sempre que ocorre um erro, aquela insturo no ser executada, e o programa continua a partir da prxima linha de comando, ou seja, no interrompe a execuo mesmo que temporariamente. On Erro GoTo 0 - Este comando desabilita o tratamento de erro gerenciado pela instruo On Error. Portanto, cuidado ao utilizar esta instruo! Sempre que ocorrer um erro o sistema gera um cdigo de erro, retornado atravs do objeto Err. Esta instruo tambm retorna a descrio da mensagem do erro provocado. Se o seu programa no gerar erro o objeto Err retornar o valor zero(0). J se ocorrer um erro o objeto Err atualiza as suas propriedades em tempo de execuo. Esta instruo contm informaes sobre os erros gerados e suas propriedades tm valores somente enquanto o tratamento de erros no desativado, seja por um Resume, seja pela finalizao do procedimento. Se voc desejar gerar um erro especfico, use os mtodos Clear e Raise, para esvaziar os valores atuais das propriedades e gerar um novo tipo de erro. Voc obtm informaes completas sobre o erro gerado inspecionando os valores das propriedades Number e Description do objeto. Sempre que necessrio, voc pode inspecionar a propriedade Number e, de posse do cdigo do erro, efetuar um tratamento especfico para cada caso. A propriedade Description extremamente til para o programador, pois evita que, em todos os pontos do programa, seja necessrio criar cdigo para exibir uma mensagem padro, porm deve-se levar em conta que a mensagem ser sempre exibida em ingls.

Esquematizando:
Start On Error GoTo Label_X Ao 1 (Error) Resume Ao 2 Label_X: Error Handler Resume Resume Next

Ret_Erro:

Ao 3

End

30

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Abaixo a janela de cdigo onde podemos inspecionar o contedo de variveis, executar o procedimento passo a passo, ativar pontos de interrupo, exibir a janela iemdiata, entre outras:

Inserindo um ponto de interrupo.

Este menu de atalho mostrado quando se clica com o boto direito do mouse em qualquer lugar da rea de cdigo.
Figura 17 - Depurando o cdigo

Se selecionarmos a varivel e posicionarmos o cursor sobre ela o VBA exibe uma legenda com o seu contedo atual, como mostra a figura acima, quando selecionamos o campo da tabela chamado "Valor Contratado" ele igual a 706293,9.

Na janela imediata ou depurar voc pode inspecionar o valor de qualquer varivel de sistema, do objeto ativo. Voc pode, em tempo de execuo, alterar o valor de uma varivel para realizar um teste ou alguma correo. 31

Figura 18 - Janela Imediata

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Existe uma funo MsgBox que serve para mostrar ao usurio uma mensagem de erro ou de aviso. Ela mostra a mensagem em uma caixa de dilogo; aguarda o usurio escolher um boto e retorna um valor indicando qual boto foi clicado pelo usurio. Esta funo possui 5 argumentos. O primeiro o prprio texto da mensagem que se quer exibir. O segundo o tipo de boto e o cone que se quer exibir. O terceiro o texto da barra de ttulo da janela da mensagem. O quarto o arquivo de ajuda associado mensagem de erro ou aviso. E o quinto argumento o contexto da ajuda dentro do arquivo. Sua sintaxe : MsgBox (prompt [, buttons ] [,title] [,helpfile, context]) Onde: Prompt: A mensagem que ser mostrada na janela de dilogo. O tamanho mximo de aproximadamente 1024 caracteres, dependendo da largura do caracter que est sendo usado. Voc pode separ-lo em vrias linhas usando caractere de retorno de carro Chr(13), ou um caracter nova linha Chr(10), ou uma combinao dos dois (Chr(13) & Chr(10)); Buttons: Uma soma de valores especificando o nmero e o tipo de botes que sero apresentados, o estilo do cone a ser usado, ou identificar o boto default. Se omitido, o valor default para os botes 0. Title: String que representa o ttulo da janela de dilogo. HelpFile: String que identifica o nome do arquivo de help a ser utilizado. Se Helpfile no for fornecido, o prximo argumento context tambm no dever ser. Context: Expresso numrica que indica qual o contexto de help dever ser apresentado.

Figura 19 - Comando MessageBox

32

ACCESS 2000 PROGRAMAO EM VBA Abaixo os valores vlidos para o argumento Buttons: Valor do boto vbOKOnly vbOkCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel vbCritical vbQuestion vbExclamation vbInformation vbdefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4 vbApplicationModal vbSystemModal

SENAC-RS

O que ir mostrar Mostra apenas o boto OK. Mostra os botes Ok e Cancelar. Mostra os botes Abort, Retry e Ignore. Mostra os botes Yes, No e Cancel. Mostra os botes Yes e No. Mostra os botes Retry e Cancel. Exibe o cone Mensagem crtica. Exibe o cone Consulta de aviso. Exibe o cone Mensagem de aviso. Exibe o cone Mensagem de informao. O primeiro boto o padro. O segundo boto o padro. O terceiro boto o padro. O quarto boto o padro. Janela restrita do aplicativo; o usurio deve responder caixa de mensagem antes de continuar o trabalho no aplicativo atual. Janela restrita do sistema; todos os aplicativos so suspensos at que o usurio responda caixa de mensagem.
Tabela 7 - Constantes do Boto

Exemplo: On Error GoTo Rotina_Erro ... ... ... Voc pode combinar cones e botes somando o valor das constantes.

Rotina_Erro: Select Case Err.Number Case 3022 MsgBox "Violao de Chave!", _ vbOKOnly + vbCritical, "Mensagem de Erro" Case 3314 MsgBox "Campo requerido no preenchido!", _ vbOKOnly + vbQuestion, "Mensagem de Aviso" Case Else MsgBox Err.Description End Select

33

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Figura 20 - Funo MessageBox

Abaixo os valores das constantes que esta funo pode retornar: CONSTANTE vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo VALOR 1 2 3 4 5 6 7 DESCRIO pressionado foi o pressionado foi o pressionado foi o pressionado foi o pressionado foi o pressionado foi o pressionado foi o

O O O O O O O

boto boto boto boto boto boto boto

OK. Cancelar. Abortar. Repetir. Ignorar. Sim. No.

Tabela 8 - Constantes da Funo

34

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

9. LINGUAGEM SQL
a linguagem mais utilizada no gerenciamento de banco de dados. A Linguagem Estruturada de Consulta (Structured Query Language) uma liguagem de aplicao para banco de dados relacionais. Atravs da instruo SQL que o banco de dados retorna ou executa a ao sobre o conjunto de registros. Os comandos so, basicamente, divididos em linguagem de definio de dados (DDL) e linguagem de manipulao de dados (DML). Se voc quiser se aprimorar mais neste vasto conceito da linguagem SQL utilize o arquivo de help do prprio produto Access 2000, que o mecanisno do Jet Engine 3.5, que est no diretrio C:\Windows\System\JetSql35.hlp. Ex.: SELECT MAX([Preco]) AS [Maior_Preco] FROM Pedidos WHERE [Cod_Categoria] ="001" AND [Cidade] LIKE "Porto*" ORDER BY [Data_Pedido] Palavras-chaves: Comandos: Qualificadores: Clusulas: Operadores: Funes agregadas: SELECT ...FROM WHERE ORDER BY =, >, <>, LIKE ... MAX, MIN, COUNT...

9.1. LINGUAGEM DE MANIPULAO DE DADOS


So comandos que servem para recuperao dos dados, acrescentar, remover e atualizar os registros.

9.1.1. CONSULTA SELEO


Para executar esta operao, o mecanismo de banco de dados procura a tabela ou tabelas especificadas, extrai as colunas escolhidas, seleciona as linhas que atendem aos critrios e classifica ou agrupa as linhas resultantes na ordem especificada. Voc pode utilizar um asterisco (*) para selecionar todos os campos em uma tabela. Se um nome de campo for includo em mais de uma tabela na clusula FROM, coloque antes dele o nome da tabela e o operador . (ponto). Se desejar um nome de campo diferente ou um nome no for sugerido pela expresso utilizada para gerar o campo, utilize a palavra reservada AS. Sintaxe: SELECT [atributo] { * | tabela.* | [tabela.]campo1 [AS alias1] [, [tabela.]campo2 [AS alias2] [, ...]]} FROM expressodetabela [, ...] [IN bancodedadosexterno] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION]

35

ACCESS 2000 PROGRAMAO EM VBA Exemplos: SELECT * FROM Funcionrios;

SENAC-RS

SELECT Funcionrios.Departamento, Supervisores.SupvNome FROM Funcionrios INNER JOIN Supervisores WHERE Funcionrios.Departamento = Supervisores.Departamento; SELECT DataDeNascimento AS Nascimento FROM Funcionrios; SELECT COUNT(CdigoDoFuncionrio) AS ContagemDePessoas FROM Funcionrios;

9.1.2. CONSULTA CRIAR TABELA


Voc pode utilizar consultas criar tabela para arquivar registros, fazer cpias de backup das tabelas ou fazer cpias para exportar para um outro banco de dados, ou para usar como base para relatrios que exibem dados sobre um determinado perodo de tempo. Por exemplo, voc poderia produzir um relatrio de Vendas Mensais por Regio, executando a mesma consulta criar tabela todos os meses. Convm definir uma chave primria para a nova tabela. Quando voc cria a tabela, os campos na nova tabela herdam o tipo de dados e tamanho de campo de cada campo das tabelas base da consulta, mas nenhuma outra propriedade do campo ou da tabela transferida. Isso servir para no permitir a duplicao de registros quando da utilizao de uma nova consulta para acrescentar registros. Sintaxe: SELECT campo1[, campo2[, ...]] INTO novatabela [IN bancodedadosexterno] FROM origem Exemplos: SELECT Funcionrios.* INTO [Backup Func] FROM Funcionrios;

9.1.3. CONSULTA ACRSCIMO


Voc pode usar esta consulta para adicionar registros a uma tabela. Nesse caso, o cdigo especifica o nome e o valor de cada campo do registro. Voc deve especificar cada um dos campos do registro ao qual ser atribudo um valor e um valor para aquele campo. Quando voc no especifica os campos, o valor padro ou Null inserido para colunas ausentes. Os registros so adicionados ao fim da tabela. Se a tabela de destino contiver uma chave primria, certifique-se de acrescentar valores exclusivos no-Null ao campo ou campos da chave primria; se no o fizer, o mecanismo de banco de dados no acrescentar os registros. Se voc acrescentar os registros a uma tabela com um campo AutoNumerao e quiser renumerar os registros acrescentados, no inclua esse campo. Inclua o campo AutoNumerao na consulta se quiser conservar os valores originais do campo.

36

ACCESS 2000 PROGRAMAO EM VBA Sintaxe:

SENAC-RS

INSERT INTO destino [IN bancodedadosexterno] [(campo1[, campo2[, ...]])] SELECT [origem.]campo1[, campo2[, ...] FROM expressodetabela INSERT INTO destino [(campo1[, campo2[, ...]])] VALUES (valor1[, valor2[, ...]) Exemplos: INSERT INTO Funcionrios (Nome,Sobrenome, Cargo) VALUES ('Pedro', 'Silva', 'Estagirio');

9.1.4. CONSULTA ATUALIZAO


Cria uma consulta que altera valores de campos em uma tabela especificada, com base em critrios especificados. Ela no gera um conjunto de resultados. Alm disso, depois de atualizar os registros usando uma consulta de atualizao, voc no poder desfazer a operao. Mantenha sempre cpias de backup dos dados. Se voc atualizar os registros errados, poder recuper-los a partir das cpias. Sintaxe: UPDATE tabela SET novovalor WHERE critrios; Exemplos: UPDATE Pedidos SET QuantiaDoPedido = QuantiaDoPedido * 1.1, Frete = Frete * 1.03 WHERE PasDeDestino = 'UK';

9.1.5. CONSULTA EXCLUSO


Cria uma consulta que remove os registros de uma ou mais tabelas relacionadas. No te a diferena entre excluir a tabela e os registros, se voc excluir a tabela a estrutura ser perdida. Em contrapartida, quando voc deleta os registros, somente os dados so excludos; a estrutura da tabela e todas as suas propriedades, como atributos de campo e ndices, permanecem intactos. A consulta excluso exclui registros inteiros, no somente os dados em campos especficos. Se voc quiser excluir valores de um campo especfico, crie uma consulta atualizao que altere os valores para Null. Depois de remover os registros utilizando uma consulta excluso, voc no poder desfazer a operao. Mantenha sempre cpias de backup dos dados. Assim, se voc excluir os registros errados, poder recuper-los a partir das cpias. Sintaxe: DELETE [tabela.*] FROM tabela WHERE critrios; Exemplos: DELETE * FROM Funcionrios WHERE Cargo = 'Estagirio';

37

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

9.1.6. CONSULTA UNIO


Cria uma consulta que combina os resultados de duas ou mais consultas ou tabelas independentes. Voc pode mesclar os resultados de duas ou mais consultas, tabelas e instrues SELECT, em qualquer combinao, em uma nica operao UNION. Como padro, nenhum registro duplicado retornado quando voc usa uma operao UNION; entretanto, voc pode incluir o atributo ALL para assegurar que todos os registros sejam retornados. Isso faz com que a execuo da consulta seja mais rpida. Todas as consultas em uma operao UNION devem solicitar o mesmo nmero de campos; contudo, os campos no devero ter o mesmo tamanho ou tipo de dados. Use apelidos somente na primeira instruo SELECT pois eles so ignorados em qualquer outra. Sintaxe: [TABLE] consulta1 UNION [ALL] [TABLE] consulta2 [UNION [ALL] [TABLE] consultan [... ]] Exemplo: TABLE [Novas Contas] UNION ALL SELECT * FROM Clientes WHERE QuantidadeDoPedido > 1000;

9.1.7. DECLARAO PARAMETERS


Voc pode utilizar uma declarao PARAMETERS para criar uma consulta parmetro. Uma consulta parmetro pode ajudar a automatizar o processo de alterao dos critrios da consulta. Em uma consulta parmetro, o cdigo precisar fornecer os parmetros a cada vez que a consulta for executada. A declarao PARAMETERS opcional, se a declarao incluir mais de um parmetro, separe-os com vrgulas. O exemplo a seguir inclui dois parmetros: Sintaxe: PARAMETERS [Preo baixo] Currency, [Data inicial] DateTime; Voc pode usar nome, mas no tipo de dados em uma clusula WHERE ou HAVING. O exemplo a seguir espera que dois parmetros sejam fornecidos e, ento, aplica os critrios aos registros na tabela Pedidos: PARAMETERS [Preo baixo] Currency, [Data inicial] DateTime; SELECT NmeroDoPedido, QuantiaDoPedido FROM Pedidos WHERE QuantiaDoPedido > [Preo baixo] AND DataDoPedido >= [Data inicial];

38

ACCESS 2000 PROGRAMAO EM VBA Sintaxe: PARAMETERS nome tipodedados [, nome tipodedados [, ...]] Exemplo: PARAMETERS [Cargo do Funcionrio] Text SELECT Sobrenome, Nome, CdigoDoFuncionrio FROM Funcionrios WHERE Cargo =[Cargo do Funcionrio];

SENAC-RS

9.1.8. OPERADOR "INNER JOIN"


Combina registros de duas tabelas correspondentes em um campo comum a ambas. Sintaxe: ... FROM tabela1 tabela2.campo2 Exemplo: SELECT DISTINCTROW (Nome & Chr(32) & Sobrenome) AS NomeCompleto FROM Funcionrios INNER Pedidos ON Pedidos.CdigoDoFuncionrio Funcionrios.CdigoDoFuncionrio GROUP BY (Nome & Chr(32) & Sobrenome); INNER JOIN tabela2 ON tabela1.campo1 opercomp sempre que houver valores

9.1.9. OPERADORES "LEFT JOIN" ou "RIGHT JOIN"


Combina registros da tabela de origem quando usados em qualquer clusula FROM. Utilize uma operao LEFT JOIN para criar uma associao externa esquerda. As associaes externas esquerda incluem todos os registros da primeira (esquerda) de duas tabelas, mesmo que no haja valores correspondentes para os registros na segunda tabela (direita). Utilize uma operao RIGHT JOIN para criar uma associao externa direita. As associaes externas direita incluem todos os registros da segunda (direita) de duas tabelas, mesmo que no haja valores correspondentes para registros na primeira (esquerda) tabela. Sintaxe: ... FROM tabela1 [ LEFT | RIGHT ] JOIN tabela2 ON tabela1.campo1 opercomp tabela2.campo2 Exemplo: SELECT [Nome do Departamento], Nome & Chr(32) & Sobrenome AS Name FROM Departamentos LEFT JOIN Funcionrios ON Departamentos.[Cdigo Do Departamento] = Funcionrios.[Cdigo Do Departamento] ORDER BY [Nome do Departamento];

39

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

9.2. LINGUAGEM DE DEFINIO DE DADOS


So comandos que servem para definir a estrutura de tabelas, modificar as tabelas, alm de criar e excluir ndices

9.2.1. INSTRUO CREATE TABLE


Use esta instruo para definir uma nova tabela e seus campos e restries de campo. Se NOT NULL for especificado para um campo, ento necessrio que os novos registros tenham dados vlidos naquele campo. Uma clusula CONSTRAINT estabelece vrias restries em um campo e pode ser utilizada para estabelecer a chave primria. Voc tambm pode utilizar a instruo CREATE INDEX para criar uma chave primria ou ndices adicionais em tabelas existentes. Voc pode utilizar NOT NULL em um campo nico ou dentro de uma clusula CONSTRAINT nomeada que se aplica a uma CONSTRAINT nomeada de campo nico ou de campos mltiplos. Contudo, voc pode aplicar a restrio NOT NULL somente uma vez a um campo, ou ocorrer um erro em tempo de execuo. Sintaxe: CREATE TABLE tabela (campo1 tipo [(tamanho)] [NOT NULL] [ndice1] [, campo2 tipo [(tamanho)] [NOT NULL] [ ndice2] [, ...]] [, CONSTRAINT ndicedemulticampos [, ...]]) Exemplo: CREATE TABLE EstaTabela (Nome TEXT, Sobrenome TEXT);

9.2.2. INSTRUO CREATE INDEX


Para proibir valores duplicados no campo ou campos indexados de diferentes registros, use a palavra reservada UNIQUE. Na clusula WITH opcional, voc pode impor regras de validao de dados. Voc pode: Proibir entradas Null no campo ou campos indexados dos novos registros, utilizando a opo DISALLOW NULL. Impedir que registros com valores Null no campo ou campos indexados sejam includos no ndice utilizando a opo IGNORE NULL. Designar o campo ou campos indexados como a chave primria utilizando a palavra reservada PRIMARY. Isto significa que a chave exclusiva e, portanto, voc pode omitir a palavra reservada UNIQUE. Observao No use a palavra reservada PRIMARY ao criar um novo ndice numa tabela que j tenha uma chave primria; se voc o fizer, ocorrer um erro. Sintaxe: CREATE [ UNIQUE ] INDEX ndice ON tabela (campo [ASC|DESC][, campo [ASC|DESC], ...]) [WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }] Exemplo: CREATE INDEX Novondice ON Funcionrios " _ & "(TelefoneResidencial, Ramal);"

40

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

9.2.3. INSTRUO DROP TABLE ou DROP INDEX


Exclui uma tabela existente de um banco de dados ou exclui um ndice existente de uma tabela. Voc deve fechar a tabela para poder exclu-la ou remover um ndice dela. Sintaxe: DROP {TABLE tabela | INDEX ndice ON tabela} Exemplo: DROP INDEX Novondice ON Funcionrios; DROP TABLE Funcionrios;"

9.2.4. INSTRUO ALTER TABLE


Modifica a estrutura de uma tabela depois de ter sido criada com a instruo CREATE TABLE. Atravs da instruo ALTER TABLE, voc pode alterar uma tabela existente de diversas maneiras. Voc pode: Utilizar ADD COLUMN para adicionar um novo campo tabela. Voc especifica o nome do campo, tipo de dados e (para campos Texto e Binrio) um tamanho opcional. Voc tambm pode definir um ndice no campo. Se voc especificar NOT NULL para um campo, ento os novos registros devero ter dados vlidos naquele campo. Utilizar ADD CONSTRAINT para adicionar um ndice de campos mltiplos. Utilizar DROP COLUMN para excluir um campo. Voc especifica somente o nome do campo. Utilizar DROP CONSTRAINT para excluir um ndice de campos mltiplos. Voc especifica somente o nome do ndice aps a palavra reservada CONSTRAINT. Sintaxe: ALTER TABLE tabela {ADD {COLUMN campo tipo[(tamanho)] [CONSTRAINT ndice] | CONSTRAINT ndicedemulticampos} | DROP {COLUMN campo I CONSTRAINT nomedondice} } [NOT NULL]

Exemplo: ALTER TABLE Funcionrios ADD COLUMN Salrio CURRENCY;

41

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

9.2.5. CLUSULA CONSTRAINT


Uma restrio semelhante a um ndice, embora tambm possa ser utilizada para estabelecer uma relao com uma outra tabela. Voc utiliza a clusula CONSTRAINT nas instrues ALTER TABLE e CREATE TABLE para criar ou excluir restries. H dois tipos de clusulas CONSTRAINT: um para criar uma restrio em um campo nico e outro para criar uma restrio em mais de um campo. Sintaxe: Restrio de campo nico: CONSTRAINT nome {PRIMARY KEY | UNIQUE | NOT NULL | REFERENCES tabelaexterna [(campoexterno1, campoexterno2)]} Restrio de campos mltiplos: CONSTRAINT nome {PRIMARY KEY (primria1[, primria2 [, ...]]) | UNIQUE (exclusiva1[, exclusiva2 [, ...]]) | NOT NULL (nonulo1[, nonulo2 [, ...]]) | FOREIGN KEY (ref1[, ref2 [, ...]]) REFERENCES tabelaexterna [(campoexterno1 [, campoexterno2 [, ...]])]} Exemplo: CREATE TABLE MinhaTabela (Nome TEXT, Sobrenome TEXT, DataNasc DATETIME, CONSTRAINT MinhaTabelaRestrio UNIQUE (Nome, Sobrenome, DataNasc));

9.3. FUNES AGREGADAS


Utilizando os SQL funes agregadas, voc pode determinar vrias estatsticas em conjuntos de valores. Voc pode utilizar estas funes em uma consulta e em expresses agregadas na propriedade SQL de um objeto QueryDef ou ao criar um objeto Recordset baseado em uma consulta SQL.

9.3.1. MDIA
Calcula a mdia aritmtica de um conjunto de valores contido em um campo especificado em uma consulta. Sintaxe: Avg(expr)

SELECT Avg(Frete) AS [Mdia do Frete] FROM Pedidos WHERE Frete > 100;

9.3.2. CONTAR
Calcula o nmero de registros retornado por uma consulta. Sintaxe: Count(expr)

SELECT Count (PasDeDestino) AS [Pedidos UK] FROM Pedidos WHERE PasDeDestino = 'UK';

42

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

9.3.3. MNIMO e MXIMO


Retornam o mnimo ou o mximo de um conjunto de valores contido em um campo especificado em uma consulta. Sintaxe: Max(expr) Min(expr)

SELECT Min(Frete) AS [Frete Baixo], Max(Frete)AS [Frete Alto] FROM Pedidos WHERE PasDeDestino = 'UK';

9.3.4 SOMA
Retorna a soma de um conjunto de valores contido em um campo especificado em uma consulta. Sintaxe: Sum(expr)

SELECT Sum(PreoUnitrio*Quantidade) AS [Total de Vendas UK] FROM Pedidos INNER JOIN [Detalhes do Pedido] ON Pedidos.NmeroDoPedido = [Detalhes do Pedido].NmeroDoPedido WHERE (PasDeDestino = 'UK');

10. TCNICAS DE PESQUISA DE DADOS


O Objeto de Acesso a Dados (DAO) permite que voc manipule a estrutura do seu banco de dados e os dados nele contidos atravs dos objetos Recordset. A maioria das propriedades que podem ser definidas como objetos DAO so definidas pelo mecanismo de banco de dados Microsoft Jet 3.5. A maneira mais fcil e rpida de se fazer isso criar variveis de objeto que representem os diferentes objetos com os quais voc precisa trabalhar e referir-se elas no seu cdigo. Por exemplo, o cdigo a seguir cria um novo objeto TableDef (tabela) e define sua propriedade Name com o nome da tabela: Dim dbs As Database, tdf As TableDef Set dbs = CurrentDb Set tdf = dbs.CreateTableDef tdf.Name = "Contatos" Voc pode utilizar a propriedade RecordsetClone para referir-se ao objeto Recordset de um formulrio, especificado pela propriedade RecordSource do formulrio. O RecordsetClone uma cpia da consulta ou tabela base especificada pela propriedade RecordSource do formulrio. Se um formulrio estiver baseado em uma consulta, por exemplo, referir-se propriedade RecordsetClone equivale a criar um clone de um objeto Recordset utilizando a mesma consulta. Voc deve utilizar esta propriedade para navegar ou manipular os registros de um formulrio independente do prprio formulrio.

43

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Voc pode, por exemplo, utilizar a propriedade RecordsetClone quando desejar utilizar um mtodo, tal como o mtodo FindFirst, que no pode ser utilizado com formulrios. Quando um novo objeto Recordset aberto, o seu primeiro registro o registro atual. Ao utilizar um dos mtodos Find ou Move para tornar atual qualquer outro registro do Recordset, voc deve sincronizar o registro atual do objeto Recordset com o registro atual do formulrio atribuindo o valor da propriedade DAO Bookmark propriedade Bookmark do formulrio. Voc pode utilizar a propriedade RecordCount para contar o nmero de registros em um objeto Recordset. O exemplo a seguir mostra como voc pode combinar a propriedade RecordCount e a propriedade RecordsetClone para contar os registros em um formulrio: Forms!Pedidos.RecordsetClone.MoveLast MsgBox "Este formulrio contm " _ & Forms!Pedidos.RecordsetClone.RecordCount _ & " registros.", vbInformation, "Quantidade de Registros" O prximo exemplo utiliza a propriedade RecordsetClone e o objeto Recordset para sincronizar o registro de um conjunto de registros com o registro atual do formulrio. Quando o nome de uma empresa selecionado a partir de uma caixa de combinao, o mtodo FindFirst utilizado para localizar o registro dessa empresa e a propriedade DAO Bookmark do objeto Recordset atribuda propriedade Bookmark do formulrio fazendo com que este exiba o registro encontrado. Sub Cod_Empresa_AfterUpdate() Dim rst As Recordset Dim strLocalizar As String Set rst = Me.RecordsetClone strLocalizar = Str(Me!Cod_Empresa) rst.FindFirst " Cod_Empresa = " & strLocalizar If rst.NoMatch Then MsgBox "Esta empresa no foi localizada. Tente outro cdigo." Else Me.Bookmark = rst.Bookmark End If rst.Close End Sub

44

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

10.1. MTODO FIND


Localizam o primeiro registro, o ltimo registro, o registro anterior ou o prximo registro em um objeto Recordset tipo dynaset ou snapshot que satisfaa aos critrios especificados e torna esse registro o registro. Sintaxe: Um String usado para localizar o registro. como a clusula WHERE em uma instruo SQL, mas sem a palavra WHERE.

conjuntoderegistros.{FindFirst | FindLast | FindNext | FindPrevious} critrios Uma varivel de objeto que representa um objeto Recordset tipo dynaset ou snapshot existente. Se voc quiser incluir todos os registros na sua pesquisa - no apenas os que atendam a uma condio especfica - use o mtodo Move para se mover de registro para registro. Para localizar o registro em um Recordset tipo table, use o mtodo Seek. Se um registro que satisfaa aos critrios no for localizado, o ponteiro do registro atual ser desconhecido e a propriedade NoMatch definida como True. Se conjuntoderegistros contiver mais de um registro que satisfaa aos critrios, FindFirst localizar a primeira ocorrncia, FindNext localizar a prxima ocorrncia e assim por diante. Cada um dos mtodos Find localiza o registro, ou seja: FindFirst Encontra o primeiro registro; FindLast Encontra o ltimo registro; FindNext Encontra o prximo registro; FindPrevious Encontra o registro anterior. Sempre verifique o valor da propriedade NoMatch para determinar se a operao Find encontrou o registro desejado, se sim esta propriedade ser False. Se falhar, ela ser True e o registro atual no ser mostrado. Nesse caso, voc dever posicionar o ponteiro do registro atual de volta a um registro vlido.

45

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

O exemplo a seguir cria um objeto Recordset do tipo dynaset e, ento, utiliza o mtodo FindFirst para localizar o primeiro registro que satisfaz o critrio especificado. Em seguida, o procedimento localiza os demais registros que satisfazem o critrio. Sub LocalizarRegistro() Dim dbs As Database, rst As Recordset Dim strCritrio As String ' Retorna referncia ao banco de dados atual. Set dbs = CurrentDb ' Define critrio de localizao. strCritrio = "[PasDeDestino] = 'Reino Unido' And " _ & "[DataDoPedido] >= #01/01/2001#" ' Cria um objeto Recordset do tipo dynaset com base na tabela Pedidos. Set rst = dbs.OpenRecordset("Pedidos", dbOpenDynaset) ' Localiza o primeiro registro coincidente. rst.FindFirst strCritrio ' Verifica se o registro foi localizado. If rst.NoMatch Then MsgBox "Nenhum registro foi localizado." Else ' Localiza outros registros coincidentes. Do Until rst.NoMatch Debug.Print rst!PasDeDestino; " "; rst!DataDoPedido rst.FindNext strCritrio Loop End If rst.Close Set dbs = Nothing End Sub Propriedade Bookmark Define ou retorna um indicador que identifica com exclusividade o registro atual em um objeto Recordset. Quando voc cria ou abre um objeto Recordset, cada um de seus registros j possui um indicador exclusivo. Voc pode salvar o indicador do registro atual atribuindo o valor da propriedade Bookmark a uma varivel. Para retornar rapidamente a esse registro a qualquer momento depois de se mover para um registro diferente, defina a propriedade Bookmark do objeto Recordset com o valor daquela varivel. Para criar um indicador de um registro diferente do registro atual, mova para o registro desejado e atribua o valor da propriedade Bookmark a uma varivel String que identifique o registro. Se voc usar o mtodo Clone para criar uma cpia de um objeto Recordset, as configuraes da propriedade Bookmark do original e do objeto Recordset duplicado sero idnticas e podero ser utilizadas a qualquer instante. O valor da propriedade Bookmark no o mesmo que o nmero de um registro.

46

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

A seguir um exemplo onde inserimos uma parte do nome do contato a ser encontrado. Se o nome for encontrado, a propriedade Bookmark do formulrio ser definida com a propriedade Bookmark do objeto Recordset, o que move o registro atual do formulrio para o nome encontrado. Private Sub cmdLocalizarNomeDoContato_Click() Dim rst As Recordset, strCritrio As String strCritrio = "[NomeDoContato] Like '*" & InputBox("Digite algumas das & "primeiras letras do nome a ser localizado") & "*'" Set rst = Me.RecordsetClone rst.FindFirst strCritrio If rst.NoMatch Then MsgBox "Nenhum contato foi encontrado." Else Me.Bookmark = rst.Bookmark End If End Sub

"_

10.2. MTODO SEEK


Localiza o registro em um objeto Recordset tipo table indexado que satisfaa os critrios especificados para o ndice atual e faz dele o registro atual (somente espaos de trabalho do Microsoft Jet). Sintaxe conjuntoderegistros.Seek comparao, chave1, chave2...chave13 A sintaxe do mtodo Seek possui as seguintes partes: Parte Descrio conjuntoderegistros Uma varivel de objeto que representa um objeto Recordset tipo table que possui um ndice definido como especificado pela propriedade Index do objeto Recordset. comparao Uma das seguintes expresses de seqncia: <, <=, =, >= ou >. chave1, chave2...chave13 Um ou mais valores que correspondem aos campos no ndice atual do objeto Recordset, como especificado pela configurao da sua propriedade Index. Voc pode usar at 13 argumentos chave. Comentrios Voc deve definir o ndice atual com a propriedade Index antes de usar Seek. Se o ndice identificar um campo chave no-exclusivo, Seek localizar o primeiro registro que satisfizer os critrios. O mtodo Seek pesquisa pelos campos-chave especificados e localiza o primeiro registro que satisfaz os critrios especificados por comparao e chave1. Uma vez encontrado, ele torna esse registro no registro atual e define a propriedade NoMatch como False. Se o mtodo Seek no conseguir localizar uma correspondncia, a propriedade NoMatch ser definida como True e o registro atual ficar indefinido.

47

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Se comparao for igual a (=), maior ou igual a (>=), ou maior que (>), Seek comear no incio do ndice e pesquisar para frente. Se comparao for menor que (<) ou menor ou igual a (<=), Seek comear no final do ndice e pesquisar para trs. Entretanto, se houver alguma entrada de ndice duplicada no final do ndice, Seek comear em uma entrada arbitrria entre as duplicatas e pesquisar para trs. Voc deve especificar valores para todos os campos definidos no ndice. Se voc utilizar Seek com um ndice de vrias colunas e no especificar um valor de comparao para cada campo no ndice, no poder utilizar o operador igual a (=) na comparao. Isso porque alguns dos campos dos critrios (chave2, chave3, etc.). adotaro Null como padro, o que provavelmente no ter correspondncia. Portanto, o operador igual a (=) s operar corretamente se voc tiver um registro que seja todo Null, exceto a chave que voc estiver procurando. Recomenda-se que voc utilize o operador maior ou igual a (>=) em seu lugar. O argumento chave1 deve ser do mesmo tipo de dados do campo do campo correspondente no ndice atual. Por exemplo, se o ndice atual fizer referncia a um campo numrico (como Cdigo Do Funcionrio), chave1 deve ser numrico. Da mesma forma, se o ndice atual fizer referncia a um campo Texto (como Sobrenome), chave1 dever ser uma seqncia. No necessrio que haja um registro atual quando voc utilizar Seek. Voc pode utilizar a coleo Indexes para enumerar os ndices existentes. Para localizar um registro em um Recordset tipo dynaset ou snapshot que corresponda a uma condio especfica que no esteja coberta pelos ndices existentes, use os mtodos Find. Para incluir todos os registros, e no apenas os que correspondam a uma condio especfica, use os mtodos Move para mover de registro para registro. Voc no pode usar o mtodo Seek em uma tabela vinculada, pois as tabelas vinculadas no podem ser abertas como objetos Recordset tipo table. Porm, se voc usar o mtodo OpenDatabase para abrir diretamente um banco de dados ISAM instalvel (no-ODBC), poder usar Seek nas tabelas desse banco de dados. Em um espao de trabalho ODBCDirect, os mtodos Find e Seek no esto disponveis em nenhum tipo de objeto Recordset, pois a execuo de Find ou Seek atravs de uma conexo ODBC no muito eficiente em uma rede. Em vez disso, voc deve projetar a consulta (ou seja, utilizar o argumento origem para o mtodo OpenRecordset) com uma clusula WHERE adequada que restrinja os registros retornados apenas queles que correspondam aos critrios que voc utilizaria em Find ou Seek.

48

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

O exemplo a seguir cria um novo objeto Index em uma tabela Funcionrios. O novo ndice consiste em dois campos, Sobrenome e Nome. Em seguida, o procedimento utiliza o mtodo Seek para localizar um registro especfico. Sub Novondice() Dim dbs As Database, tdf As TableDef, idx As Index Dim fldSobrenome As Field, fldNome As Field, rst As Recordset ' Retorna referncia ao banco de dados atual. Set dbs = CurrentDb ' Retorna referncia tabela Funcionrios. Set tdf = dbs.TableDefs!Funcionrios ' Retorna o objeto Index que aponta para o novo ndice. Set idx = tdf.CreateIndex("NomeCompleto") ' Cria e acrescenta campos de ndice. Set fldSobrenome = idx.CreateField("Sobrenome", dbText) Set fldNome = idx.CreateField("Nome", dbText) idx.Fields.Append fldSobrenome idx.Fields.Append fldNome ' Acrescenta objeto Index. tdf.Indexes.Append idx tdf.Indexes.Refresh ' Abre objeto Recordset do tipo table. Set rst = dbs.OpenRecordset("Funcionrios") ' Faz do novo ndice o ndice atual. rst.Index = idx.Name ' Especifica registro a ser localizado. rst.Seek "=", "Fuller", "Andrew" If rst.NoMatch Then Debug.Print "A pesquisa no foi bem-sucedida!" Else Debug.Print "A pesquisa foi bem-sucedida." End If rst.Close Set dbs = Nothing End Sub

49

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

11. INTEGRANDO COM O OFFICE 2000


O Visual Basic for Applications (VBA) a linguagem que lhe permite trabalhar com objetos no Office. O propsito da automao ActiveX permitir que um desenvolvedor use a funcionalidade de um aplicativo a partir de outro aplicativo. O pacote do Microsoft Office contm muitas funcionalidades. Por exemplo, se voc precisar permitir que um usurio crie uma mala-direta, por que tentar desenvolver sua prpria funo de mala-direta quando os processadores de texto j fazem isso? Da mesma forma, se voc precisa rodar um clculo financeiro como a amortizao de uma dvida, por que escrever outra funo quando esse recurso j existe dentro de outro aplicativo? Todas as ferramentas esto disponveis para essa integrao, de modo que, em muitos casos, o usurio no precisa saber que o Excel, por exemplo, calculou os juros da dvida por meio da automao ActiveX em vez de algum algoritmo dentro do prprio VBA. Como o DAO (Data Access Objects) uma hierarquia de objetos com suas prprias propriedades e mtodos, antes de qualquer um dos objetos no Office97 poderem ser reconhecidos pelos seus aplicativos, voc precisa acrescentar as referncias apropriadas ao seu projeto do banco de dados. Voc pode fazer isso selecionando ou criando um mdulo e no modo estrutura selecionar Ferramentas | Referncias... no menu do Access, para depois escolher as referncias de objeto necessrias, como mostrado na figura abaixo.

Neste caso, esto selecionadas as referncias do Access, do Word, do Excel e do prprio DAO, alm da biblioteca do VBA.

Figura 21 - Referncias Utilizadas no Aplicativo

50

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

11.1 FUNES CREATEOBJECT E GETOBJECT


O CreateObject cria uma referncia para um objeto ActiveX enquanto GetObject retorna uma referncia a um objeto ActiveX a partir de um arquivo. Voc precisa usar a funo CreateObject quando no h nenhuma ocorrncia atual do objeto j instanciada. Se CreateObjet for usada quando houver uma ocorrncia do objeto instanciado, uma nova ocorrncia criada. No entanto, se um objeto for registrado como objeto de uma nica ocorrncia, ento, independentemente de quantas vezes CreateObject seja chamada, somente uma ocorrncia do objeto criada. Comparando, GetObject necessria quando uma ocorrncia de um objeto j existe ou se voc quiser criar um objeto com um arquivo j carregado. Por exemplo, d uma olhada nos seguintes exemplos de cdigo. Aqui, CreateObject usada para criar uma nova instncia do Word: Dim oleWord As Word.Application Set oleWord = CreateObject("Word.Application") Se quisermos criar o mesmo objeto baseado no objeto associado com um determinado arquivo, poderamos usar GetObject. Por exemplo: Dim oleWord As Object Set oleWord = GetObject("c:\temp\RotinasAccess.doc") Quando voc no precisar mais da referncia do objeto, certifique-se de limpar a memria liberando a referncia ao objeto, j que os objetos do Office so grandes consumidores de memria. Set oleWord = Nothing No exemplo anterior, a varivel que conter o objeto foi declarada como tipo Object, no como tipo Word.Application. O VBA sabe qual objeto criar porque as extenses de arquivo esto registradas no Windows em HKEY_CLASSES_ROOT. Por isso, a extenso .DOC significa Microsoft Word e .XLS indica o Excel.

51

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

11.2. INSTANCIANDO O MICROSOFT WORD


O Microsoft Word o processador de texto mais popular no mercado atualmente. O Word tem um complexo modelo de objeto, em que os trs componentes principais do modelo so: Documents, Windows e Selection.

Microsoft WORD Documents Windows Selection O modelo de objeto do Word permite-lhe isolar partes muito especficas de um documento do Word. Dim oleWord As Word.Application Dim docDocument As Document Set oleWord = CreateObject("Word.Application") OleWord.Visible = True Set docDocument = oleWord.Documents._ Open("c:\senac\exerc01.doc") MsgBox docDocument.Paragraphs(3) MsgBox docDocument.Sentences(3) MsgBox docDocument.Words(15) MsgBox docDocument.Characters(35) Set oleWord = Nothing ou ento voc pode combinar essas referncias dos objetos, como segue: MsgBox docDocument.Paragraphs(3).Sentences(3).Word(5) Este comando ir retornar a 5 palavra da 3 frase do 3 pargrafo.

52

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

11.3. INSTANCIANDO O MICROSOFT EXCEL


O Excel um aplicativo de planilha eletrnica que contm dentro de si uma vasta coleo de funes matemticas, financeiras e estatsticas. O modelo do objeto Excel bem complexo, como pode ver no esquema abaixo. APPLICATION Workbooks WorkSheets Charts Document Properties VBProject CustomViews Command Bars PivotCaches Styles Borders Font Interior Windows Panels Names Routing Slip Mailer Por exemplo, um aplicativo de investimento precisaria calcular uma frmula para apurar um valor futuro. Clculo do valor futuro Dim oleExcel As Excel.Application Dim oleWorkBook As Excel.Workbook Dim oleWorkSheet As Excel.Worksheet Set oleExcel = CreateObject("Excel.Application") ' Cria uma referncia para um novo objeto WorkBook ' ao adicion-lo coleo WorkBook. Set oleWorkBook = oleExcel.Workbooks.Add ' Cria uma referncia a um novo objeto WorkSheet ao ' adicion-lo coleo WorkSheet. Set oleWorkSheet = oleExcel.Worksheets.Add ' Atribui alguns valores padres s caixas de texto. txtDepsitoInic = 2500 53 Add-Int AutoCorrect Assistant DBug Dialogs WorksheetFunction RecentFiles FileSearch VBE ODBCErrors

ACCESS 2000 PROGRAMAO EM VBA txtJurosAnuais = 8 txtDepsitoMensal = 400 ' Escreve os valores em clulas individuais na planilha. ' Por exemplo, a referncia Cells(2, 1) indica a segunda ' linha, primeira coluna. oleWorkSheet.Cells(1, 1) = Val(txtDepsitoInic) * -1 oleWorkSheet.Cells(2, 1) = Val(txtJurosAnuais) / 12 oleWorkSheet.Cells(3, 1) = Val(txtDepsitoMensal) * -1 ' Escreve o valor futuro da frmula do Excel em uma clula. ' Os valores so escritos por meio de VBA exatamente como se ' voc os digitasse diretamente no Excel. oleWorkSheet.Cells(4, 1).Formula = "=FV(A2%, 360, A3, A1, 1)" ' Retorna o resultado para a caixa de texto. txtResult = oleWorkSheet.Cells(4, 1) Set oleExcel = Nothing Set oleWorkBook = Nothing Set oleWorkSheet = Nothing

SENAC-RS

Suponha que voc queira exportar um Recordset para uma planilha do Excel, esse exemplo procura demonstrar como escrever nas clulas de uma planilha. Dim Dim Dim Dim Dim Dim Dim Dim oleExcel As Excel.Application oleWorkBook As Excel.Workbook oleWorkSheet As Excel.Worksheet dbDadosPrinc As Database snpPais As Recordset strPath as String x As Integer y As Integer

x=1 Set oleExcel = CreateObject("Excel.Application") Set oleWorkBook = oleExcel.Workbooks.Add Set oleWorkSheet = oleExcel.Worksheets.Add strPath = "C:\Arquivos de Programas\Microsoft Office\Office\Exemplos\" Set dbDadosPrinc = OpenDatabase(strPath & "Northwind.mdb") Set snpPais = dbDadosPrinc.OpenRecordset _ ("SELECT * FROM pais", dbOpenSnapshot, dbForwardOnly) Do While Not snpPais.EOF For y = 1 To snpPais.Fields.Count oleWorkSheet.Cells(x, y) = snpPais.Fields(y - 1) Next y x=x+1 snpPais.MoveNext Loop oleWorkSheet.SaveAs "c:\temp\pais.xls" snpPais.Close Set snpPais = Nothing Set oleExcel = Nothing Set oleWorkBook = Nothing Set oleWorkSheet = Nothing 54

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

11.4. INSTANCIANDO O MICROSOFT ACCESS


De especial interesse para os desenvolvedores de bancos de dados, o Microsoft Access tambm habilitado para a automao ActiveX. O modelo de objetos do Access inicia com um objeto Application. APPLICATION References Forms Controls Reports Modules Screen Docmd Controls

Algumas funcionalidades mais teis relacionadas com bancos de dados o objeto DoCmd e que envolve o uso de relatrios do Access. O Access tem assistentes de relatrios permitindo que os usurios criem relatrios com facilidade. Usando a automao ActiveX, voc pode agora dar aos usurios acesso aos relatrios que eles criaram atravs do mtodo OpenReport. Dim oleAccess As Access.Application Set oleAccess = CreateObject("Access.Application") strPath = "C:\Arquivos de Programas\Microsoft Office\Office\Exemplos\" oleAccess.OpenCurrentDatabase strPath & "Northwind.mdb" oleAccess.DoCmd.OpenReport "Listagem de Pedidos", acViewPreview oleAccess.Visible = True Outra aplicao para o objeto DoCmd permitir que o Access faa a maior parte da exportao de dados para voc. Nem o Visual Basic nem DAO oferecem uma capacidade inerente de transferir dados para/de uma tabela. Os tipos possveis de sada para o mtodo OutPutTo incluem as seguintes constantes: AcFormatActiveXServer AcFormatHTML AcFormatIIS AcFormatRTF AcFormatTXT AcFormatXLS

Enviando uma tabela para uma planilha Dim oleAccess As Access.Application Set oleAccess = CreateObject("Access.Application") strPath = "C:\Arquivos de Programas\Microsoft Office\Office\Exemplos\" oleAccess.OpenCurrentDatabase strPath & "Northwind.mdb" oleAccess.DoCmd.OutputTo acOutputTable, "Pas", _ acFormatXLS, "c:\temp\Pais.xls", True

55

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

O mtodo TransferDatabase pode ser usado, entre outras coisas, para fazer cpias de backup das tabelas dentro de um banco de dados. Por exemplo, o cdigo a seguir faz a uma cpia da tabela Aluno chamada CopiaAluno. Dim oleAccess As Access.Application Set oleAccess = CreateObject("Access.Application") strPath = "C:\Arquivos de Programas\Microsoft Office\Office\Exemplos\" oleAccess.OpenCurrentDatabase strPath & "Northwind.mdb" oleAccess.DoCmd.TransferDatabase acExport, "Microsoft Access", _ "c:\temp\escola.mdb", acTable, _ "Produtos", "tblProdutos ", False O mtodo TransferSpreadSheet permite-lhe importar ou exportar dados entre o banco de dados atual do Access e um arquivo de planilha. Voc tambm pode vincular planilhas do Excel ao arquivo MDB atual. Com uma planilha vinculada, voc pode visualizar e editar os dados da planilha com o Access enquanto ainda permite acesso completo aos dados do seu programa de planilha do Excel. Permitem os seguintes tipos de transferncia: AcSpreadSheetTypeExcel3 AcSpreadSheetTypeExcel4 AcSpreadSheetTypeExcel5 AcSpreadSheetTypeExcel7 AcSpreadSheetTypeExcel97 AcSpreadSheetTypeLotusWK1 AcSpreadSheetTypeLotusWK3 AcSpreadSheetTypeLotusWK4

No exemplo mostrado a seguir, o contedo da tabela Clientes est sendo exportado para uma planilha do Excel. O valor True na lista de parmetros indica que a primeira linha na planilha deve conter os nomes das colunas. Dim oleAccess As Access.Application Set oleAccess = CreateObject("Access.Application") strPath = "C:\Arquivos de Programas\Microsoft Office\Office\Exemplos\" oleAccess.OpenCurrentDatabase strPath & "Northwind.mdb" oleAccess.DoCmd.TransferSpreadsheet acExport, _ acSpreadSheetTypeExcel97, "Clientes", "c:\temp\Clientes.xls", True O mtodo TransferText permite importar, vincular ou exportar dados de arquivos de texto. Voc tambm pode vincular os dados em um arquivo de texto com o banco de dados atual do Access atravs de diferentes delimitaes para os dados.

56

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

12. EXERCCIOS PROPOSTOS


Todos os itens abaixo devem ser feitos no aplicativo entregue em sala de aula de nome AccessVBA.mdb. 1. Criar um esquema de segurana para o aplicativo usando a coleo de grupos e usurios do arquivo de grupo de trabalho e criar um formulrio que permita a troca de senha do usurio. Deve-se criar formulrios para cadastrar os grupos e usurios e tambm para associar os usurios aos grupos, alm de definir as permisses de acesso destes ao sistema. 2. Utilizar o objeto Docmd para encontrar registros, para abrir formulrios e abrir relatrios, para executar os aplicativos - calculadora, word, excel e o explorer, executar uma importao de dados de maneira "largura fixa" para que se possa recepcionar os registros, atravs de disquete, para acrescent-los ao banco de dados. 3. Criar uma rotina que execute um backup de segurana dos dados do seu sistema. Para isso precisamos armazenar em disquete somente as tabelas do banco. 4. Criar uma barra de comandos padro para utilizao em todos os formulrios do sistema. Esta barra deve conter boto de comando para pesquisar, adicionar, alterar e excluir os registros, alm de permitir a impresso dos dados da tela e fechar o formulrio. Criar uma rotina para habilitar/desabilitar os botes conforme o contexto. 5. Criar procedimentos necessrios para manipulao de registros do DAO, assim como inserir, alterar e excluir registros, pesquisar determinado registro e navegar entre os mesmos. 6. Criar um formulrio de Clientes com dois subformulrios, um com todos os pedidos e outro com todos os produtos comprados naquele pedido, inserir um campo calculado no rodap deste subformulrio com a soma total de preo unitrio. 7. Criar formulrios encadeados e passando parmetros, ou seja, adicione no formulrio de Clientes um controle de grupo de opo onde tenha botes de "Abrir Pedidos deste ms", "Abrir Pedidos deste ano", "Abrir Pedidos at hoje", a partir da tem-se que abrir o outro formulrio exibindo os registros de acordo com o selecionado no formulrio anterior. 8. Criar uma rotina para desabilitar/habilitar a tecla SHIFT, j que esta tecla permite que o usurio aborte os procedimentos de inicializao do aplicativo, liberando-o no seu modo de estrutura. Tem-se que ter cuidado, pois se voc desabilitar a tecla shift em seu aplicativo nem voc poder abri o BD no modo estrutura. 9. Criar um relatrio com totalizao por pgina. Temos que criar uma varivel para zerar o acumulador e depois devemos, a cada registro impresso, incrementar o valor armazenado no acumulador. 10. Criar um relatrio de impresso de etiquetas e no desperdiar etiquetas deixadas em branco, para isso precisamos saber quantas etiquetas devemos pular para na prxima imprimir. 57

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

11. Executar filtro por formulrio para exibir todos os clientes que realizaram compras no Brasil, com a possibilidade de se remover o filtro aplicado. Criar um boto para exibir o relatrio de todos as compras realizadas pelo cliente que voc estiver posicionado. 12. Utilizar cdigo para testar os diversos eventos de um objeto, tais como: antes de inserir, antes de atualizar, ao sair do controle, ao fechar, no cronmetro, ao clicar, e outros. 13. Utilizao do objeto Calendrio para organizar as datas de entrega de determinados produtos de determinado perodo: por data atual, por ms, e at aquela data.

58

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Anexo 1
Erros Interceptveis do VBA (Microsoft JET + Objeto DAO) Os erros interceptveis do mecanismo de banco de dados Microsoft Jet podem ocorrer enquanto um aplicativo estiver sendo executado, seja dentro do ambiente de desenvolvimento ou como um arquivo executvel autnomo. Voc pode testar e responder a erros ocorridos utilizando o objeto Error. Cdigo Mensagem 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2442 2443 2445 2446 2447 2448 3000 3001 3002 3003 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 Erro de sintaxe em nmero. Erro de sintaxe em data. Erro de sintaxe em seqncia. Utilizao invlida de '.', '!' ou '()'. Nome desconhecido. Nome de funo desconhecido. Funo no-disponvel em expresses. Objeto sem valor. Argumentos invlidos utilizados com a funo de domnio. Operador In sem (). Operador Between sem And. Erro de sintaxe (operador ausente). Erro de sintaxe (vrgula). Erro de sintaxe. Erro de sintaxe (operador ausente). ) extra. ), ] ou item ausentes. Utilizao invlida de barras verticais. Erro de sintaxe. Nmero incorreto de argumentos utilizados com a funo. Funo IIF sem (). Utilizao invlida de parnteses. Utilizao invlida do operador Is. Expresso muito complexa. Memria insuficiente durante o clculo. Utilizao invlida de '.', '!' ou '()'. No possvel definir o valor. Erro <Item> reservado; no existe mensagem para este erro. Argumento invlido. No foi possvel iniciar a sesso. No foi possvel iniciar a transao; j existem muitas transaes aninhadas. <Nome do banco de dados> no um nome de banco de dados vlido. O banco de dados <nome> est bloqueado exclusivamente. No possvel abrir o banco de dados da biblioteca <nome>. A tabela <nome> j est aberta exclusivamente por outro usurio ou j est aberta atravs da interface do usurio e no pode ser manipulada programaticamente. Voc tentou bloquear a tabela <tabela> enquanto a abria, mas ela no pode ser bloqueada porque est em uso no momento. Aguarde um instante e, em seguida, tente a operao novamente. A tabela <nome> j existe. O mecanismo de banco de dados Microsoft Jet no pde encontrar o objeto <nome>. Certifique-se de que o objeto existe e que voc digitou o seu nome e o nome do caminho corretamente. O objeto <nome> j existe. No foi possvel renomear o arquivo ISAM instalvel. No possvel abrir mais tabelas.

59

ACCESS 2000 PROGRAMAO EM VBA 3015 3016 3017 3018 3019 3020 3021 3022

SENAC-RS

3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3036 3037 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062

<Nome do ndice> no um ndice nesta tabela. Consulte a coleo Indexes do objeto TableDef para determinar os nomes de ndice vlidos. O campo no caber no registro. O tamanho do campo grande demais. No foi possvel encontrar o campo <nome>. Operao invlida sem um ndice atual. Voc tentou chamar Update ou CancelUpdate ou tentou atualizar um Field em um conjunto de registros sem chamar primeiro AddNew ou Edit. Sem registro atual. As alteraes que voc solicitou tabela no foram bem-sucedidas porque criariam valores duplicados no ndice, na chave primria ou na relao. Altere os dados no campo ou campos que contm dados duplicados, remova o ndice ou redefina-o para permitir entradas duplicadas e tente novamente. AddNew ou Edit j utilizado. No foi possvel encontrar <nome>. No possvel abrir mais arquivos. Espao insuficiente em disco. No foi possvel atualizar. O banco de dados ou objeto somente leitura. No possvel iniciar seu aplicativo. O arquivo de informaes do grupo de trabalho est ausente ou aberto exclusivamente por outro usurio. Nome de conta ou senha invlidos. <Nome da conta> no um nome de conta vlido. Senha invlida. No possvel executar esta operao. Voc no tem as permisses necessrias para utilizar o objeto <nome>. Faa o seu administrador do sistema ou a pessoa que criou este objeto estabelecer as permisses apropriadas para voc. Voc tentou aceitar ou cancelar uma transao sem utilizar primeiro BeginTrans. O banco de dados alcanou o tamanho mximo. No possvel abrir mais tabelas ou consultas. No foi possvel criar o ndice; muitos ndices j definidos. Erro de E/S em disco durante a leitura. No possvel abrir um banco de dados criado com uma verso anterior do seu aplicativo. Sem identificadores de arquivo do MS-DOS. Erro de disco ou rede. <Caminho> no um caminho vlido. Certifique-se de que o nome do caminho est digitado corretamente e que voc est conectado ao servidor no qual se encontra o arquivo. No foi possvel utilizar <nome>; o arquivo j est em utilizao. No foi possvel salvar; atualmente bloqueado por outro usurio. O registro grande demais. No possvel abrir mais bancos de dados. No possvel abrir o banco de dados <nome>. Ele pode no ser um banco de dados que o seu aplicativo reconhea ou o arquivo pode estar corrompido. O mecanismo de banco de dados Microsoft Jet no pode abrir o arquivo <nome>. Ele j est aberto exclusivamente por outro usurio ou voc precisa de permisso para visualizar seus dados. O nmero de bloqueios de compartilhamento de arquivos do MS-DOS foi excedido. Voc precisa aumentar o nmero de bloqueios instalados com Share.exe. Tarefas cliente em excesso. Campos Memorando ou Objeto OLE em excesso. Nome de campo invlido. No foi possvel reparar este banco de dados. Operao no suportada em tabelas vinculadas. O ndice ou chave primria no pode conter um valor Null. Operao cancelada pelo usurio. Tipo de dados incorreto para o parmetro <parmetro>. Muito poucos parmetros. Eram esperados <nmero>. Alias de sada <nome> duplicado.

60

ACCESS 2000 PROGRAMAO EM VBA 3063 3064 3065 3066 3067 3068 3069 3070 3071 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112

SENAC-RS

Destino de sada <nome> duplicado. No possvel abrir a consulta ao <nome>. No possvel executar uma consulta seleo. A consulta deve ter pelo menos um campo de destino. A entrada da consulta deve conter pelo menos uma tabela ou consulta. Nome de alias invlido. A consulta ao <nome> no pode ser utilizada como origem da linha. O mecanismo de banco de dados Microsoft Jet no reconhece <nome> como um nome de campo ou expresso vlida. Esta expresso est digitada incorretamente ou complexa demais para ser avaliada. Por exemplo, uma expresso numrica pode conter muitos elementos complicados. Tente simplificar a expresso atribuindo partes da expresso a variveis. A operao deve utilizar uma consulta atualizvel. No possvel repetir o nome da tabela <nome> na clusula FROM. <Mensagem> na expresso de consulta <expresso>. <Nome> na expresso de critrio. <Mensagem> na expresso. O mecanismo de banco de dados Microsoft Jet no consegue encontrar a tabela de entrada ou a consulta <nome>. Certifique-se de que ela existe e que o seu nome est digitado corretamente. O campo especificado <campo> poderia se referir a mais de uma tabela listada na clusula FROM da sua instruo SQL. A tabela associada <nome> no est listada na clusula FROM. No possvel associar mais de uma tabela com o mesmo nome <nome>. A operao JOIN <operao> refere-se a um campo que no est em uma das tabelas associadas. No possvel utilizar consulta de relatrio interno. No possvel inserir dados com a consulta ao. Funo <nome> indefinida na expresso. No foi possvel excluir das tabelas especificadas. Expresses em excesso na clusula GROUP BY. Expresses em excesso na clusula ORDER BY. Expresses em excesso na sada DISTINCT. A tabela resultante no pode ter mais de um campo AutoNumerao. No possvel utilizar a clusula HAVING na instruo TRANSFORM. A clusula ORDER BY <clusula> entra em conflito com DISTINCT. A clusula ORDER BY <clusula> entra em conflito com a clusula GROUP BY. No possvel ter uma funo agregada na expresso <expresso>. No possvel ter uma funo agregada na clusula WHERE <clusula>. No possvel ter uma funo agregada na clusula ORDER BY <clusula>. No possvel ter uma funo agregada na clusula GROUP BY <clusula>. No possvel ter uma funo agregada na operao JOIN <operao>. No possvel definir o campo <nome> na chave de associao como Null. O mecanismo de banco de dados Microsoft Jet no consegue encontrar um registro na tabela <nome> com campo(s) <nome> de correspondncia de chave. Referncia circular causada pela <referncia da consulta>. Referncia circular causada pelo alias <nome> na lista SELECT da definio da consulta. No possvel especificar mais de uma vez o <valor> do ttulo de colunas fixas em uma consulta de tabela de referncia cruzada. Nome do campo de destino ausente na instruo SELECT INTO <instruo>. Nome do campo de destino ausente na instruo UPDATE <instruo>. Registro(s) no pode(m) ser adicionado(s); sem permisso de insero no <nome>. Registro(s) no pode(m) ser editado(s); sem permisso de atualizao em <nome>. Registro(s) no pode(m) ser excludos, sem permisso de excluso em <nome>. No foi possvel ler definies; sem permisso de leitura de definies da tabela ou consulta <nome>. No foi possvel criar; sem permisso de modificao da estrutura da tabela ou consulta <nome>. Registro(s) no pode(m) ser lido(s); sem permisso de leitura em <nome>.

61

ACCESS 2000 PROGRAMAO EM VBA 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3138 3139 3140 3141 3143 3144 3145 3146 3151 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166

SENAC-RS

No possvel atualizar <nome do campo>; campo no atualizvel. No possvel incluir Memorando ou Objeto OLE quando forem selecionados valores exclusivos <instruo>. No possvel ter campos Memorando ou Objeto OLE no argumento agregado <instruo>. No possvel ter campos Memorando ou Objeto OLE no critrio <critrio> para a funo agregada. No possvel classificar em Memorando ou Objeto OLE <clusula>. No possvel associar em Memorando ou Objeto OLE <nome>. No possvel agrupar em Memorando ou Objeto OLE <clusula>. No possvel agrupar em campos selecionados com '*' <nome da tabela>. No possvel agrupar em campos selecionados com '*'. Voc tentou executar uma consulta que no inclui a expresso <nome> especificada como parte de uma funo agregada. No possvel utilizar '*' em consulta de tabela de referncia cruzada. No possvel obter a entrada pela consulta de relatrio interno <nome>. O mecanismo de banco de dados no consegue encontrar <nome>. Certifique-se de que um nome de parmetro ou alias vlido, que no inclui caracteres nem pontuao invlida e que o nome no grande demais. Colchetes invlidos no nome <nome>. A instruo INSERT INTO contm o seguinte nome de campo desconhecido: <nome do campo>. Certifique-se de que voc digitou o nome corretamente e tente a operao novamente. Especifique a tabela que contm os registros que deseja excluir. Instruo SQL invlida; era esperado 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE'. Erro de sintaxe na instruo DELETE. Erro de sintaxe na clusula FROM. Erro de sintaxe na clusula GROUP BY. Erro de sintaxe na clusula HAVING. Erro de sintaxe na instruo INSERT INTO. Erro de sintaxe na operao JOIN. A clusula LEVEL inclui uma palavra ou argumento reservado que est digitado incorretamente ou est ausente, ou a pontuao est incorreta. Erro de sintaxe na clusula ORDER BY. Erro de sintaxe na clusula PARAMETER. Erro de sintaxe na clusula PROCEDURE. A instruo SELECT inclui uma palavra ou argumento reservado ou um nome de argumento que est digitado incorretamente ou est ausente, ou a pontuao est incorreta. Erro de sintaxe na instruo TRANSFORM. Erro de sintaxe na instruo UPDATE. Erro de sintaxe na clusula WHERE. ODBC a chamada falhou. ODBC a conexo a <nome> falhou. ODBC no foi possvel encontrar DLL <nome>. ODBC a insero em uma tabela vinculada <tabela> falhou. ODBC a excluso em uma tabela vinculada <tabela> falhou. ODBC a atualizao em uma tabela vinculada <tabela> falhou. No foi possvel salvar o registro; bloqueado no momento por outro usurio. Indicador invlido. A tabela no est aberta. No foi possvel descriptografar o arquivo. Voc tentou atribuir o valor Null a uma varivel que no um tipo de dados Variant. O campo pequeno demais para aceitar a quantidade de dados que voc tentou adicionar. Tente inserir ou colar menos dados. O campo no pode ser atualizado porque outro usurio ou processo bloqueou o registro ou tabela correspondente. No foi possvel abrir o arquivo .inf. No possvel localizar o arquivo de memorando Xbase solicitado.

62

ACCESS 2000 PROGRAMAO EM VBA 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220

SENAC-RS

Registro excludo. Arquivo .inf invlido. O mecanismo de banco de dados Microsoft Jet no pde executar a instruo SQL porque ela contm um campo que possui um tipo de dados invlido. No foi possvel encontrar o ISAM instalvel. No foi possvel encontrar o caminho da rede ou o nome de usurio. No foi possvel abrir o Paradox.net. No foi possvel abrir a tabela 'MSysAccounts' no arquivo de informaes do grupo de trabalho. No foi possvel abrir a tabela 'MSysGroups' no arquivo de informaes do grupo de trabalho. A data est fora do intervalo ou est em um formato invlido. No foi possvel abrir o arquivo <nome>. Nome de tabela invlido. Encontrado fim de arquivo inesperado. No foi possvel gravar no arquivo <nome>. Intervalo invlido. Formato de arquivo invlido. Espao insuficiente no disco temporrio. No foi possvel executar a consulta; no foi possvel encontrar a tabela vinculada. SELECT INTO em um banco de dados remoto tentou produzir campos demais. No foi possvel salvar; atualmente bloqueado pelo usurio <nome> na mquina <nome>. No foi possvel ler; atualmente bloqueado pelo usurio <nome> na mquina <nome>. No foi possvel atualizar; atualmente bloqueado por outra sesso nesta mquina. Tabela <nome> bloqueada exclusivamente pelo usurio <nome> na mquina <nome>. Definidos campos em excesso. No possvel definir o campo mais de uma vez. No foi possvel encontrar a tabela de sada <nome>. O banco de dados <nome do banco de dados> j est em uso por outra pessoa ou processo. Quando o banco de dados estiver disponvel, tente a operao novamente. O mecanismo de banco de dados Microsoft Jet parou o processo porque voc e outro usurio esto tentando alterar os mesmos dados ao mesmo tempo. No foi possvel iniciar a sesso. J existem sesses em excesso ativas. No foi possvel encontrar referncia. O registro no pode ser excludo nem alterado porque a tabela <nome> inclui registros relacionados. Voc no pode adicionar nem alterar um registro porque um registro relacionado requerido na tabela <nome>. No foi possvel salvar; atualmente bloqueado por outro usurio. Subconsultas no podem ser utilizadas na expresso <expresso>. O banco de dados j existe. Ttulos de coluna da tabela de referncia cruzada <valor> em excesso. No possvel criar uma relao entre um campo e ele mesmo. Operao no suportada em uma tabela do Paradox sem chave primria. Configurao Deleted invlida na chave Xbase do Registro do Windows. A seqncia de conexo longa demais. O mecanismo de banco de dados no pde bloquear a tabela <nome> porque ela j est em uso por outra pessoa ou processo. No foi possvel bloquear a tabela <nome>; atualmente em uso pelo usurio <nome> na mquina <nome>. Configurao Date invlida na chave Xbase do Registro do Windows. Configurao Mark invlida na chave Xbase do Registro do Windows. Tarefas Btrieve em excesso. Parmetro <nome> especificado onde requerido um nome de tabela. Parmetro <nome> especificado onde requerido um nome de banco de dados. No foi possvel atualizar; atualmente bloqueado. Operao invlida. Seqncia de agrupamento incorreta.

63

ACCESS 2000 PROGRAMAO EM VBA 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3234 3235 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3254 3256 3257 3258

SENAC-RS

3259 3260 3261 3262 3263 3264 3265 3266. 3267 3268 3269 3270 3271 3272

Configuraes invlidas na chave Btrieve do Registro do Windows. A consulta no pode conter um parmetro Database. <Nome do parmetro> invlido porque longo demais ou contm caracteres invlidos. No possvel ler o dicionrio de dados do Btrieve. Encontrado um conflito de proteo de registro durante a execuo de uma operao Btrieve. Erros encontrados durante a utilizao da DLL do Btrieve. Configurao Century invlida na chave Xbase do Registro do Windows. Configurao CollatingSequence invlida na chave Paradox do Registro do Windows. Btrieve no foi possvel alterar o campo. Arquivo de proteo do Paradox desatualizado. ODBC o campo ficaria longo demais; dados truncados. ODBC no pde criar tabela. ODBC o tempo limite de consulta remota expirou. ODBC tipo de dados no suportado no servidor. ODBC dados fora do intervalo. Usurios ativos em excesso. Btrieve mecanismo Btrieve ausente. Btrieve sem recursos. Referncia invlida na instruo SELECT. Nenhum dos nomes de campo de importao corresponde aos campos na tabela acrescentada. No possvel importar planilha protegida por senha. No foi possvel analisar os nomes de campo da primeira linha da tabela de importao. Operao no suportada em transaes. ODBC a definio da tabela vinculada mudou. Configurao NetworkAccess invlida no Registro do Windows. Configurao PageTimeout invlida no Registro do Windows. No foi possvel construir chave. A operao no suportada para esse tipo de objeto. No possvel abrir um formulrio cuja consulta base contm uma funo definida pelo usurio que tenta definir ou obter a propriedade RecordsetClone do formulrio. ODBC No possvel bloquear todos os registros. Arquivo de ndice no encontrado. Erro de sintaxe na declarao WITH OWNERACCESS OPTION. A instruo SQL no poderia ser executada porque contm associaes externas ambguas. Para forar uma das associaes a ser executada primeiro, crie uma consulta separada que execute a primeira associao e, em seguida, inclua essa consulta na sua instruo SQL. Tipo de dados de campo invlido. No foi possvel atualizar; atualmente bloqueado pelo usurio <nome> na mquina <nome>. A tabela <nome> bloqueada exclusivamente pelo usurio <nome> na mquina <nome>. No foi possvel bloquear a tabela <nome>; atualmente em uso pelo usurio <nome> na mquina <nome>. Objeto Database invlido. Sem campo definido no possvel acrescentar TableDef nem Index. Item no encontrado nesta coleo. No possvel acrescentar um Field que j faa parte de uma coleo Fields. A propriedade somente pode ser definida quando o Field faz parte da coleo Fields de um objeto Recordset. No possvel definir esta propriedade uma vez que o objeto faz parte de uma coleo. No possvel acrescentar um Index que j faa parte de uma coleo Indexes. Propriedade no encontrada. Valor de propriedade invlido. O objeto no uma coleo.

64

ACCESS 2000 PROGRAMAO EM VBA 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316

SENAC-RS

Mtodo no aplicvel a este objeto. A tabela externa no est no formato esperado. Erro inesperado do driver de banco de dados externo <nmero do erro>. Referncia invlida a objeto de banco de dados. No possvel ter mais de 10 campos em um ndice. O mecanismo de banco de dados Microsoft Jet no foi inicializado. O mecanismo de banco de dados Microsoft Jet j foi inicializado. No possvel excluir um campo que faa parte de um ndice ou que seja necessrio ao sistema. No possvel excluir este ndice ou tabela. o ndice atual ou utilizado em uma relao. Operao no suportada em uma tabela que contm dados. J existe chave primria. J existe ndice. Definio de ndice invlida. O formato do arquivo de memorando no corresponde ao formato do banco de dados externo especificado. No possvel criar o ndice no campo fornecido. O ndice do Paradox no primrio. Erro de sintaxe na clusula CONSTRAINT. Erro de sintaxe na instruo CREATE TABLE. Erro de sintaxe na instruo CREATE INDEX. Erro de sintaxe na definio do campo. Erro de sintaxe na instruo ALTER TABLE. Erro de sintaxe na instruo DROP INDEX. Erro de sintaxe em DROP TABLE ou DROP INDEX. Expresso de associao no-suportada. No possvel importar tabela nem consulta. Nenhum registro encontrado ou todos os registros contm erros. H diversas tabelas com este nome. Especifique o proprietrio no formato proprietrio.tabela. Erro de conformidade com a especificao ODBC <mensagem>. Relate este erro ao profissional da rea de desenvolvimento do seu aplicativo. No possvel criar uma relao. No possvel executar esta operao; os recursos desta verso no esto disponveis em bancos de dados com formatos mais antigos. No possvel alterar um regra enquanto as regras desta tabela estiverem em uso. No possvel excluir este campo. Ele faz parte de uma ou mais relaes. Voc deve inserir um identificador pessoal (PID) que consista em no mnimo 4 e no mximo 20 caracteres e dgitos. Seqncia de conexo invlida na consulta passagem. Voc gravou uma subconsulta que pode retornar mais de um campo sem utilizar a palavra reservada EXISTS na clusula FROM da consulta principal. Altere a instruo SELECT da subconsulta para solicitar somente um campo. O nmero de colunas nas duas tabelas ou consultas selecionadas de uma consulta unio no coincide. Argumento TOP invlido na consulta seleo. A configurao da propriedade no pode ter mais de 2K. Esta propriedade no suportada em fontes de dados externas ou em bancos de dados criados com uma verso anterior do Microsoft Jet. A propriedade especificada j existe. As regras de validao e os valores padro no podem ser inseridos em tabelas do sistema ou vinculadas. No possvel inserir esta expresso de validao neste campo. O campo <nome> no pode conter um valor Null porque a propriedade Required deste campo est definida como True. Insira um valor neste campo. O campo <nome> no pode ser uma seqncia de comprimento zero. <Texto de validao em nvel de tabela>.

65

ACCESS 2000 PROGRAMAO EM VBA 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3334 3336 3337 3338 3339 3340 3341

SENAC-RS

3342 3343 3344 3345 3346 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3364 3365 3366 3367 3368 3370 3371 3372

Um ou mais valores so proibidos pela regra de validao <regra> definida para <nome>. Insira um valor que a expresso deste campo possa aceitar. Os valores especificados em uma clusula TOP no so permitidos em consultas excluso e nem em relatrios. Erro de sintaxe na consulta unio. <Erro> em expresso de validao em nvel de tabela. Sem banco de dados especificado na seqncia de conexo ou clusula IN. A consulta de tabela de referncia cruzada contm um ou mais ttulos fixos e invlidos de colunas. A consulta no pode ser utilizada como origem da linha. A consulta uma consulta DDL e no pode ser utilizada como origem da linha. A consulta passagem com a propriedade ReturnsRecords definida como True no retornou registros. Este Recordset no atualizvel. Somente pode estar presente no formato da verso 1.0. Btrieve: opo IndexDDF invlida na configurao da inicializao. Opo DataCodePage invlida na configurao da inicializao. Btrieve: as opes Xtrieve no esto corretas na configurao da inicializao. Btrieve: opo IndexDeleteRenumber invlida na configurao da inicializao. A consulta <nome> est corrompida. O campo atual deve corresponder chave de associao <nome> na tabela que serve como lado um da relao um-para-muitos. Insira um registro no lado um da tabela com o valor de chave desejado e, em seguida, faa a entrada com a chave de associao desejada na tabela somente-muitos. Memorando ou Objeto OLE invlido na subconsulta <nome>. Formato de banco de dados <nome do arquivo> no-reconhecido. O mecanismo de banco de dados no reconhece o campo <nome> em uma expresso de validao ou o valor padro na tabela <nome>. Referncia de campo <nome> desconhecida ou invlida. O nmero de valores de consulta e de campos de destino no o mesmo. Sobrecarga de campo numrico. O objeto invlido para a operao. A expresso ORDER BY <expresso> inclui campos que no so selecionados pela consulta. Somente os campos solicitados na primeira consulta podem ser includos em uma expresso ORDER BY. Sem nome de campo de destino na instruo INSERT INTO <instruo>. Btrieve: no possvel encontrar o arquivo Field.ddf. No mximo um registro pode ser retornado por esta subconsulta. Erro de sintaxe no valor padro. Voc tentou abrir um banco de dados que j est aberto exclusivamente pelo usurio <nome> na mquina <nome>. Tente novamente quando o banco de dados estiver disponvel. Esta consulta no uma consulta definio de dados devidamente formada. No possvel abrir o arquivo de informaes do grupo de trabalho do mecanismo Microsoft Jet. A consulta passagem deve conter pelo menos um caractere. A consulta complexa demais. Unies no-permitidas em uma subconsulta. A atualizao/excluso de linha nica afetou mais de uma linha de uma tabela vinculada. O ndice exclusivo contm valores duplicados. No possvel utilizar o campo Memorando ou Objeto OLE <nome> na clusula SELECT de uma consulta unio. No possvel definir esta propriedade para objetos remotos. No possvel acrescentar uma relao sem campos definidos. No possvel acrescentar. J existe na coleo um objeto com este nome. A relao deve ser no mesmo nmero de campos com os mesmos tipos de dados. No possvel modificar a estrutura da tabela <nome>. Ela est em um banco de dados somente leitura. No possvel encontrar tabela ou restrio. No h ndice <nome> na tabela <nome>.

66

ACCESS 2000 PROGRAMAO EM VBA 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3388 3389 3390 3393 3394 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3409 3411 3412 3414 3415 3416 3417 3418 3419

SENAC-RS

No possvel criar uma relao. A tabela referenciada <nome> no tem uma chave primria. Os campos especificados no so indexados exclusivamente na tabela <nome>. A tabela <nome> j tem um ndice chamado <nome>. A tabela <nome> no existe. No h relao <nome> na tabela <nome>. J existe uma relao chamada <nome> no banco de dados atual. No possvel criar relaes para impor integridade referencial. Os dados existentes na tabela <nome> violam as regras de integridade referencial na tabela <nome>. O campo <nome> j existe na tabela <nome>. No h campo chamado <nome> na tabela <nome>. O tamanho do campo <nome> longo demais. No possvel excluir o campo <nome>. Ele faz parte de uma ou mais relaes. No possvel excluir uma propriedade interna. As propriedades no definidas pelo usurio no suportam um valor Null. A propriedade <nome> deve ser definida antes de utilizar este mtodo. Funo <nome> desconhecida na expresso de validao ou no valor padro em <nome>. Suporte de consulta no-disponvel. O nome da conta j existe. No possvel executar associao, grupo, classificao ou restrio indexada. Um valor que est sendo procurado ou classificado longo demais. No possvel salvar a propriedade; ela uma propriedade de esquema. No possvel executar a operao em cascata. Como existem registros relacionados na tabela <nome>, as regras de integridade referencial seriam violadas. No possvel executar a operao em cascata. Deve haver um registro relacionado na tabela <nome>. No possvel executar a operao em cascata. Isto resultaria em uma chave nula na tabela <nome>. No possvel executar a operao em cascata. Isto resultaria em uma chave duplicada na tabela <nome>. No possvel executar a operao em cascata. Isto resultaria em duas atualizaes do campo <nome> na tabela <nome>. No possvel executar a operao em cascata. Isto transformaria o campo <nome> em Null, o que no permitido. No possvel executar a operao em cascata. Isto transformaria o campo <nome> em uma seqncia de comprimento zero, o que no permitido. No possvel executar a operao em cascata: <texto de validao>. No possvel executar a operao em cascata. O valor inserido proibido pela regra de validao <regra> definida para <nome>. Erro <texto de erro> na regra de validao. A expresso que voc est tentando utilizar na propriedade DefaultValue invlida porque <texto de erro>. Utilize uma expresso vlida para definir esta propriedade. A tabela MSysConf do servidor existe, mas est em um formato incorreto. Entre em contato com o seu administrador do sistema. Nome de campo <nome> invlido na definio de ndice ou relao. Entrada invlida. No possvel executar a operao em cascata na tabela <nome> porque o valor inserido grande demais para o campo <nome>. No possvel executar a atualizao em cascata na tabela porque ela est atualmente em uso por um outro usurio. No possvel executar a operao em cascata na tabela <nome> porque ela est atualmente em uso. A seqncia de comprimento zero vlida somente em um campo Texto ou Memorando. <alerta de erro reservado> Uma consulta ao no pode ser utilizada como origem de linha. No possvel abrir <nome da tabela>. Outro usurio est com a tabela aberta utilizando um arquivo de controle de rede ou um estilo de bloqueio diferente. No possvel abrir esta tabela do Paradox 4.x ou 5.x porque o ParadoxNetStyle est definido como 3.x no Registro do Windows.

67

ACCESS 2000 PROGRAMAO EM VBA 3420 3421 3422 3423 3424 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3452 3453 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3468 3469 3470

SENAC-RS

O objeto invlido ou no est mais definido. Erro de converso do tipo de dados. No possvel modificar a estrutura da tabela. Outro usurio est com a tabela aberta. Voc no pode utilizar o ODBC para importar de, exportar para ou vincular uma tabela de banco de dados externa do Microsoft Jet ou ISAM para o seu banco de dados. No possvel criar o banco de dados porque a localidade invlida. Ocorreu um problema no seu banco de dados. Corrija-o reparando e compactando o banco de dados. Verso incompatvel de um ISAM instalvel. Enquanto carregava o ISAM instalvel do Microsoft Excel, a OLE no conseguia inicializar. Este no um arquivo do Microsoft Excel 5.0. Erro na abertura de um arquivo do Microsoft Excel 5.0. Configurao invlida na chave do Excel da seo Engines do Registro do Windows. No possvel expandir intervalo nomeado. No possvel excluir clulas da planilha. Falha na criao do arquivo. A planilha est cheia. Os dados que esto sendo exportados no correspondem ao formato descrito no arquivo Schema.ini. Voc tentou vincular ou importar um arquivo de mala direta do Microsoft Word. Apesar de poder exportar esses arquivos, voc no pode vincul-los nem import-los. Foi feita uma tentativa de importar ou vincular um arquivo de texto vazio. Para importar ou vincular um arquivo de texto, o arquivo deve conter dados. O separador de campo de especificao do arquivo de texto corresponde ao separador decimal ou delimitador de texto. Na especificao <nome> do arquivo de texto, a opo <nome> invlida. A especificao <nome> de largura fixa no contm larguras de coluna. Na especificao <nome> de largura fixa, a coluna <coluna> no especifica uma largura. Foi encontrada a verso incorreta do arquivo DLL <nome>. O arquivo VBA do Jet (VBAJET.dll para verses de 16 bits ou VBAJET32.dll para verses de 32 bits) est ausente. Tente reinstalar o aplicativo que retornou o erro. O arquivo VBA do Jet (VBAJET.dll para verses de 16 bits ou VBAJET32.dll para verses de 32 bits) no conseguiu inicializar quando chamado. Tente reinstalar o aplicativo que retornou o erro. Uma chamada a uma funo do sistema OLE no foi bem-sucedida. Tente reinstalar o aplicativo que retornou o erro. Nenhum cdigo de pas encontrado na seqncia de conexo. Voc no pode fazer alteraes na estrutura do banco de dados nesta rplica. Voc no pode estabelecer ou manter uma relao imposta entre uma tabela replicada e uma tabela local. No possvel tornar o banco de dados replicvel. O objeto chamado <nome> na coleo <nome> no pode se tornar replicvel. Voc no pode definir a propriedade KeepLocal para um objeto que j est replicado. A propriedade KeepLocal no pode ser definida em um banco de dados; ela pode ser definida somente nos objetos em um banco de dados. Depois que um banco de dados replicado, voc no pode remover os seus recursos de replicao. A operao que voc tentou entra em conflito com uma operao existente que envolve este membro do conjunto de rplicas. A propriedade de replicao que voc est tentando definir ou excluir somente leitura e no pode ser alterada. No foi possvel carregar a DLL. No possvel encontrar o .dll <nome>. Os tipos de dados no correspondem na expresso de critrio. A unidade de disco que voc est tentando acessar ilegvel. O acesso foi negado enquanto acessava a pasta dropbox <nome>. O disco da pasta dropbox <nome> est cheio. Falha no disco durante o acesso pasta dropbox <nome>.

68

ACCESS 2000 PROGRAMAO EM VBA 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3499 3500 3502 3503 3504 3506 3507 3508 3509 3510 3512 3513 3514 3515 3516 3517 3518 3519

SENAC-RS

No foi possvel gravar no arquivo de registro Sincronizador. Disco cheio para caminho <nome>. Falha no disco durante o acesso ao arquivo de registro <nome>. No possvel abrir o arquivo de registro <nome> para gravao. Violao de compartilhamento durante a tentativa de abrir o arquivo de registro <nome> no modo Deny Write. Caminho da dropbox <nome> invlido. Endereo da dropbox <nome> sintaticamente invlido. A rplica no parcial. No possvel designar uma rplica parcial como Estrutura-Mestre para o conjunto de rplicas. A relao <nome> na expresso de filtro parcial invlida. O nome de tabela <nome> na expresso parcial de filtro invlido. A expresso de filtro para a rplica parcial invlida. A senha fornecida para a pasta dropbox <nome> invlida. A senha utilizada pelo Sincronizador para gravar em uma pasta dropbox de destino invlida. O objeto no pode ser replicado porque o banco de dados no replicado. Voc no pode adicionar um segundo campo AutoNumerao do Cdigo da Replicao a uma tabela. O banco de dados que voc est tentando replicar no pode ser convertido. O valor especificado no um CdigoDaReplicao para qualquer membro do conjunto de rplicas. O objeto especificado no pode ser replicado porque falta nele um recurso necessrio. No possvel criar uma nova rplica porque o objeto <nome> no recipiente <nome> no pde ser replicado. O banco de dados deve ser aberto no modo exclusivo antes que ele possa ser r eplicado. A sincronizao falhou porque uma alterao de estrutura no pde ser aplicada a uma das rplicas. No possvel definir o parmetro Registro especificado para o Sincronizador. No foi possvel recuperar o parmetro Registro especificado para o Sincronizador. No h sincronizaes agendadas entre os dois Sincronizadores. O Gerenciador de Replicao no consegue encontrar o CdigoDaTroca na tabela MSysExchangeLog. No foi possvel definir uma agenda para o Sincronizador. No possvel recuperar as informaes completas de caminho para um membro do conjunto de rplicas. No permitido definir uma troca com o mesmo Sincronizador. A Estrutura-Mestre ou rplica no est sendo gerenciada por um Sincronizador. O Registro do Sincronizador no tem valor definido para a chave que voc consultou. O cdigo do Sincronizador no corresponde a um cdigo existente na tabela MSysTranspAddress. O Sincronizador incapaz de abrir o registro do Sincronizador. No foi possvel gravar no registro do Sincronizador. No h transporte ativo para o Sincronizador. No foi possvel encontrar um transporte vlido para este Sincronizador. O membro do conjunto de rplicas que voc est tentando sincronizar est atualmente sendo utilizado em outra sincronizao. No foi possvel ler a pasta dropbox. No foi possvel gravar na pasta dropbox. O Sincronizador no conseguiu encontrar sincronizaes agendadas nem a serem solicitadas para processar. O mecanismo de banco de dados Microsoft Jet no conseguiu ler o relgio do sistema no seu computador. No foi possvel encontrar o endereo de transporte. O Sincronizador no conseguiu encontrar mensagens para serem processadas. No foi possvel encontrar o Sincronizador na tabela MSysTranspAddress. No foi possvel enviar a mensagem.

69

ACCESS 2000 PROGRAMAO EM VBA 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565

SENAC-RS

O nome ou cdigo da rplica no corresponde a um membro atualmente gerenciado do conjunto de rplicas. Dois membros do conjunto de rplicas no podem ser sincronizados porque no h um ponto comum para iniciar a sincronizao. O Sincronizador no consegue encontrar o registro de uma sincronizao especfica na tabela MSysExchangeLog. O Sincronizador no consegue encontrar um nmero de verso especfico na tabela MSysSchChange. O histrico de alteraes de estrutura na rplica no corresponde ao histrico na Estrutura-Mestre. O Sincronizador no conseguiu acessar o banco de dados de mensagens. O nome selecionado para o objeto do sistema j est em uso. O Sincronizador ou Gerenciador de Replicao no conseguiu encontrar o objeto do sistema. No h dados novos na memria compartilhada para que o Sincronizador ou Gerenciador de Replicao os leiam. O Sincronizador ou Gerenciador de Replicao encontrou dados no lidos na memria compartilhada. Os dados existentes sero sobrescritos. O Sincronizador j est servindo um cliente. O perodo de espera de um evento se esgotou. O Sincronizador no conseguiu ser inicializado. O objeto do sistema utilizado por um processo continua existindo depois que o processo parou. O Sincronizador procurou por um evento do sistema, mas no encontrou nenhum para relatar ao cliente. O cliente pediu ao Sincronizador que terminasse a operao. O Sincronizador recebeu uma mensagem invlida para um membro do conjunto de rplicas que ele gerencia. No possvel inicializar o Sincronizador porque h aplicativos demais em execuo. Ocorreu um erro de sistema ou o seu arquivo de troca alcanou seu limite. Seu arquivo de troca alcanou seu limite ou est corrompido. O Sincronizador no pde ser fechado apropriadamente e continua ativo. O processo parou quando se tentava terminar o cliente do Sincronizador. O Sincronizador no foi configurado. O Sincronizador j est sendo executado. As duas rplicas que voc est tentando sincronizar so de diferentes conjuntos de rplicas. O tipo de sincronizao que voc est tentando no vlido. O Sincronizador no conseguiu encontrar uma rplica do conjunto correto para concluir a sincronizao. Os GUIDs no correspondem ou o GUID solicitado no pde ser encontrado. O nome de arquivo que voc forneceu longo demais. No h ndice na coluna GUID. No foi possvel excluir o parmetro Registro do Sincronizador. O tamanho do parmetro Registro excede o mximo permitido. O GUID no pde ser criado. Todos os apelidos das rplicas j esto em uso. Caminho invlido para a pasta dropbox de destino. Endereo invlido para a pasta dropbox de destino. Erro de E/S em disco na pasta dropbox de destino. No foi possvel gravar porque o disco de destino est cheio. Os dois membros do conjunto de rplicas que voc est tentando sincronizar tm o mesmo CdigoDaReplicao. Os dois membros do conjunto de rplicas que voc est tentando sincronizar so ambos Estruturas-Mestre. Acesso negado na pasta dropbox de destino. Erro fatal ao acessar uma pasta dropbox local. O sincronizador no consegue encontrar o arquivo de origem das mensagens. H uma violao de compartilhamento na pasta dropbox de origem porque o banco de dados de mensagens est aberto em outro aplicativo.

70

ACCESS 2000 PROGRAMAO EM VBA 3566 3567 3568 3569 3571 3572 3574 3575 3576 3577 3578 3581 3583 3584 3586 3587 3588 3589 3592 3593 3594 3595 3605 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628

SENAC-RS

Erro de E/S na rede. A mensagem na pasta dropbox pertence ao Sincronizador errado. O Sincronizador no conseguiu excluir um arquivo. Este membro do conjunto de rplicas foi logicamente removido do conjunto e no est mais disponvel. A tentativa de definir uma coluna em uma rplica parcial violou uma regra que governa rplicas parciais. Ocorreu um erro de E/S em disco durante a leitura ou gravao no diretrio TEMP. O CdigoDaReplicao deste membro do conjunto de rplicas foi reatribudo durante um procedimento de movimentao ou cpia. A unidade de disco na qual voc est tentando gravar est cheia. O banco de dados que voc est tentando abrir j est em uso por outro aplicativo. No possvel atualizar a coluna do sistema de replicao. No foi possvel replicar o banco de dados; no possvel determinar se o banco de dados est aberto no modo exclusivo. No possvel abrir a tabela <nome> do sistema de replicao porque ela j est em uso. No possvel tornar o objeto <nome> no recipiente <nome> replicvel. Memria insuficiente para concluir a operao. Erro de sintaxe na expresso de filtro parcial na tabela <nome>. Expresso invlida na propriedade ReplicaFilter. Erro ao avaliar a expresso de filtro parcial. A expresso de filtro parcial contm uma funo desconhecida. Voc no pode replicar um banco de dados protegido por senha nem definir proteo por senha em um banco de dados replicado. Voc no pode alterar o atributo-mestre de dados do conjunto de rplicas. Voc no pode alterar o atributo-mestre de dados do conjunto de rplicas. Permite alteraes de dados somente na Estrutura-Mestre. As tabelas de sistema na sua rplica no so mais confiveis e no devem ser utilizadas. A sincronizao com um banco de dados no-replicado no permitida. O banco de dados <nome> no uma Estrutura-Mestre nem uma rplica. A propriedade de replicao que voc est tentando excluir somente leitura e no pode ser removida. O comprimento do registro longo demais para uma tabela indexada do Paradox. Nenhum ndice exclusivo encontrado para o campo referenciado da tabela primria. Mesma tabela <tabela> referenciada tanto como origem quanto destino em uma consulta criar tabela. No possvel executar instrues de definio de dados em fontes de dados vinculadas. A clusula GROUP BY de vrios nveis no permitida em uma subconsulta. No possvel criar uma relao em tabelas ODBC vinculadas. GUID no permitido na expresso de critrio do mtodo Find. O tipo no corresponde na expresso JOIN. A atualizao de dados em uma tabela vinculada no suportada por este ISAM. A excluso de dados em uma tabela vinculada no suportada por este ISAM. A tabela de excees no pde ser criada na importao/exportao. Os registros no puderam ser adicionados tabela de excees. A conexo para a visualizao da sua planilha vinculada do Microsoft Excel foi perdida. No possvel alterar a senha em um banco de dados compartilhado aberto. Voc deve utilizar a opo dbSeeChanges com OpenRecordset quando acessar uma tabela do SQL Server que tenha uma coluna IDENTITY. No possvel acessar o arquivo DBF acoplado <nome do arquivo> do FoxPro 3.0. No foi possvel ler o registro; atualmente bloqueado por outro usurio. A especificao <nome> do arquivo de texto no existe. Voc no pode importar, exportar e nem vincular utilizando a especificao. A operao falhou. H ndices demais na tabela <nome>. Exclua alguns dos ndices da tabela e tente a operao novamente. No possvel encontrar o arquivo executvel do Sincronizador (mstran35.exe). A rplica do parceiro no gerenciada por um Sincronizador.

71

ACCESS 2000 PROGRAMAO EM VBA 3629 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3645 3646 3647 3648 3649 3650 3651 3652 3653 3656 3660

SENAC-RS

Este Sincronizador e o Sincronizador <nome> tm a mesma dropbox do Sistema de arquivos <nome>. Nome de tabela invlido no filtro. O Sincronizador remoto no est configurado para sincronizao remota. No possvel carregar a DLL <nome>. No possvel criar uma rplica utilizando uma rplica parcial. No possvel criar uma rplica parcial de um arquivo de informaes do grupo de trabalho. No possvel preencher a rplica e nem alterar o filtro da rplica porque ela tem conflitos ou erros de dados. No possvel utilizar a tabela de referncia cruzada de uma coluna no fixa como uma subconsulta. Voc no pode criar um banco de dados replicvel que esteja sendo utilizado por um programa que controla a modificao. No possvel criar uma rplica de um arquivo de informaes do grupo de trabalho. O buffer de recuperao era pequeno demais para a quantidade de dados que voc solicitou. H menos registros restantes no Recordset do que voc solicitou. Foi efetuado um cancelamento na operao. Um dos registros do Recordset foi excludo por outro processo. Um dos parmetros de ligao est incorreto. O comprimento de linha especificado menor que a soma dos comprimentos de coluna. Uma coluna solicitada no est sendo retornada ao Recordset. No possvel sincronizar uma rplica parcial com uma outra rplica parcial. A pgina de cdigo do idioma no foi especificada ou no pde ser encontrada. A Internet est lenta demais. Endereo de Internet invlido. Falha de login da Internet. Internet no-configurada. Erro na avaliao de uma expresso parcial. A troca solicitada falhou porque <descrio>.

72

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Anexo 2
RESUMO DAS FUNES INTERNAS DO VBA Funes Matemticas Abs Retorna o valor absoluto de um nmero Atn Calcula o arco tangente de um nmero Cos Calcula o cosseno de um nmero Exp Retorna o valor de e elevado a uma potncia Fix Retorna a parte inteira de um nmero Int Retorna a parte inteira de um nmero Log Calcula o logaritmo natural de um nmero Rnd Retorna um nmero aleatrio (randmico) Sgn Retorna um inteiro conforme o sinal do nmero Sin Calcula o seno de um nmero Sqr Calcula a raiz quadrada de um nmero Tan Calcula a tangente de um nmero Funes Financeiras DDB Calcula a depreciao de um ativo pelo mtodo do Declnio de Balano FV Calcula o valor futuro de uma anuidade ou prestao IPmt Calcula o valor pago a ttulo de juros de uma prestao IRR Calcula o valor interno de retorno de um fluxo de caixa. MIRR Calcula o valor interno de retorno modificado de um fluxo de caixa Nper Retorna o nmero de perodos de uma anuidade NPV Calcula o valor presente lquido de um fluxo de caixa Pmt Retorna o valor das parcelas de uma anuidade PPmt Retorna o valor principal das parcelas de uma anuidade PV Calcula o valor presente de uma anuidade Rate Calcula a taxa de juros por perodo de uma anuidade SLN Retorna a depreciao linear de um ativo SYD Retorna a depreciao de um ativo pelo mtodo da soma dos dgitos dos anos. Funes de Converso de Dados Asc Retorna o cdigo ASCII da primeira letra de uma string Cbool Converte uma expresso para o tipo de dados Boolean Cbyte Converte uma expresso para o tipo de dados Byte Ccur Converte uma expresso para o tipo de dados Currency Cdate Converte uma expresso para o tipo de dados Date Cdbl Converte uma expresso para o tipo de dados Double Chr Retorna o caracter correspondente ao cdigo ASCII informado. Cint Converte uma expresso para o tipo de dados Inteiro Clng Converte uma expresso para o tipo de dados Longo Csng Converte uma expresso para o tipo de dados Single Cstr Converte uma expresso para o tipo de dados String Cvar Converte uma expresso para o tipo de dados Variant CVErr Retorna o nmero do erro especificado pelo usurio Hex Retorna uma string representando o valor hexadecimal de um nmero Oct Retorna uma string representando o valor octal de um nmero Str Retorna uma string representando o valor de um nmero Val Retorna os nmeros contidos em uma string

73

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Funes de Data e Hora Date Retorna a data atual do sistema DateAdd Retorna a data especificada acrescida do intervalo de tempo informado. DateDiff Retorna o intervalo de tempo decorrido entre duas datas especificadas DatePart Retorna a parte especificada de uma determinada data DateSerial Retorna uma data para o ano, ms e dia especificados DateValue Retorna uma data a partir de uma data na forma de string Day Retorna o nmero do dia de uma data (de 1 a 31) Format Formata uma expresso de acordo com as instrues definidas pelo usurio Hour Retorna o nmero da hora (de 0 a 23) de uma determinada hora especificada. Minute Retorna o nmero de minutos da hora especificada (de 0 a 59) Month Retorna o nmero do ms de uma determinada data (de 1 a 12) Now Retorna a data e hora atuais do seu sistema. Second Retorna a data e hora atuais do seu sistema Time Retorna a hora atual do sistema Timer Retorna o nmero de segundos decorridos desde 0:00h (de 0 a 59) Weekday Retorna o nmero do dia da semana (1 - Domingo,..., 7-Sbado) Year Retorna o nmero do ano de uma determinada data Funes de Manipulao de Strings InStr Retorna a posio da primeira ocorrncia de uma string dentro de outra Lcase Retorna uma string convertida para letras minsculas Retorna o nmero especificado de caracteres a partir do lado esquerdo de uma Left string Retorna o nmero de caracteres em uma string ou o nmero de bytes requeridos Len para armazenar uma varivel. Retorna uma cpia de uma string eliminando os espaos existentes entre o incio Ltrim da string e o primeiro caractere. Mid Retorna o nmero especificado de caracteres de uma string Retorna uma string indicando onde um nmero ocorreu dentro de uma srie Partition calculada Retorna o nmero especificado de caracteres a partir do lado direito de uma Right string Retorna uma cpia de uma string eliminando os espaos existentes entre o Rtrim ltimo caractere da string e o fim da mesma. Space Retorna uma string com o nmero de espaos em branco definidos pelo usurio Retorna um valor indicando o resultado de uma comparao de strings (se maior, StrComp igual ou menor) Retorna uma string convertida de acordo com a operao especificada pelo StrConv usurio Retorna uma string com caracteres repetidos no comprimento especificado pelo String usurio. Retorna uma cpia de uma string eliminando os espaos existentes entre o incio Trim da string e o primeiro caractere, e o ltimo caractere da string e o fim da mesma. Ucase Retorna uma string convertida para letras maisculas. Funes de Array Retorna uma varivel de memria do tipo de dado Variant contendo o array Array especificado pelo usurio Lbound Retorna o menor elemento da dimenso especificada de um determinado array Ubound Retorna o maior elemento da dimenso especificada de um determinado array

74

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Funes de Sistema Operacional Retorna o argumento informado na linha de comando utilizado na Command inicializao do Visual Basic, ou de um programa executvel desenvolvido pelo mesmo CreateObject Cria um objeto OLE CurDir Retorna a pasta (ou diretrio) atual Retorna o nome do(s) arquivo(s) ou diretrio(s) que combina(m) com o Dir padro especificado ou atributo de arquivo, ou volume de um drive Interrompe momentaneamente a execuo de seu aplicativo para que o DoEvents sistema operacional possa processar outros eventos. Retorna a string associada a uma varivel de ambiente do sistema Environ operacional (como Path e Prompt, por exemplo). Error Retorna a mensagem de erro que corresponde a um dado nmero de erro. GetObject Recupera um objeto OLE de um arquivo Exibe uma caixa de dilogo para que o usurio possa digitar uma resposta InputBox qualquer. Aps escolher um dos botes disponveis , o VB retorna o valor digitado. Carrega uma imagem dentro de um objeto Form object, Controle PictureBox LoadPicture ou controle Image. Exibe uma mensagem em um quadro de dilogo e espera que o usurio MsgBox escolha um dos botes disponveis. Aps a seleo, o VB retorna um valor indicando o boto escolhido. QBColor Retorna o valor da cor RGB correspondente ao nmero de cor informado RGB Retorna um nmero representando uma cor do padro RGB. Shell Inicia a execuo de um programa qualquer utilizada com o comando Print # ou com o mtodo Print para posicionar a Spc sada de uma expresso qualquer. Utilizada com o comando Print # ou com o mtodo Print para posicionar a Tab sada de uma expresso qualquer. Funes de Acesso Arquivos Eof Retorna um valor que indica se o fim de um arquivo foi alcanado. Loc Retorna a posio atual de leitura/escrita de um arquivo aberto Retorna o tamanho em bytes de um arquivo aberto atravs do comando Lof Open Retorna o modo do arquivo ou o nmero do handle para arquivos abertos FileAttr atravs do comando Open. Retorna a data e hora em que o arquivo foi criado ou modificado pela ltima FileDateTime vez. FileLen Retorna o tamanho de um determinado arquivo em bytes Retorna o prximo nmero de arquivo disponvel para utilizao pelo FreeFile comando Open GetAttr Retorna um nmero que representa os atributos de um arquivo ou diretrio Input Retorna caracteres de um arquivo seqencial ou binrio aberto. Retorna a posio atual de leitura / escrita de um arquivo aberto com o Seek comando Open. Funes de Verificao Choose Seleciona e retorna um valor de uma lista de argumentos existente. IIF Retorna uma de duas partes, dependendo da avaliao de uma expresso. IsArray Retorna um valor Boolean indicando se uma determinada varivel um array Retorna um valor Boolean indicando se uma determinada expresso pode ser IsDate convertida para uma data. Retorna um valor Boolean indicando se uma determinada varivel foi IsEmpty inicializada ou no. Retorna um valor Boolean indicando se uma determinada expresso um IsError valor de erro. IsMissing Retorna um valor Boolean indicando seum argumento opcional foi passado 75

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

IsNull IsNumeric IsObject Switch TypeName VarType ABS

para uma procedure ou no. Retorna um valor Boolean indicando se uma expresso contm dados invlidos (Null) Retorna um valor Boolean indicando se uma determinada expresso pode ser avaliada como um valor numrico Retorna um valor Boolean indicando se uma determinada expresso faz referncia a um objeto OLE vlido. Avalia uma lista de expresses e retorna um valor ou uma expresso associada com a primeira expresso associada com a primeira expresso da lista que verdadeira (coincidente com a entrada). Retorna uma string que informa qual o tipo de dados da varivel analisada. Retorna um valor indicando o subtipo de uma varivel. ESPECIFICAO DAS FUNES INTERNAS DO VBA

Categoria: Finalidade: Sintaxe: Onde: Exemplo: ARRAY Categoria: Finalidade: Sintaxe: Onde: Exemplo: ASC Categoria: Finalidade: Sintaxe: Onde: Exemplo: ATN Categoria: Finalidade: Sintaxe: Onde: Exemplo: CBOOL Categoria: Finalidade: Sintaxe: Onde: Exemplo:

Funo Matemtica Retorna o valor absoluto de um nmero ABS(Nmero) Nmero - Qualquer valor numrico vlido. Se nmero contm Null, o valor retornado pela funo ser Null tambm. Caso nmero seja igual a zero, este ser o valor de retorno da funo. Teste = ABS(2.99) ' Teste=2.99 Teste = ABS(-2.99) ' Teste=2.99 Funo de Array Retorna um dado Variant contendo um Array ARRAY(Lista de Argumentos) Lista de Argumentos - Consiste em uma srie de argumentos separados por vrgulas. Se nenhum argumento for dado funo, ser criado um array de comprimento zero. MeuArray = Array("Jan","Fev","Mar","Abr") ' MeuArray(2)="Fev" MeuArray = Array(1,3,5,7) ' MeuArray(3)=5 Funes de Converso de Dados Retorna o cdigo ASCII correspondente do primeiro caractere da string indicada ASC(String) String - O argumento qualquer expresso de caracteres vlida. Se o string especificado no contiver caracteres ocorrer um erro.. Teste = Asc(A ) 'Teste=65 Teste = Asc(a ) 'Teste=97 Teste = Asc(ASCII ) 'Teste=65 Funes Matemticas Calcula o Arco Tangente de um nmero ATN(Nmero) Nmero - A funo Atn retorna o nmero de radianos referentes ao arco tangente do ngulo especificado. Teste=Atn(30) 'Teste = 1.53747533091665 Teste=Atn(45) 'Teste = 1.54857776146818 Funes de Converso de Dados Converte uma expresso para Boolean (Booleano) CBOOL(Expresso) Expresso - Se o valor da expresso resultante for zero, o valor False ser retornado pela funo CBool; caso contrrio a resposta ser True. Primeiro = 10 Segundo = 10 Valor = 0

76

ACCESS 2000 PROGRAMAO EM VBA Teste = CBool(Primeiro = Segundo) ' Teste = True Teste2 = CBool(Valor) ' Teste = False CBYTE Categoria: Finalidade: Sintaxe: Onde: Exemplo: CCUR Categoria: Finalidade: Sintaxe: Onde: Exemplo:

SENAC-RS

Funes de Converso de Dados Converte uma expresso para Byte CBYTE( Expresso) Expresso - O argumento da funo poder ser qualquer valor numrico vlido Dim Teste As Double Teste = 222.3322 MeuByte = CByte(Teste) ' MeuByte = 222 Funes de Converso de Dados Converte uma expresso para Currency Moeda) CCUR(Expresso) Expresso - O argumento da funo poder ser qualquer valor numrico vlido ou expresso string Dim Dado As Double Dado = 656.123456 Dado = Dado*2 MinhaMoeda= CCur(Dado) ' MinhaMoeda = R$1312.2469 Funes de Converso de Dados Converte uma expresso para o tipo de dado Date (Data) CDATE(Data) Hoje ="June 18, 2001" DataCurta = CDate(Hoje) ' DataCurta=18/06/01 Funes de Converso de Dados Converte uma expresso para Double (Nmero Duplo) CDBL(Expresso) Expresso - O argumento da funo poder ser qualquer valor numrico vlido ou expresso string Dim MinhaMoeda As Currency MinhaMoeda = 255.123456 Dado = CDbl(MinhaMoeda) ' Dado = 255.1235 Funes de Verificao Seleciona e retorna um valor de uma lista de argumentos existentes em funo do ndice passado. CHOOSE( index, choice-1[, choice-2,...[,choice-n]]) Index - Expresso numrica ou campo que resulta em um valor entre 1 e o nmero de escolhas disponveis. Choice - Expresso Variant contendo uma das possveis escolhas. Teste = Escolha(2) funo Escolha ' Teste = "Valor2" pois foi o valor retornado pela

CDATE Categoria: Finalidade: Sintaxe: Exemplo: CDBL Categoria: Finalidade: Sintaxe: Onde: Exemplo: CHOOSE Categoria: Finalidade: Sintaxe: Onde:

Exemplo:

Function Escolha(Indice As Integer) Escolha = Choose(Indice, Valor1,Valor2,Valor3) End Function Funes de Converso de Dados Retorna o caractere correspondente ao cdigo ASCII informado CHR(Cdigo ASCII) Teste = Chr(65) ' Teste = A Teste = Chr(97) ' Teste = a Teste = Chr(64) ' Teste = @

CHR Categoria: Finalidade: Sintaxe: Exemplo:

77

ACCESS 2000 PROGRAMAO EM VBA CINT Categoria: Finalidade: Sintaxe: Onde: Exemplo: CLNG Categoria: Finalidade: Sintaxe: Onde: Exemplo: COMMAND Categoria: Finalidade: Sintaxe: Onde:

SENAC-RS

Funes de Converso de Dados Converte uma expresso para o tipo de dados Integer (Nmero Inteiro) CINT(Expresso) Expresso - O argumento da funo poder ser qualquer valor numrico vlido ou expresso string Dim Duplo As Double Duplo = 8765.4321 Teste = CInt(Duplo) ' Teste=8765 Funes de Converso de Dados Converte uma expresso para o tipo de dado Long (Nmero Inteiro Longo) CLNG(Expresso) Expresso - O argumento da funo poder ser qualquer valor numrico vlido ou expresso string Dim Dado As Double Dado = 65432.123 Teste = CLng(Dado) Teste=65432 Funes de Sistema Operacional Retorna o argumento informado na linha de comando utilizado na inicializao do Microsoft Access. COMMAND Crie um mdulo onde voc testar o argumento passado. Na linha de comando adicione , aps ao nome do arquivo .mdb, o seguinte texto /cmd argumento. Dim Msg As String If Command = "" Then Msg = "No existe argumento na linha de comando" Else Msg = "O argumento da linha de comando " & Command End If MsgBox Msg Funes Matemticas Calcula o cosseno de um ngulo. COS(Nmero) Nmero - Pode ser qualquer expresso numrica vlida que expresse um ngulo em radianos Const PI = 3.14159265 Teste = Cos(PI) ' Teste = -1 Teste = Cos(PI/2) ' Teste = 1.7948965 Funes de Converso de Dados Converte uma expresso para o tipo de dados Single (Nmero Simples) CSNG(Expresso) Expresso - O argumento da funo poder ser qualquer valor numrico vlido ou expresso string Dim Teste As Double Teste = 22.12345678 Teste = CSng(Teste) ' Teste = 22.12346 Funes de Converso de Dados Converte uma expresso para o tipo de dados String (Texto) CSTR(Expresso) Expresso - O argumento da funo poder ser qualquer valor numrico vlido ou expresso string Dim Dado As Double Dado = 555.4321

Exemplo:

COS Categoria: Finalidade: Sintaxe: Onde: Exemplo: CSNG Categoria: Finalidade: Sintaxe: Onde: Exemplo: CSTR Categoria: Finalidade: Sintaxe: Onde: Exemplo:

78

ACCESS 2000 PROGRAMAO EM VBA Teste = CStr(Dado) CURDIR Categoria: Finalidade: Sintaxe: Onde: Exemplo: CVAR Categoria: Finalidade: Sintaxe: Onde: Exemplo: DATE Categoria: Finalidade: Sintaxe: Exemplo: DATEADD Categoria: Finalidade: Sintaxe: Funes de Data e Hora Retorna a data atual do sistema DATE Teste = Date ' Teste = 15/07/2001 ' Teste = "555.4321"

SENAC-RS

Funes de Sistema Operacional Retorna a pasta (ou diretrio) atual CURDIR[(Drive)] Drive - Expresso string que especifica uma unidade de disco existente. Se a unidade no for especificada ou se a string for de tamanho zero, a funo CurDir retornar o caminho (Path) para o drive atual. Teste = CurDir ' Teste = C:\Windows\System Funes de Converso de Dados Converte uma expresso para o tipo de dados Variant CVAR(Expresso) Expresso - O argumento da funo poder ser qualquer valor numrico vlido ou expresso string Dim NumInteiro As Integer NumInteiro = 2222 Teste = CVar(NumInteiro & "000") ' Teste = "2222000"

Funes de Data e Hora Retorna um valor Variant contendo a data especificada acrescida do intervalo de tempo fornecido funo. DATEADD(Intervalo, Nmero, Data) Intervalo - Expresso do tipo string indicando o intervalo de tempo a ser adicionado data especificada. Pode ser horas, dias, semanas, meses, anos, etc., conforme especificado na seo Ajustes logo abaixo. Nmero - Expresso numrica indicando o nmero de intervalos de tempo que voc deseja acrescer data indicada. Ele pode ser positivo para indicar datas futuras ou mesmo negativo, obtendo datas j ocorridas. Data - Data ou nome de varivel do tipo Date que ser utilizada para o clculo da funo.

Onde:

Ajustes yyyy - Ano q - Trimestre m - ms y - Dia do Ano d - Dia w - Dia da semana ww - Semana h - Hora n - Minuto s - Segundo Teste = DateAdd("yyyy",3,#22/06/2001#) Teste = DateAdd("m",-6,#22/06/2001#) Teste = DateAdd("ww",1,#22/06/2001#) Teste = 22/06/2004 Teste = 22/12/2000 Teste = 29/06/2001

Exemplo:

79

ACCESS 2000 PROGRAMAO EM VBA DATEDIFF Categoria: Finalidade: Sintaxe:

SENAC-RS

Funes de Data e Hora Retorna um intervalo de tempo decorrido entre duas datas de acordo com a unidade de tempo especificada. DATEDIFF( Intervalo, Data1, Data2 [,FirstDayOfWeek[, FirstWeekOfYear]]) Intervalo - Expresso do tipo string indicando o intervalo de tempo que ser calculado entre Data1 e Data2. Pode ser horas, dias, semanas, meses, anos, etc., conforme especificado na seo Ajustes logo abaixo. Data1, Data2 - As duas datas entre as quais ser calculado o intervalo de tempo decorrido. FirstDayOfWeek - Uma constante que define o primeiro dia da semana. Caso voc no especifique, o domingo ser considerado como primeiro dia. FirstWeekOfYear - Esta constante define a primeira semana do ano. Se voc no especificar este argumento, ser considerada como primeira semana do ano aquela que ocorre no dia 1 de janeiro. Ajustes yyyy - Ano q - Trimestre m - ms y - Dia do Ano d - Dia w - Dia da semana ww - Semana h - Hora n - Minuto s - Segundo Ajustes FirstDayOfWeek 0 - O atual do sistema 1 - Domingo (Padro) 2 - Segunda 3 - Tera 4 - Quarta 5 - Quinta 6 - Sexta 7 - Sbado Ajustes FirstWeekOfYear 0 - O atual do sistema (se houver) 1 - A semana em que ocorre dia 1 de janeiro 2 - A primeira semana que tem pelo menos 4 dias do novo ano 3 - A primeira semana que contiver sete dias do novo ano Dias decorridos de 01/01/2001 a 22/06/2001 Teste = DateDiff("d",#01/01/2001#,#22/06/2001#) Meses decorridos de 01/01/2001 a 22/06/2001 Teste = DateDiff("m",#01/01/2001#,#22/06/2001#) ' Teste = 172 ' Teste = 5

Onde:

Exemplo:

80

ACCESS 2000 PROGRAMAO EM VBA DATEPART Categoria: Finalidade: Sintaxe:

SENAC-RS

Funes de Data e Hora Retorna a parte especificada de uma determinada data DATEPART( Intervalo, Data [,FirstDayOfWeek [,FirstWeekOfYear]]) Intervalo - Expresso do tipo string indicando o intervalo de tempo que ser retornado pela funo. Veja a seo Ajustes a seguir. Data - A data a ser avaliada pela funo FirstDayOfWeek - Uma constante que define o primeiro dia da semana. Caso voc no especifique, o domingo ser considerado como primeiro dia. FirstWeekOfYear - Esta constante define a primeira semana do ano. Se voc no especificar este argumento, ser considerada como primeira semana do ano aquela que ocorre no dia 1 de janeiro. Ajustes Esta funo utiliza os mesmos ajustes da funo DateDiff

Onde:

Exemplo: DATESERIAL Categoria: Finalidade: Sintaxe: Onde:

Calcula a semana atual da data indicada Teste = DatePart("ww",#22/06/2001#) ' Teste = 25 Funes de Data e Hora Retorna a data para o dia, ms e ano especificados. DATESERIAL(Ano, Ms, Dia) Ano - Nmero entre 100 e 9999 inclusive Ms - Qualquer expresso numrica entre 1 e 12 Dia - Qualquer expresso numrica entre 1 e 31 Retorna a data de 1 de maio de 2001 Teste = DateSerial(2001,5,1) ' Teste = 01/05/2001 Funes de Data e Hora Retorna uma data. DATEVALUE(Data) Data - Expresso string representando uma data. O VBA pode manipular datas que vo de 01/01/100 at 31/12/9999. Voc tambm pode utilizar qualquer expresso que represente data, hora ou ambas. Teste = DateValue (6/22/2001) ' Teste = 22/06/2001

Exemplo: DATEVALUE Categoria: Finalidade: Sintaxe: Onde: Exemplo: DAY Categoria: Finalidade: Sintaxe: Exemplo: DDB Categoria: Finalidade: Sintaxe: Onde:

Funes de Data e Hora Retorna um nmero de 1 a 31 representando o dia do ms DAY(Data) Teste = Day(#22/06/2001#) ' Teste = 22 Funes Financeiras Calcula a depreciao de um ativo pelo mtodo do Declnio de Balano DDB(Cost, Salvage, Life, Period [,Factor]) Cost - Custo Inicial do bem Salvage - Valor do bem ao final de sua vida til Life - Vida til do bem Period - Perodo de depreciao Factor - Taxa de declnio do balano Teste = DDB(1000, 100, 5,1) ' Teste = 400

Exemplo:

81

ACCESS 2000 PROGRAMAO EM VBA DIR Categoria: Finalidade: Sintaxe:

SENAC-RS

Funes de Sistema Operacional Retorna o nome dos arquivos ou diretrios que combinam com o padro especificado ou atributo de arquivo, ou volume de um drive. DIR [(PathName [,Attributes])] Pathname - Expresso string que especifica o nome do arquivo. Este string tambm pode conter o caminho completo (drive e diretrio) do arquivo procurado. Se o caminho no for encontrado, Null ser retornado. Attributes - Constante ou expresso numrica que indica os atributo do arquivo selecionado. Se omitido, somente sero retornados os arquivos normais, ou seja, arquivos ocultos de sistema e diretrios no sero exibidos. Ajustes: 0 - Normal 2 - Oculto 4 - Sistema 8 - Volume 16 - Diretrio Teste = Dir("C:\WINDOWS\WIN.INI") Teste = Dir("C:\WINDOWS\*.INI") List1.AddItem Teste Do While Teste <> Empty Teste = Dir List1.AddItem Teste Loop Quando voc utiliza caracteres curinga como * e ?, o VBA retorna o primeiro nome de arquivo que atende s condies de busca indicadas na funo Dir. A partir da basta chamar a funo Dir sem argumentos para que os prximos arquivos que atendem condio proposta sejam exibidos. ' Teste = "WIN.INI"

Onde:

Exemplo:

DOEVENTS Categoria: Finalidade: Sintaxe:

Funes de Sistema Operacional Interrompe momentaneamente a execuo de seu aplicativo para que o sistema operacional possa processar outros eventos pendentes. DOEVENTS() For ind = 1 to 30000 If (ind Mod 1000) = 0 Then DoEvents End If Next ind Quando seu aplicativo realiza tarefas muito demoradas o sistema operacional deixa de processar a ocorrncia de alguns eventos, que ficam pendentes em uma fila de execuo. mais ou menos o que ocorre quando voc d dois cliques sobre o cone do Access para inicializ-lo. Enquanto o seu micro vai carregando este aplicativo, as teclas que voc est acionando e os cliques de mouse dados sobre a tela so ignorados pelo Windows. Depois que a sua aplicao j est carregada que o Windows processa os eventos pendentes. A funo DoEvents tambm retorna o nmero de formulrios abertos no windows.

Exemplo:

82

ACCESS 2000 PROGRAMAO EM VBA ENVIRON Categoria: Finalidade: Sintaxe: Onde:

SENAC-RS

Funes de Sistema Operacional Retorna o string associado a uma varivel de ambiente do sistema operacional (como path e prompt, por exemplo) ENVIRON( {EnvString | Nmero }) EnvString - Expresso string contendo o nome da varivel de ambiente. Nmero - Expresso numrica correspondente ordem da varivel na tabela de variveis de ambiente. Teste = Environ(PATH) Teste = Environ(TEMP) ' Teste = C:\Windows\TEMP Teste = Environ(USER) ' Teste = U00012 Funes de Sistema Operacional Retorna a mensagem de erro que corresponde a um dado nmero de erro. ERRO [(ErrorNumber)] ErrorNumber - Qualquer nmero de erro vlido para o VBA. Um nmero de erro corresponde ao valor da propriedade Number do objeto Err, e seus valores vlidos vo de 0 a 65535, inclusive. Quando combinado com a propriedade Name do objeto Err, este nmero representa uma mensagem de erro particular. Se ErrorNumber um nmero de erro vlido, porm indefinido, a funo error retorna a string definida pelo usurio. Se Errornumber no um nmero de erro vlido, um erro ocorre. Teste = Error(5) ' Teste = Invalid Procedure Call Teste = Error(6) ' Teste = Overflow Teste = Error(7) ' Teste = Out of Memory Funes Matemticas Retorna o valor de e (base de um logaritmo natural) elevado a uma potncia qualquer EXP (Nmero) Nmero - Qualquer expresso numrica vlida. Teste = Exp(1)

Exemplo: ERROR Categoria: Finalidade: Sintaxe:

Onde:

Exemplo: EXP Categoria: Finalidade: Sintaxe: Onde: Exemplo: FILEDATETIME Categoria: Finalidade: Sintaxe: Onde: Exemplo: FIX Categoria: Finalidade: Sintaxe: Onde: Exemplo:

O valor de e aproximadamente 2,718282. Se o valor do nmero for superior a 709,782712893, ocorrer um erro de overflow. Funes de Acesso a Arquivos Retorna a data e hora em que o arquivo foi criado ou modificado pela ltima vez. FILEDATETIME(Pathname) Pathname - Expresso string que especifica o nome do arquivo. Este string tambm pode conter o caminho completo (drive e diretrio) do arquivo procurado. Teste = FileDateTime(C:\WINDOWS\WIN.COM) ' Teste = 24/08/95 09:50:00 Funes Matemticas Retorna a parte inteira de um nmero FIX (Nmero) Nmero - Qualquer expresso numrica vlida. Se o nmero contm Null, o valor de retorno ser Null tambm. Teste = Fix(12.556) Teste = Fix(-12.556) Teste = Fix(1.6) ' Teste = 12 ' Teste =-12 ' Teste = 1

83

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

FORMAT Categoria: Finalidade: Sintaxe:

Funes de Data e Hora Formata uma expresso de acordo com as instrues definidas pelo usurio FORMAT (Expresso [,Formato[, FirstDayOfWeek [,FirstWeekOfYear]]]) Expresso - Qualquer expresso vlida Formato - Uma expresso de formato definida pelo usurio. Veja na seo Ajustes os formatos existentes. FirstDayOfWeek - Uma constante que define o primeiro dia da semana. Veja na funo DateDiff para maiores detalhes. FirstWeekOfYear - Esta constante define a primeira semana do ano. Veja a funo DateDiff para maiores detalhes. Ajustes Nmeros General Number - Exibe o nmero como ele , ou seja, sem separadores de milhares. Currency - Exibe o nmero com separadores de milhares, smbolo de moeda e quatro dgitos direita do ponto decimal. Fixed - Exibe pelo menos um dgito esquerda e dois direita do ponto decimal Standard - Exibe o nmero com separadores de milhares, com pelo menos um dgito esquerda e dois direita do ponto decimal. Percent - Exibe o nmero multiplicado por 100 e com o smbolo de porcentagem (%) exibido direita do nmero. Sempre exibe duas casas decimais. Scientific- Usa a notao cientfica padro. Yes/No - Exibe "No" se o nmero zero. Caso contrrio exibe "Yes" True/False - Exibe "False" se o nmero zero. Caso contrrio exibe "True" On/Off - Exibe "Off" se o nmero zero. Caso contrrio exibe "On". Data e Hora General Date - Para nmeros reais exibe a data e hora, como em 23/06/2001 08:33 PM. Se o nmero no possuir nenhuma parte fracionria, exibe somente a data, como em 23/06/2001. Se no houver parte inteira, exibe apenas a hora, como em 08:33 PM. A exibio da data obedece aos ajustes atuais do seu sistema. Long Date - Exibe a data de acordo com o ajuste atual de seu sistema para datas longas. Ex: Sbado, 23 de junho de 2001 Medium Date - Exibe a data de acordo com o ajuste atual de seu sistema para datas mdias. Ex: 22-Jun-2001 Short Date - Exibe a data de acordo com o ajuste atual de seu sistema para datas curtas. Ex: 22/06/2001 Long Time - Exibe a hora de acordo com o ajuste atual de seu sistema para horas longas. Ex: 20:33:51 Medium Time - Exibe a hora de acordo com o ajuste atual de seu sistema para horas mdias. Ex: 08:33 PM

Onde:

84

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Short Time - Exibe a hora de acordo com o ajuste atual de seu sistema para horas curtas. Ex: 20:33 Teste = Format(12345678,General Number) Teste = Format(12345678,Currency) Teste = Format(12345678,Fixed) Teste = Format(12345678,Standard) Teste = Format(12345678,Scientific) Teste = Format(12345678,"Yes/No") Teste = Format(#23/6/2001#,Long Date) de Teste = Format(#23/6/2001#,Medium Date) Teste = Format(#23/6/2001#,Short Date) Teste = Format(20:33,Long Time) Teste = Format(20:33,Medium Time) Teste = Format(20:33,Short Time) FV Categoria: Finalidade: Sintaxe: Funes Financeiras Calcula o valor futuro de uma anuidade ou prestao FV(Rate, Nper, Pmt[, Pv[, Type]]) Rate - Taxa de juros no perodo Nper - Nmero total de pagamentos Pmt - Pagamento a ser feito em cada perodo Pv - Valor presente de uma srie de pagamentos Type - Nmero indicando quando os pagamentos sero feitos. Use 0 se os pagamentos ocorrem no fim do perodo e 1 se os pagamentos sero feitos antecipadamente. Se omitido, 0 assumido. ' Quanto obterei se depositar R$100,00 por seis meses a uma taxa de 2% ao ms Teste = FV(0.02,6,-100) GETATTR Categoria: Finalidade: Sintaxe: ' Teste = 630.81 ' 12345678 ' R$ 12.345.678,0000 ' 12345678.00 ' 12.345.678.00 ' 1.23E+07 ' Yes ' Sbado, 23 de Junho 2001 ' 23-Jun-2001 ' 23/06/2001 ' 20:33:00 ' 20:33 PM ' 20:33

Exemplo:

Onde:

Exemplo:

Funes de Acesso a Arquivos Retorna um nmero que representa os atributos de um arquivo ou diretrio. GETATTR(Pathname) Pathname - Expresso string que especifica o nome do arquivo. Esse string tambm pode conter o caminho completo (drive e diretrio) do arquivo procurado. Se o caminho no for encontrado, Null ser retornado. Valores de Retorno: 0 - Normal 1 - Somente-leitura 2 - Oculto 4 - Sistema 16 - Diretrio 32 - O arquivo foi alterado aps o ltimo backup Teste = GetAttr(C:\IO.SYS) ' Teste = 7 Teste = GetAttr(C:\WINDOWS) ' Teste = 16 Funes de Converso de Dados Retorna um string representando o valor hexadecimal de um nmero Hex(Nmero)

Onde:

Exemplo: HEX Categoria: Finalidade: Sintaxe:

85

ACCESS 2000 PROGRAMAO EM VBA Nmero - Qualquer expresso numrica vlida. Teste = Hex(15) ' Teste = F Teste = Hex(5) ' Teste = 5 Teste = Hex(255) ' Teste = FF

SENAC-RS

Onde: Exemplo: HOUR Categoria: Finalidade: Sintaxe: Onde: Exemplo: IIF Categoria: Finalidade: Sintaxe:

Funes de Data e Hora Retorna o nmero da hora (de 0 a 23) especificada HOUR(Time) Time - Qualquer expresso numrica ou string que possa representar um intervalo de tempo. Se Time contm Null, o valor de retorno da funo ser Null tambm. Teste = Hour(#8:33:17 PM#) ' Teste = 20

Onde:

Funes de Verificao Retorna uma de duas partes, dependendo da avaliao de uma expresso. IIF (Expresso, TruePart, FalsePart) Expresso - Expresso a ser avaliada TruePart - Valor ou expresso retornada se a expresso avaliada for verdadeira FalsePart - Valor ou expresso retornada se a expresso avaliada for falsa. intDado = 100 Teste = IIf(intDado>10,"MaiorqueDez","MenorqueDez") MaiorqueDez ' Teste =

Exemplo: INPUTBOX Categoria: Finalidade: Sintaxe:

Funes de Sistema Operacional Exibe uma caixa de dilogo para que o usurio possa digitar uma resposta qualquer. Aps escolher um dos botes disponveis, o VBA retorna o valor digitado. INPUTBOX(Prompt[, Title][,Default][,Xpos][,Ypos]) Prompt - Expresso string que ser exibida como mensagem na caixa de dilogo. O comprimento mximo da mensagem de 1024 caracteres. Voc pode quebrar a mensagem em vrias linhas utilizando a combinao de caracteres de retorno de carro CHR(13) e mudana de linha CHR(10), como em (CHR(13) & CHR(10)). Title - Expresso string que ser exibida na barra de ttulo da caixa de dilogo. Se voc omitir este argumento, o nome exibido na barra de ttulo ser o nome de sua aplicao. Default - Expresso string que ser retornada como default caso o usurio no digite nenhum dado na caixa de dilogo. Se voc omitir este argumento, a textbox da caixa de dilogo ser exibida vazia. Xpos - Expresso numrica que especifica em twips a distncia horizontal entre a borda esquerda da tela e da caixa de dilogo. Se voc omitir este argumento, a caixa de dilogo ser centralizada horizontalmente. Ypos - Expresso numrica que especifica em twips a distncia vertical entre a borda superior da caixa de dilogo e o topo da tela. Se voc omitir este argumento a caixa de dilogo ser centralizada verticalmente

Onde:

86

ACCESS 2000 PROGRAMAO EM VBA INSTR Categoria: Finalidade: Sintaxe:

SENAC-RS

Onde:

Exemplo:

Funes de Manipulao de Strings Retorna a posio da primeira ocorrncia de um string dentro de outro INSTR([Incio,]String1,String2[,Compare]) Incio - Expresso numrica que indica a posio inicial de cada busca. Se omitido, a busca comea desde a primeira posio. String1 - String onde feita a procura String2 - Expresso string que est sendo procurada Compare - Especifica o tipo de comparao a ser efetuado entre as strings. Teste = InStr("Casa","as") ' Teste = 2 Teste = InStr("Casamento","t") ' Teste = 8 Teste = InStr("Casa","z") ' Teste = 0

INT Categoria: Finalidade: Sintaxe: Onde: Exemplo: ISARRAY Categoria: Finalidade: Sintaxe: Onde: Exemplo: ISDATE Categoria: Finalidade: Sintaxe: Onde: Exemplo: ISEMPTY Categoria: Finalidade: Sintaxe: Onde: Exemplo: ISMISSING Categoria: Finalidade: Sintaxe: Onde: Funes Matemticas Retorna a parte inteira de um nmero INT(Nmero) Nmero - Qualquer expresso numrica vlida. Se nmero contm Null o valor de retorno ser Null tambm. Idntico funo Fix Funes de Verificao Retorna um valor Boolean indicando se uma determinada varivel um Array. ISARRAY(Varname) Varname - Qualquer varivel de memria Dim MeuArray(2) As Integer, Nome As String Teste = IsArray(Nome) Teste = IsArray(MeuArray) ' Teste = False ' Teste = True

Funes de Verificao Retorna um valor Boolean indicando se uma determinada expresso pode ser convertida para uma data. ISDATE(Expresso) Expresso - Qualquer data ou string que possa ser reconhecida como uma data ou hora vlida dtmDado = "23/06/2001" strMens = "Hoje" Teste = IsDate(dtmDado) ' Teste = True Teste = IsDate(strMens) ' Teste = False Funes de Verificao Retorna um valor Boolean indicando se uma determinada varivel foi inicializada ou no. ISEMPTY(Expresso) Expresso - Qualquer expresso numrica ou string que possa ser reconhecida como um nome de varivel. Teste = IsEmpty(dtmDado) ' Teste = True Dado = Null Teste = IsEmpty(dtmDado) ' Teste = False Funes de Verificao Retorna um valor Boolean indicando se um argumento opcional foi passado para uma procedure ou no. ISMISSING(NomeArgumento) NomeArgumento - Nome de um argumento opcional em uma procedure. Retorna um valor True se o argumento especificado no foi

87

ACCESS 2000 PROGRAMAO EM VBA passado funo, caso contrrio a resposta ser False. Sub ProcTeste (arg1 as String, arg2 as Integer, arg3 as String) ..... If IsMissing(arg2) Then MsgBox "Este argumento obrigatrio para o clculo." End If ..... End Sub

SENAC-RS

Exemplo:

ISNULL Categoria: Finalidade: Sintaxe: Onde:

Funes de Verificao Retorna um valor Boolean indicando se uma expresso contm dados invlidos (Null). ISNULL(Expresso) Expresso - Qualquer valor numrico ou expresso string. Se a expresso avaliada tiver dados invlidos (Null) a funo resultar em True, caso contrrio o valor retornado ser False. strDado = "" Teste = IsNull(strDado) ' Teste = False strDado = Null Teste = IsNull(strDado) ' Teste = True

Exemplo: ISNUMERIC Categoria: Finalidade: Sintaxe: Onde: Exemplo: strDado = "Cem" Teste = IsNumeric(strDado) LBOUND Categoria: Finalidade: Sintaxe: Onde: Exemplo: LCASE Categoria: Finalidade: Sintaxe: Onde: Exemplo: LEFT Categoria: Finalidade: Sintaxe: Onde: Funes de Manipulao de Strings Retorna o nmero especificado de caracteres a partir do lado esquerdo de uma string. LEFT(String, Comprimento) String - Expresso string da qual os caracteres sero retornados. ' Teste = False

Funes de Verificao Retorna um valor Boolean indicando se uma determinada expresso pode ser avaliada como numrica. ISNUMERIC(Expresso) Expresso - Qualquer valor numrico ou expresso string intDado = "100" Teste = IsNumeric(intDado) ' Teste = True

Funes de Array Retorna o menor elemento da dimenso especificada de um determinado array. LBOUND(Arrayname[, Dimenso]) Arrayname - Nome da varivel array Dimenso - Nmero que indica que a dimenso do array est sendo inspecionada. Utilize 1 para a primeira dimenso, 2 para a segunda e assim por diante. Dim Dado (5 to 10) Teste = LBound(Dado,1) ' Teste = 5 Funes de Manipulao de Strings Retorna uma string convertida para letras minsculas LCASE(string) String - Qualquer expresso string vlida. Somente as letras maisculas sero convertidas para minsculas. Os demais caracteres como letras minsculas, nmeros e sinais permanecem inalterados. Dado = "CAIXA ALTA" Teste = LCase(Dado) Teste = "caixa alta"

88

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

Comprimento - Expresso numrica indicando quantos caracteres sero retornados. Se igual a 0, uma string de tamanho zero ser retornada. Se o comprimento for maior que o nmero de caracteres da string, toda ela ser retornada. Dado = "SENAC Informtica" Teste = Left(Dado,1) ' Teste = "S" Teste = Left(Dado,6) ' Teste = "SENAC " Teste = Left(Dado,10) ' Teste = "SENAC Info" Funes de Sistema Operacional Carrega uma imagem dentro de um objeto Form object, Controle PictureBox ou controle Image LOADPICTURE([StringExpression]) StringExpression - Nome do arquivo grfico a ser carregado. Alguns formatos de arquivo suportados pelo Visual Basic so os seguintes: Bitmap (BMP), Icon (.ICO), e Metafile (.WMF). Form1.Picture = LoadPicture(PARTY.BMP) Form1.Icon = LoadPicture(PHONE01.ICO)

Exemplo: LOADPICTURE Categoria: Finalidade: Sintaxe: Onde:

Exemplo: LOG Categoria: Finalidade: Sintaxe: Onde: Exemplo: LTRIM Categoria: Finalidade: Sintaxe: Onde: Exemplo: MID Categoria: Finalidade: Sintaxe:

Funes Matemticas Calcula o logaritmo natural de um nmero LOG(Nmero) Nmero - Qualquer expresso numrica vlida maior que zero. Teste = Log(0) Teste = Log(5) ' Teste = 1 ' Teste = 1.6094379124341

Funes de Manipulao de Strings Retorna uma cpia de uma string eliminando os espaos em branco existentes entre o incio da string e o primeiro caractere. LTRIM(String) String - Qualquer expresso string vlida. Se a string contm Null, Null retornado. Dado = " Casa" Teste = LTrim(Dado) ' Teste = "Casa"

Onde:

Funes de Manipulao de Strings Retorna o nmero especificado de caracteres de um string. MID(String, Start [,Length]) String -Qualquer expresso string vlida. Se a string contm Null, Null retornado. Start - Posio inicial a partir da qual os caracteres sero selecionados. Se a posio inicial for maior que o nmero de caracteres da string, uma string de tamanho zero ser retornada. Length - Nmero de caracteres que sero selecionados. Se omitido todos os caracteres desde a posio inicial especificada at o fim da mesma sero selecionados. Dado = "Vermelho" Teste = Mid(Dado,1,3) Teste = Mid(Dado,4) Teste = Mid(Dado,5,4) ' Teste = "Ver" ' Teste = "melho" ' Teste = "elho"

Exemplo:

89

ACCESS 2000 PROGRAMAO EM VBA MINUTE Categoria: Finalidade: Sintaxe: Onde: Exemplo: MONTH Categoria: Finalidade: Sintaxe: Onde: Exemplo: MSGBOX Categoria: Finalidade: Sintaxe:

SENAC-RS

Funes de Data e Hora Retorna o nmero de minutos da hora especificada (de 0 59) MINUTE ( Time ) Time - Qualquer expresso numrica ou string que possa representar um intervalo de tempo. Se Time contm Null, o valor de retorno da funo ser Null Tambm. Teste = Minute(#8:33:17 PM#) ' Teste = 33

Funes de Data e Hora Retorna o nmero do ms de uma determinada data (de 1 12) MONTH (Data) Data - A data a ser avaliada pela funo Teste = Month(#23/06/2001#) ' Teste = 6

Onde:

Funes de Sistema Operacional Exibe uma mensagem em uma janela de dilogo e espera que o usurio escolha um dos botes disponveis. Aps a seleo o VBA retorna um valor indicando o boto escolhido. MSGBOX( Prompt [,Buttons][,Title]) Prompt - Expresso string que ser exibida como mensagem na caixa de dilogo. O comprimento mximo da mensagem de 1024 caracteres. Voc pode quebrar a mensagem em vrias linhas utilizando a combinao de caracteres de retorno de carro Chr(13) e mudana de linha Chr(10), como em (Chr(13) & Chr(10)) Buttons - Expresso numrica que a soma dos valores que especificam o nmero e tipo de botes a serem exibidos. Voc tambm pode especificar o estilo de cone a ser usado, o boto default e a modalidade da caixa de mensagem. Se omitido, o valor default para os botes zero. Title - Expresso string que ser exibida na barra de ttulo da caixa de dilogo. Se voc omitir este argumento o nome exibido na barra de ttulo ser o nome de sua aplicao. Ajustes: 0 - Boto OK (default) 1 - Botes OK e Cancel 2 - Botes Abort, Retry, e Ignore 3 - Botes Yes, No e Cancel 4 - Botes Yes e No 5 - Botes Retry e Cancel 16 - cone de Parada Crtica. 32 - cone de Pergunta 48 - cone de Ateno 64 - cone de Informao 0 - Primeiro boto default 256 - Segundo boto default 512 - Terceiro boto default 0 - Aplicao Modal; O usurio deve responder mensagem exibida antes de prosseguir com a execuo da aplicao atual. 4096 - Sistema Modal; Todas as aplicaes so suspensas at o usurio responder a mensagem. O primeiro grupo de valores descreve o nmero e o tipo de botes exibidos. O segundo grupo (16,32,48,64) descreve o estilo do cone exibido. O terceiro grupo (0,256,512) determina que boto o default. O quarto e ltimo grupo (0,4096) determina a modalidade da caixa de dilogo. Voc deve selecionar um nmero de cada grupo e somar todos para obter a aparncia desejada para sua Message Box.

90

ACCESS 2000 PROGRAMAO EM VBA Valores de Retorno 1 - OK 2 - Cancel 3 - Abort 4 - Retry 5 - Ignore 6 - Yes 7 - No ' Exibe botes OK e Cancel e cone de Parada Crtica Teste = MsgBox("Teste",17,"MsgBox") Exemplo:

SENAC-RS

' Exibe Yes/No numa janela de Ateno com o primeiro boto default Teste = MsgBox("Teste",68,"MsgBox") NOW Categoria: Finalidade: Sintaxe: Exemplo: OCT Categoria: Finalidade: Sintaxe: Onde: Exemplo: QBCOLOR Categoria: Finalidade: Sintaxe: Onde: Funes de Converso de Dados Retorna uma string representando o valor octal de um nmero. OCT(Nmero) Nmero - Qualquer expresso numrica ou string vlida. Teste = Oct(8) Teste = Oct(456) ' Teste = 10 ' Teste = 713 Funes de Data e Hora Retorna a data e hora atuais do seu sistema NOW Teste = Now ' Teste = 21/05/2001 09:50:25

Funes de Sistema Operacional Retorna o valor da cor RGB correspondente ao nmero de cor informado. QBCOLOR(cor) Cor - Nmero de 0 15 conforme descrito na seo ajustes 00 - Black 01 - Blue 02 - Green 03 - Cyan 04 - Red 05 - Magenta 06 - Yellow 07 - White 08 - Gray 09 - Light Blue 10 - Light Green 11 - Light Cyan 12 - Light Red 13 - Light Magenta 14 - Light Yellow 15 - Bright White

Exemplo: RGB Categoria: Finalidade: Sintaxe:

Form1.BackColor = QBColor(cor) Funes de Sistema Operacional Retorna um nmero representando uma cor do padro RGB RGB( Red, Green, Blue)

91

ACCESS 2000 PROGRAMAO EM VBA Onde:

SENAC-RS

Red - Nmero entre 0 to 255, inclusive, que representa o componente vermelho de uma cor. Green - Nmero entre 0 to 255, inclusive, que representa o componente verde de uma cor. Blue - Nmero entre 0 to 255, inclusive, que representa o componente azul de uma cor. CommDialog.Color = RGB(255,0,0) Funes de Manipulao de Strings Retorna o nmero especificado de caracteres a partir do lado direito de uma string RIGHT( String, Comprimento) String - Expresso string da qual os caracteres sero retornados. Comprimento - Expresso numrica indicando quantos caracteres sero retornados. Se igual 0 uma string de tamanho zero ser retornada. Se o comprimento for maior que o nmero de caracteres da string ,toda ela ser retornada. Dado = "SENAC Informtica" Teste = Right(Dado,1) Teste = "a" Teste = Right(Dado,6) Teste = "mtica" Teste = Right(Dado,11) Teste = "Informtica " Funes Matemticas Retorna um nmero aleatrio (randmico) RND[(Nmero]) Nmero- Qualquer expresso numrica vlida. Teste = Rnd Funes de Manipulao de Strings Retorna uma cpia de um string eliminando os espaos em branco existentes entre o ltimo caractere da string e o fim da mesma. RTRIM(String) String - Qualquer expresso string vlida. Se o string contm Null, o Null retornado. Dado = "Casa " Teste = RTrim(Dado) ' Teste = "Casa"

Exemplo: RIGHT Categoria: Finalidade: Sintaxe: Onde:

Exemplo:

RND Categoria: Finalidade: Sintaxe: Onde: Exemplo: RTRIM Categoria: Finalidade: Sintaxe: Onde: Exemplo: SECOND Categoria: Finalidade: Sintaxe: Onde: Exemplo: SGN Categoria: Finalidade: Sintaxe: Onde: Funes Matemticas Retorna um intervalo conforme o sinal do nmero SGN(Nmero) Nmero - Qualquer expresso numrica vlida. Ajustes : >0 - Retorna 1 =0 - Retorna 0 <0 - Retorna -1 Teste = Sgn(12) ' Teste = 1

Funes de Data e Hora Retorna o nmero de segundos da hora especificada (de 0 59) SECOND(Time) Time - Qualquer expresso numrica ou string que possa representar um intervalo de tempo. Se Time contm Null, o valor de retorno da funo ser Null tambm. Teste = Second(#8:33:17#) Teste = 17

Exemplo:

92

ACCESS 2000 PROGRAMAO EM VBA Teste = Sgn(-2.4) Teste = Sgn(0) SHELL Categoria: Finalidade: Sintaxe: Onde: ' Teste = -1 ' Teste = 0

SENAC-RS

Funes de Sistema Operacional Inicia a execuo de um programa aplicativo qualquer. SHELL( PathName [,WindowsStyle]) PathName- Nome do programa a ser executado. Pode incluir eventuais argumentos na linha de comando. Tambm pode incluir o diretrio e drive onde est localizado o executvel. Voc tambm pode informar o nome do documento se o mesmo tiver sua extenso associada a um executvel no Windows (o arquivo .txt abrir pelo NotePad). WindowsStyle - Nmero que corresponde ao estilo da janela em que o programa ser executado. Se omitido o programa ser executado minimizado. Ajustes: 0 - A janela oculta e o foco passado para esta janela. 1 - A janela tem o foco e restaurada para seu tamanho e posio original. 2 - A janela exibida como um cone com foco. 3 - A janela maximizada com foco 4 - A janela restaurada ao seu mais recente tamanho e posio. A janela corrente permanece ativa. 6 - A janela exibida como um cone. A janela corrente permanece ativa. Teste = Shell("C:\WINDOWS\CALC.EXE",1) Funes Matemticas Calcula o seno de um nmero SIN(Nmero) Nmero - Qualquer expresso numrica vlida que expresse um ngulo em radianos . Teste = Sin(1.25) ' Teste = 0.948984619355586 Teste = Sgn(.79) ' Teste = 0.710353272417608

Exemplo: SIN Categoria: Finalidade: Sintaxe: Onde: Exemplo:

SPACE Categoria: Finalidade: Sintaxe: Onde: Exemplo: SQR Categoria: Finalidade: Sintaxe: Onde: Exemplo: STR Categoria: Finalidade: Sintaxe:

Funes de Manipulao de Strings Retorna um string com o nmero de espaos em branco especificados pelo usurio. SPACE(Nmero) Nmero - Quantidade de espaos em branco que voc quer incluir no string. Dado = "Passo" Teste = Dado & Space(2) & "Firme" ' Teste = "Passo Firme"

Funes Matemticas Calcula a raiz quadrada de um nmero SQR(Nmero) Nmero - Qualquer expresso numrica vlida maior ou igual zero. Teste = SQR(16) ' Teste = 4

Funes de Converso de Dados Retorna um string representando o valor de um nmero STR(Nmero)

93

ACCESS 2000 PROGRAMAO EM VBA Onde: Exemplo: STRCOMP Categoria: Finalidade: Sintaxe: Onde: Nmero - Qualquer expresso numrica vlida. Teste = Str(123) Teste = Str(2001) ' Teste = "123" ' Teste = "2001"

SENAC-RS

Funes de Manipulao de Strings Retorna um valor indicando o resultado de uma comparao de strings (se maior, igual, ou menor) StrComp(String1, String2 [,Compare]) String1 - Qualquer expresso string vlida String2 - Qualquer expresso string vlida Compare - Especifica o tipo de comparao a ser efetuada. Ajustes: String1 < String2 String1 = String2 String1 > String2 String1 ou String2 - Retorna -1 - Retorna 0 - Retorna 1 = NULL - Retorna Null

Exemplo:

Dado1 = "ABCD" Dado2 = "abcd" Teste = StrComp(Dado1,Dado2,1) ' Teste = 0 Teste = StrComp(Dado1,Dado2,0) ' Teste = -1 Teste = StrComp(Dado2,Dado1) ' Teste = 1 Funes de Manipulao de Strings Retorna um string convertido de acordo com a operao especificada pelo usurio STRCONV(String, Conversion) String - O string a ser convertido Conversion - A soma dos valores que especificam o tipo da converso a ser feita. Ajustes: 1 - Retorna o string para caracteres maisculos 2 - Converte o string para caracteres minsculos 3 - Converte a primeira letra de cada palavra do string para maiscula String1 > String2 - Retorna 1 String1 ou String2 = NULL - Retorna Null

STRCONV Categoria: Finalidade: Sintaxe: Onde:

Exemplo: STRING Categoria: Finalidade: Sintaxe: Onde:

Dado = access avanado Teste = StrConv(Dado,3) Teste = Access Avanado Funes de Manipulao de Strings Retorna um string com caracteres repetidos no comprimento especificado pelo usurio STRING(Nmero, Caractere ) Nmero - Comprimento do string a ser retornado Caractere - Cdigo do caractere ou expresso string cujo primeiro caractere ser utilizado para construo do novo string. Teste = String(5,"*") Teste = String(5,42) Teste = String(10,"ABC") ' Teste = "*****" ' Teste = "*****" ' Teste = "AAAAAAAAAA"

Exemplo:

94

ACCESS 2000 PROGRAMAO EM VBA TAN Categoria: Finalidade: Sintaxe: Onde: Exemplo: TIME Categoria: Finalidade: Sintaxe: Exemplo: TIMER Categoria: Finalidade: Sintaxe: Exemplo: TRIM Categoria: Finalidade: Sintaxe: Onde: Exemplo: Funes de Data e Hora Retorna a hora atual do sistema TIME Teste = Time ' Teste = 15:43:05

SENAC-RS

Funes Matemticas Calcula a tangente de um nmero TAN( Nmero ) Nmero - Qualquer expresso numrica vlida que expresse um ngulo em radianos. Teste = Tan(.79) ' Teste = 1.00924628838275

Funes de Data e Hora Retorna o nmero de segundos decorridos desde s 0:00hs (de 0 59) TIMER Teste = Timer ' Teste = 855912.6 Funes de Manipulao de Strings Retorna uma cpia de um string eliminando os espaos existentes entre o incio do string e o primeiro caractere e o ltimo caractere do string e o fim do mesmo. TRIM(String) String - Qualquer expresso string vlida. Se o string contm Null, o Null retornado. Dado = " Casa " Teste = Trim(Dado) ' Teste = "Casa"

UBOUND Categoria: Finalidade: Sintaxe: Onde:

Funes de Array Retorna o maior elemento da dimenso especificada de um determinado array. UBOUND(ArrayName [,Dimenso]) ArrayName - Nome da varivel Array Dimenso - Nmero que indica que dimenso do array est sendo inspecionada. Utilize 1 para a primeira dimenso, 2 para a segunda e assim por diante.

Exemplo: UCASE Categoria: Finalidade: Sintaxe: Onde: Exemplo:

Dim Dado(5 To 10) Teste = UBound(Dado,1)

' Teste = 10

Funes de Manipulao de Strings Retorna uma string convertida para letras maisculas UCASE (String) String - Qualquer expresso string vlida. Somente as letras minsculas sero convertidas maisculas. Os demais caraceteres como nmeros e sinais permanecem inalterados. Dado = "caixa alta" Teste = UCase(Dado) ' Teste = "CAIXA ALTA"

95

ACCESS 2000 PROGRAMAO EM VBA

SENAC-RS

VAL Categoria: Finalidade: Sintaxe: Onde: Exemplo: Funes de Converso de Dados Retorna os nmeros contidos em um string VAL(String) String - Qualquer expresso string vlida. Teste = Val("2457") ' Teste = 2457 Teste = Val("2 45 7") ' Teste = 2457 Teste = Val("24 and 57") ' Teste = 24

VARTYPE Categoria: Finalidade: Sintaxe: Onde:

Funes de Verificao Retorna um valor indicando o subtipo de uma varivel VARTYPE(VarName) VarName - Qualquer varivel de memria vlida Ajustes: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 17 8192 Empty Null Integer Long Integer Single Double Currency Date String OLE Automation Object Error Boolean Variant (usada somente com arrays de Variants) No OLE Automation Object Byte - Array ' Teste = 2

Exemplo: WEEKDAY Categoria: Finalidade: Sintaxe: Onde:

Dim Dado As Integer Teste = VarType (Dado)

Funes de Data e Hora Retorna o nmero do dia da semana (1 - Domingo, etc) WEEKDAY( Data [, Firstdayofweek]) Data - Expresso string ou numrica representando uma data. Se data contm Null, Null retornado Firstdayofweek - Um constante que define o primeiro dia da semana. Caso voc no especifique, o Domingo ser considerado como primeiro dia. Veja a seo Ajustes da funo DateDiff para maiores detalhes. Teste = WeekDay(#23/06/2001#) ' Teste = 7 Funes de Data e Hora Retorna o nmero do ano de uma determinada data. YEAR(Data) Data - Expresso string ou numrica representando uma data. Se Data contm Null, o Null retornado. Teste = Year(#23/06/2001#) ' Teste = 2001

Exemplo: YEAR Categoria: Finalidade: Sintaxe: Onde: Exemplo:

96

Você também pode gostar