Buscar

Access97-VBA Koga 04-10-01

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 149 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 149 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 149 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Microsoft© Access 97 Avançado
Telefax: (31) 3274-1222 – www.treinarinformatica.com.br
 Microsoft© Access 97 Avançado
SUMÁRIO
Reprodução proibida
1. INTRODUÇÃO ............................................................................................................... 6
EXERCÍCIOS DE FIXAÇÃO – INTRODUÇÃO .............................................................. 8
2. PROGRAMAÇÃO NO MS ACCESS 97 ........................................................................ 9
2.1. MACRO X MÓDULO..................................................................................................... 9
2.2. MÓDULOS.................................................................................................................. 11
2.3. QUANDO USAR PROGRAMAÇÃO .................................................................................. 12
2.4. MÓDULO PADRÃO ...................................................................................................... 13
2.5. MÓDULO DE CLASSE EM FORMULÁRIOS E RELATÓRIOS ................................................ 13
2.6. MÓDULO DE CLASSE .................................................................................................. 14
2.7. SEÇÃO DE DECLARAÇÕES ........................................................................................... 15
2.8. SEÇÃO DE PROCEDIMENTOS........................................................................................ 16
2.9. O EDITOR DE CÓDIGO ................................................................................................. 16
2.9.1. Cores de código ................................................................................................. 17
2.9.2. Opções de codificação........................................................................................ 18
2.9.3. Configurações da janela..................................................................................... 19
2.10. JANELAS DO EDITOR DE CÓDIGO DO ACCESS ............................................................. 19
2.10.1. Janela de Código.............................................................................................. 19
2.10.2. Janela Depurar ................................................................................................ 20
2.10.3. Janela Pesquisador de Objetos......................................................................... 23
PRÁTICA 2 – PROGRAMAÇÃO NO MS ACCESS 97.................................................. 24
EXERCÍCIO 1 – Criando um módulo padrão............................................................... 24
EXERCÍCIO 2 – Criando um módulo de classe em formulário..................................... 24
EXERCÍCIOS DE FIXAÇÃO – PROGRAMAÇÃO NO MS ACCESS 97 ...................... 26
3. PROCEDIMENTOS EM MÓDULO PADRÃO .......................................................... 28
3.1. COMPILAÇÃO DE MÓDULO.......................................................................................... 30
3.2. TESTE DE EXECUÇÃO DE PROCEDIMENTO EM MÓDULO PADRÃO ................................... 31
3.3. EXECUÇÃO PASSO-A-PASSO........................................................................................ 31
3.4. INSPEÇÃO DE VARIÁVEIS ............................................................................................ 32
3.5. PONTO DE INTERRUPÇÃO............................................................................................ 33
3.6. CHAMADA DE PROCEDIMENTOS.................................................................................. 34
3.6.1. Passagem de Argumentos ................................................................................... 35
3.6.2. Retorno de Valor ................................................................................................ 36
3.6.3. Passagem de Argumentos por Valor e por Referência ........................................ 37
PRÁTICA 3 – CRIAÇÃO DE MÓDULO PADRÃO ....................................................... 40
EXERCÍCIO 1 – Criando um procedimento para cálculo de fatorial ........................... 40
EXERCÍCIOS DE FIXAÇÃO – CRIAÇÃO DE MÓDULO PADRÃO............................ 41
4. MÓDULO DE CLASSE EM FORMULÁRIO/RELATÓRIO .................................... 42
4.1. COLEÇÕES E OBJETOS DE FORMULÁRIO/RELATÓRIO ................................................... 43
4.2. PROPRIEDADES E MÉTODOS ....................................................................................... 45
4.3. COLEÇÃO PADRÃO E PROPRIEDADE PADRÃO................................................................ 45
4.4. PROPRIEDADES DE COLEÇÃO...................................................................................... 46
 Microsoft© Access 97 Avançado
SUMÁRIO
Reprodução proibida
4.5. SEÇÕES DE FORMULÁRIO/RELATÓRIO......................................................................... 47
4.6. EVENTOS DE FORMULÁRIO ......................................................................................... 47
EXERCÍCIOS DE FIXAÇÃO – MÓDULO DE CLASSE EM
FORMULÁRIO/RELATÓRIO........................................................................................ 49
5. ELEMENTOS DE PROGRAMAÇÃO......................................................................... 50
5.1. VARIÁVEIS............................................................................................................. 50
5.1.1. Declaração......................................................................................................... 50
5.1.2. Atribuição de valores à variáveis ....................................................................... 52
5.2. CONSTANTES ........................................................................................................ 53
5.2.1. Constantes Simbólicas........................................................................................ 53
5.2.2. Constantes Intrínsecas........................................................................................ 53
5.2.3. Constantes Definidas pelo Sistema ..................................................................... 54
5.3. VETORES E MATRIZES......................................................................................... 55
5.4. TIPOS DEFINIDOS PELO USUÁRIO..................................................................... 56
5.5. ESTRUTURA DE REPETIÇÃO............................................................................... 56
5.5.1. For..Next ............................................................................................................ 56
5.5.2. Do..Loop ............................................................................................................ 57
5.5.3. While..Wend ....................................................................................................... 58
5.5.4. For Each..Next ................................................................................................... 58
5.6. ESTRUTURA CONDICIONAL ............................................................................... 59
5.6.1. If...Then...Else .................................................................................................... 59
5.6.2. Select Case......................................................................................................... 60
5.7. ENTRADA E SAÍDA DE DADOS........................................................................... 61
5.7.1. Funções do VBA para entrada e saída................................................................ 62
5.7.2. Outros dispositivos de entrada e saída ............................................................... 63
5.8. COMENTÁRIOS...................................................................................................... 64
5.9. FUNÇÕES................................................................................................................ 64
5.10. ESCOPO DE IDENTIFICADORES........................................................................ 65
5.11. OBJETO DOCMD....................................................................................................66
6. EXPRESSÕES SQL ...................................................................................................... 67
7. FORMULÁRIOS AVANÇADOS ................................................................................. 69
7.1. FORMULÁRIO DE MANUTENÇÃO DE TABELAS ............................................. 69
7.1.1. Botões de Navegação Personalizados................................................................. 69
7.2. CAIXA DE DIÁLOGO............................................................................................. 71
7.2.1. Passagem De Parâmetros Para Procedimento ................................................... 72
7.2.2. Passagem De Parâmetros Para Consulta Parametrizada ................................... 72
7.2.3. Passagem De Parâmetros Para Relatório .......................................................... 73
7.2.4. Passagem De Parâmetros Para Formulário ....................................................... 76
7.3. FORMULÁRIO DE CONSULTA............................................................................. 79
7.4. CAIXA DE MENSAGEM ........................................................................................ 83
8. ACESSO A BANCO DE DADOS ................................................................................. 85
 Microsoft© Access 97 Avançado
SUMÁRIO
Reprodução proibida
8.1. HIERARQUIA DO OBJETOS DAO ................................................................................. 85
8.2. SINTAXE PARA REFERENCIAR OBJETOS EM COLEÇÃO.................................................. 86
8.3. COLEÇÃO PADRÃO..................................................................................................... 87
8.4. REFERÊNCIA A OBJETOS POR MEIO DE VARIÁVEIS ....................................................... 87
8.5. PROPRIEDADES E MÉTODOS ....................................................................................... 88
8.6. ACESSO A BANCO DE DADOS ACCESS......................................................................... 89
8.7. ACESSO A BANCOS DE DADOS EXTERNOS................................................................... 92
8.7.1. Vinculação de Tabelas Externas......................................................................... 93
8.7.2. Abertura Direta de Tabelas Externas ................................................................. 96
9. ACESSO A ARQUIVOS E IMPRESSORA ................................................................. 99
10. TRATAMENTO DE ERRO.......................................................................................101
10.1. DESVIO PARA ROTINA DE TRATAMENTO DE ERRO .....................................................102
10.1.1. Tratar o erro e terminar o programa...............................................................102
10.1.2. Tratar o erro e voltar à execução na mesma linha do erro...............................103
10.1.3. Tratar o erro e voltar à execução na linha seguinte à linha de erro.................103
10.1.4. Tratar o erro e desviar a execução para outro rótulo. .....................................103
10.1.5. Prosseguir o programa após erro....................................................................104
10.1.6. Evento Erro.....................................................................................................105
10.2. DEPURAÇÃO DO PROGRAMA....................................................................................105
11. AUTOMAÇÃO ...........................................................................................................107
11.1. AUTOMAÇÃO COM O MICROSOFT WORD 97 .............................................................109
Hierarquia dos Objetos do Microsoft Word 97............................................................109
11.2. AUTOMAÇÃO COM O MICROSOFT EXCEL 97 ............................................................110
Hierarquia do Objetos do Microsoft Excel 97 .............................................................110
Detalhamento do Objeto Worksheets...........................................................................110
Detalhamento do Objeto Charts..................................................................................111
Detalhamento do Objeto Chartgroups.........................................................................112
11.3. AUTOMAÇÃO COM MICROSOFT PROJECT 95.............................................................117
Hierarquia dos Objetos do Microsoft Project 95 (versão 4.1) .....................................117
11.4. AUTOMAÇÃO COM SCHEDULE+ 7.0 .........................................................................119
Hierarquia dos Objetos do Schedule+ 7.0...................................................................119
11.5. REFERÊNCIA À BIBLIOTECA DE OBJETOS....................................................119
12. CHAMADA À API DO WINDOWS 95.....................................................................123
13. SEGURANÇA.............................................................................................................129
13.1. SENHA DE BANCO DE DADOS.........................................................................129
13.1.1. DEFININDO UMA SENHA PARA O BANCO DE DADOS ............................129
13.1.2. ABRINDO UM BANCO DE DADOS PROTEGIDO POR SENHA ...................130
13.1.3. REMOVENDO SENHA DE BANCO DE DADOS............................................130
13.1.4. DEFININDO SENHA POR CÓDIGO VBA......................................................131
13.1.5. ABRINDO UM BANCO DE DADOS PROTEGIDO VIA CÓDIGO VBA..........131
 Microsoft© Access 97 Avançado
SUMÁRIO
Reprodução proibida
13.1.6. ALTERANDO A SENHA VIA CÓDIGO VBA...................................................131
13.2. CRIAÇÃO DE ARQUIVO MDE...........................................................................132
13.3. CRIPTOGRAFIA DE BANCO DE DADOS..........................................................134
13.3.1. CRIANDO UM ARQUIVO CRITPTOGRAFADO ............................................135
13.3.2. REVERTENDO A CRITPTOGRAFIA..............................................................135
13.3.2. CRIPTOGRAFIA POR CÓDIGO VBA ............................................................135
13.4. SEGURANÇA EM NÍVEL DE USUÁRIO............................................................136
13.4.1. PROPRIEDADE SOBRE O BANCO DE DADOS E OBJETOS........................137
13.4.2. IMPLEMENTANDO SEGURANÇA EM NÍVEL DE USUÁRIO .......................137
13.4.2. LOGON POR CÓDIGO VBA ..........................................................................141
13.4.3. TROCA DE SENHA VIA CÓDIGO VBA..........................................................142
13.4.4. RETIRAR PEMISSÃO DE CRIAR NOVOS BANCOS DE DADOS...................143
13.4.5. RETIRAR PEMISSÃO DE CRIAR NOVAS TABELAS E CONSULTAS.............144
ANEXO A - CONVENÇÃO DE NOMES PARA DESENVOLVIMENTO DE
APLICAÇÕES COM PRODUTOS MICROSOFT ........................................................145
MICROSOFT ACCESS 97.............................................................................................146
Hierarquia dos objetos do Access ...............................................................................146
Tags para objetos da janela de banco de dados do ACCESS.......................................146
Tags para objetos controles do ACCESS.....................................................................146
Tags para variáveis do ACCESS .................................................................................147
DATA ACCESS OBJECTS - DAO ................................................................................147
Hierarquia dos objetos DAO para Microsoft Jet Workspaces......................................147
Hierarquia dos objetos DAO para ODBCDirect Workspaces......................................148
Tags para Data Access Objects - DAO........................................................................148
MICROSOFTVISUAL BASIC 5.0 ................................................................................149
Tags para controles do Visual Basic ...........................................................................149
MICROSOFT VISUAL BASIC FOR APPLICATION - VBA........................................149
Tags para variáveis do Visual Basic for Application ...................................................149
 Microsoft© Access 97 Avançado
Reprodução proibida
6
1. INTRODUÇÃO
No MS Access, você armazena dados em tabelas e recupera informações por meio de
consultas, de forma interativa diretamente na janela de Banco de Dados. Esta forma de
trabalhar exige do usuário final um alto nível de conhecimento do MS Access.
Em vez de acessar diretamente as tabelas e consultas, você pode construir uma
interface com formulários e relatórios. No curso básico, você usa inicialmente os Assistentes
e depois pode construir os formulários e relatórios manualmente no modo Estrutura. Esta
forma de criar aplicativos atende a problemas simples de cadastramento e recuperação de
dados e exige que o usuário final tenha apena um conhecimento superficial do MS Access.
Com o tempo, você sente necessidade de o aplicativo dar maior controle no tratamento
dos dados e que a interface seja mais segura e simples de usar, não exigindo que o usuário
final tenha de saber o MS Access para operar o aplicativo. Torna-se necessário então
desenvolver aplicações usando programação dentro do MS Access.
Este curso ensinará a programação do MS Access 97, utilizando a linguagem Visual
Basic for Application – VBA, para que você desenvolva aplicativos completos no MS Access.
A Microsoft dispõe de três edições da linguagem Visual Basic:
§ Visual Basic - VB
§ Visual Basic for Application – VBA
§ Visual Basic Scripting – VBScript
A primeira é a linguagem completa, feita para desenvolver aplicativos profissionais.
Ela gera um programa executável que pode ser instalado em qualquer PC com Windows
95/98, NT ou 2000, sem a necessidade de o Visual Basic estar instalado. Alguns dos recursos
que só existem no VB é a possibilidade de desenvolver aplicativos cliente/servidor que acessa
bancos de dados relacionais, como o Microsoft SQL Server ou Oracle, e a criação de
componentes ActiveX, atualmente chamados de componentes COM (Component Object
Model). A linguagem Visual Basic é suportada no software Microsoft Visual Basic.
O VBA possui alguns recursos a menos que o VB, mas a sintaxe é idêntica. O VBA é
uma linguagem embutida nos aplicativos Microsoft Office 97 (exceto o Outlook) e no
Microsoft Project 98. Não é possível gerar um programa executável. Ela é uma linguagem
interpretada que depende do Microsoft Office 97 instalado ou o Microsoft Project 98.
A linguagem Visual Basic é o recurso que integra as melhores características de cada
aplicativo do MS Office. Por meio de programação, VB, VBA ou VBScript, é possível
construir uma interface única em um único aplicativo, como por exemplo o Access, e acessar
todos os recursos especializados dos demais integrantes do pacote Office ou mesmo do Back
Office. Esta técnica é conhecida como Automação, que veremos neste curso.
O VBScript é a versão mais simples do Visual Basic usado principalmente na
confecção de páginas WEB. Ele é suportado nos seguintes produtos:
§ MS Outlook 97/98
§ MS SQL Server 7.0
 Microsoft© Access 97 Avançado
Reprodução proibida
7
§ Windows Scripting Host
§ MS Internet Explorer 3 ou superior
Vários softwares não Microsoft também suportam o VBScript para automatizar
tarefas.
 Microsoft© Access 97 Avançado
Reprodução proibida
8
EXERCÍCIOS DE FIXAÇÃO – INTRODUÇÃO
1) As edições do Visual Basic são:
a. ( ) Visual Basic Professional, Visual Basic for Application e Visual Basic for Windows
b. ( ) Visual Basic, Visual Basic for Application e Visual Basic Scripting
c. ( ) Windows Scripting Host, JavaScript e VBA
d. ( ) Windows 95, Windows 98 e Windows NT
e. ( ) MS Access 2.0, MS Access 95 e MS Access 97
2) A linguagem de programação suportada pelo MS Access 97 é:
a. ( ) Access Basic
b. ( ) VBScript
c. ( ) JavaScript
d. ( ) Visual Basic for Application
e. ( ) Visual Basic Enterprise Edition
3) A execução de código VBA em um banco de dados MS Access 97 requer:
a. ( ) A geração de um arquivo executável (.exe)
b. ( ) O MS Office instalado no computador.
c. ( ) O MS Internet Explorer 4.01 com Service Pack 1
d. ( ) O MS Office 97 Professional ou superior instalado no computador onde a aplicação
rodará.
e. ( ) O Windows NT 4.0 Server
 Microsoft© Access 97 Avançado
Reprodução proibida
9
2. PROGRAMAÇÃO NO MS ACCESS 97
2.1. Macro x Módulo
No MS Access, o termo macro designa ações pré-definidas dispostas sequencialmente.
Para não-programadores, as macros podem ser usadas para operações simples, como abrir um
formulário ou relatório, executar uma consulta ou acionar um item de menu.
A chamada de macros por botões de comando em formulários e menus fornece ao
aplicativo uma interface com certo grau de controle de navegação pelas telas e automação.
Isto também restringe o acesso do usuário a recursos críticos do MS Access, tal como alterar
a estrutura de uma tabela, e não exige do usuário um alto nível de conhecimento sobre o MS
Access.
Você pode criar botões de comando em formulários e associar macros que realizam
ações pré-definidas. Por exemplo, o botão de comando cuja legenda é Cadastrar Livros
invoca a macro Macro1. Na Macro1 existe uma ação AbrirFormulário que abre o
formulário chamado frmCadastra_Livros.
A estrutura do formulário mostra que o evento do botão cmdCadastraLivros invoca a
macro Macro1 através do evento Ao clicar.
 Microsoft© Access 97 Avançado
Reprodução proibida
10
A manutenção de aplicativos baseados em macros é difícil, pois existem objetos
distintos: o formulário e a macro. Para cada controle que possui evento associado haveria a
necessidade de uma macro. A quantidade de objetos para gerenciar tornaria difícil a
compreensão do fluxo de execução.
Além disso, as macros não oferecem um bom controle de fluxo, pois não possuem
estruturas de controle sofisticados como If..Then..Else e estruturas de repetição como Do
While.
A construção de aplicativos usando programação reduz a complexidade do fluxo
porque a ação é codificada na própria estrutura do formulário. Os eventos de cada controle
apontam para procedimentos escritos em um linguagem de programação poderosa – o Visual
Basic for Application – que permite a criação de rotinas complexas e estruturadas.
No exemplo a seguir, os dois controles invocam os procedimentos de evento
cmdConsultaAutores_Click e cmdCadastraLivros_Click. Estes controles são botões de
comando, cujas propriedades Ao clicar apontam para o código que se encontra na própria
estrutura do formulário.
 Microsoft© Access 97 Avançado
Reprodução proibida
11
A programação no MS Access 97 torna o uso de macros obsoleta, pois tudo que as
macros fazem a programação consegue fazer com maior grau de controle sobre o fluxo de
execução. Portanto, não faz sentido neste curso ensinar como se constrói macros.
2.2. Módulos
A programação no MS Access é feita nos módulos.
Um módulo é uma coleção de declarações e procedimentos armazenados
conjuntamente, formando uma unidade. As declarações são instruções que direcionam o
comportamento dos procedimentos em todo um módulo.Um procedimento é uma unidade de
código VBA que realiza uma operação específica. Por exemplo, o cálculo dos dígito
verificador do CPF é um procedimento e o cálculo do fatorial de um número é outro.
Os módulos podem estar alojados em três lugares:
§ Na guia Módulos da janela de Banco de Dados do MS Access. Nela existem dois tipos de
módulos: módulo padrão e módulo de classe.
§ Embutido em um formulário do Access. Contém módulo de classe.
§ Embutido em um relatório do Access. Contém módulo de classe.
Cada módulo na guia Módulos recebe um nome único dentro do aplicativo (no
mesmo arquivo .mdb). O nome deve seguir uma regra de nomenclatura:§ Pode conter até 64 caracteres, entre letras e números
 Microsoft© Access 97 Avançado
Reprodução proibida
12
§ Aceita espaços e caracteres especiais, exceto ponto, exclamação, acento grave, colchetes e
caracteres de controle (código ASCII de 0 a 31).
§ Aceita letras maiúsculas e minúsculas indistintamente.
§ Não pode conter espaços no início do nome
É recomendável não usar espaços nem caracteres especiais e evitar nomes muito
longos. O Anexo A sugere uma convenção de nomes a ser adotada no desenvolvimento de
aplicativos com produtos Microsoft.
Os módulos de classe em formulários e relatórios não recebem nomes, pois são
gravados juntamente com o formulário ou relatório aos quais estão relacionados.
O código de um módulo é composto por:
§ Instruções, funções e palavras-chave do VBA
§ Nomes de variáveis, constantes ou procedimentos fornecidos pelo desenvolvedor
§ Instruções e cláusulas da linguagem SQL
§ Propriedades e métodos de objetos
As instruções, funções, palavras-chave, cláusulas, propriedades e métodos são
palavras reservadas, ou seja, você não as pode usar como nome de procedimento ou nome de
variável ou constante.
2.3. Quando usar programação
No MS Access, usa-se programação em VBA:
q Para efetuar um processamento complexo, que não pode ser atendido com a utilização de
consultas, nem macros. Exemplo: O cálculo de faturamento exige ler todos os serviços
prestados em um período, computar para, cada fatura, os descontos, multas, juros,
impostos e taxas.
q Para criar funções definidas pelo usuário – UDF (User Defined Functions), por exemplo,
o cálculo dos dígitos verificadores do CGC.
q Para percorrer um registro de cada vez. As consultas de seleção e de refer6encia cruzada
retornam um conjunto de registros de uma vez só, mas ás vezes é necessário processar
cada registro, seja de uma tabela ou de uma consulta.
q Sempre que se necessitar de usar estruturas de repetição e condição complexa (do tipo Do
While e If...Then...Else).
q Para substituir macros por código VBA equivalente. As macros ficam armazenadas em
pastas de macro (a quinta guia da janela Banco de Dados), mas podem ser chamadas de
qualquer parte do Access. Ás vezes pode ficar difícil entender o emaranhado de chamadas
a elas. Os módulos, por formarem uma unidade, são mais compreensíveis, podendo ainda
ser impressas. Assim, o aplicativo pode ser construído de forma modular e concisa,
melhorando assim a sua legibilidade e documentação.
 Microsoft© Access 97 Avançado
Reprodução proibida
13
q Para manipular objetos de outros softwares, como o Word e Excel, através da automação.
q Para realizar operações de DDE (troca dinâmica de dados), como por exemplo ler uma
tela do Plenus (um emulador de terminal Unisys TB-27).
q Para efetuar transações com COMMIT e ROLLBACK.
2.4. Módulo padrão
Usa-se código em módulo padrão para criar procedimentos globais, isto é, aqueles que
serão usados por todo o aplicativo. Por exemplo, uma função para transformar um número em
extenso pode ser chamada em qualquer do aplicativo..
Os procedimentos armazenados em Módulo Padrão são do tipo Function (aquele que
retorna um valor, por exemplo o fatorial de um número) ou Sub (aquele que não retorna
valor, por exemplo, uma rotina para tratar e imprimir mensagens de erro na tela).
Uma janela de código em módulo padrão possui as características mostradas abaixo.
2.5. Módulo de classe em formulários e relatórios
Os módulos embutidos em formulário e relatórios são do tipo Módulo de Classe. São
módulos que residem na estrutura dos formulários e relatórios, assim como os objetos de
controle. Por ficarem atrás dos formulários e relatórios, são também chamados de code
 Microsoft© Access 97 Avançado
Reprodução proibida
14
behind form. Os módulos de classe em formulário e relatório contêm procedimentos de
evento, que respondem a eventos de formulário, relatório ou controle neles inseridos. No
Access 95, os módulos de classe só podem ser criados associados a formulários ou relatórios.
No Access 97, eles podem ser criados na guia de Módulos da janela de Banco de Dados.
Os procedimentos de evento em módulo de formulário respondem a eventos (tais
como o clicar do mouse) do próprio formulário, de suas seções (cabeçalho, detalhe, rodapé) e
dos controles. Os procedimentos de evento em módulo de relatório respondem a eventos do
próprio relatório e de suas seções somente.
Se se deseja que um evento em um formulário ou relatório acione um procedimento
Function ou Sub de um módulo padrão, é preciso que o procedimento de evento dentro do
módulo de formulário/relatório faça a chamada. O código abaixo é um procedimento de
evento ligado ao controle cmdOkButton que chama um procedimento Sub armazenado em
módulo padrão.
Private Sub cmdOkButton_Click()
 CalculaRateio()
End Sub
Uma janela de código em módulo de classe embutido em formulário/relatório tem as
características mostradas abaixo.
O módulo de classe em formulário ou de relatório também pode conter procedimentos
Sub ou Function.
2.6. Módulo de classe
O módulo de classe criado na guia Módulos da janela de Banco de Dados do Access
tem como objetivo implementar as classes de objetos definidas pelo desenvolvedor,
permitindo uma certa reusabilidade de código. Os formulários e relatórios são classes de
objetos pré-definidos, que possuem seus próprios métodos e propriedades. Ao construir um
módulo de classe na janela de módulo, você cria uma nova classe de objetos.
 Microsoft© Access 97 Avançado
Reprodução proibida
15
Os procedimentos Sub e Function tornam-se os métodos do novo objeto e os
procedimentos Property Let, Property Get e Property Set tornam-se as propriedades do
objeto.
A programação de classes de objetos é mais efetiva no Visual Basic, pois você pode
construir um objeto totalmente encapsulado em um arquivo DLL, EXE ou OCX e pode usá-lo
em qualquer outra linguagem que suporte a arquitetura COM (Componente Object Model).
2.7. Seção de declarações
A janela de código de módulo, seja padrão ou de classe, possui a seção de
declarações e a seção de procedimentos.
Na seção de declarações encontram-se as instruções de escopo de módulo, ou sejam,
as instruções da seção de declarações afetam todos os procedimentos daquele módulo. As
variáveis declaradas nesta seção também são de nível de módulo, o que quer dizer que todos
os procedimentos do módulo podem acessar e alterar o conteúdo destas variáveis.
Por padrão, a seção de declaração de módulo no Access vem com as instruções
Option Compare Database e Option Explicit.
A instrução Option Compare define a ordem em que os caracteres são comparados.
Se Option Compare não for definido, o padrão é Option Compare Binary, que define a
ordem de classificação de acordo com a página de código utilizado no Windows.
Tipicamente, comparação binária segue a seqüência:
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Com a opção Database, a comparação segue o que estiver definido nas opções do
Access (menu Ferramentas|Opções..., guia Geral, na caixa Nova Ordem de classificação do
banco de dados).
 Microsoft© Access 97 Avançado
Reprodução proibida
16
A instrução Option Explicit obriga que todas as variáveis sejam declaradas
explicitamente, ou seja, usando as instruções de declaração de variáveis (Dim, Redim,
Private, Public ou Static). É altamente recomendável que as variáveis sejam declaradas
explicitamente para que não haja conflitos de nomes de variáveis.
2.8. Seção de procedimentos
Na seção de procedimentos você escreve seus procedimentos. Os procedimentos de
um módulo padrão pode ser do tipo Sub ou Function, ou procedimentos de evento (no caso
de módulo de classe de formulário e relatório) ou procedimentos Property Let, Property Get
e Property Set (no caso de módulo de classe).
Todo procedimento deve ter um nome único em todo aplicativo e seguir as regras de
nomenclatura:
§ Podem ter até 255 caracteres.
§ Precisam começar com uma letra.
§ Podem incluir letras, números ou caracteres sublinhados (_).
§ Não podem incluir caracteresde pontuação ou espaços.
§ Não podem ser uma palavra reservada do Visual Basic.
§ Podem ser escritos com letras maiúsculas ou minúsculas,sem distinção.
Os procedimentos Sub começam com a instrução Sub, seguido do nome do
procedimento, e terminam com End Sub. Entre Sub e End Sub fica o código que realizará a
operação desejada. O procedimento Function começam com a instrução Function, seguida no
nome do procedimento, e termina com End Function.
Os procedimentos de um módulo de classe de formulários e relatórios podem ser do
tipo Sub ou Function, mas o usual é que contenham procedimentos de evento.
2.9. O editor de código
A digitação do código em VBA é feita no próprio MS Access, na janela de código de
um módulo (seja módulo padrão, módulo de classe ou módulo de classe de
formulário/relatório). Para facilitar a edição e visualização do código, o editor de código
possui opções configuráveis, na qual pode-se escolher cores, fontes, tabulação e outros
recursos.
 Microsoft© Access 97 Avançado
Reprodução proibida
17
Figura 1: Opções do editor de código do Access
2.9.1. Cores de código
Por padrão, todo o texto do código é escrito usando a fonte Courier New tamanho 10.
A cor depende do tipo do texto. A cor é definida para o primeiro plano, para o segundo plano
e para o indicador de margem. Indicador margem é um ícone que aparece na margem
esquerda (margin indicator) do código, que serve para fornecer dicas visuais durante a
edição ou execução do código.
Os valores padrão para as opções de Caixa de texto, primeiro plano, segundo plano e
indicador são:
Área de texto 1o plano 2º plano Indicador
Texto normal Preta Branca
Texto de seleção Preta Azul
Texto de erro de sintaxe Vermelha Branca
Texto de ponto de execução Preta Amarela Amarela
Texto de ponto de interrupção Branca Marron Marron
Texto de comentário Verde Branca
Texto de palavra-chave Azul Branca
Texto de identificador Preta Branca
Texto de indicador Preta Branca Azul claro
 Microsoft© Access 97 Avançado
Reprodução proibida
18
Texto de retorno de chamada Preta Branca Verde claro
Para cada valor de área de texto você pode especificar o tipo de fonte e o tamanho nas
caixas Fonte e Tamanho.
Os ícones de indicadores de margem são:
Ícone Nome do Indicador
de margem
Descrição
Ponto de interrupção Indica que você definiu um ponto de interrupção usando o
comando Ativar/desativar ponto de interrupção no menu
Depurar. Você pode ativar/desativar o ponto de interrupção
colocando o ponteiro do mouse na região do indicador de
margem e clicando nele.
Linha de execução
atual
Indica a linha de código que será executada a seguir. Você
pode arrastar esse indicador de margem para um novo local
dentro de qualquer módulo de código em execução. Caso
arraste o indicador de margem da Linha de execução atual
para uma linha ou região inválida, nada acontecerá e o
indicador retornará para o local original.
Indicador Indica o local de um indicador definido usando o comando
Alternar indicador no menu Editar.
Marcador de Pilha de
chamadas
Indica as linhas que estão atualmente na pilha de chamadas. O
indicador Marcador de pilha de chamadas aparece apenas no
modo de interrupção.
2.9.2. Opções de codificação
§ Autorecuar — Permite que você tabule até a primeira linha de código; todas as linhas
subseqüentes iniciarão nesse local da guia.
§ Verificação de sintaxe automática — Determina se o Visual Basic deve verificar
automaticamente a sintaxe correta depois que você inserir uma linha de código.
§ Solicitar declaração de variável — Determina se declarações de variável explícitas são
exigidas nos módulos. Esta seleção adiciona a instrução Option Explicit às declarações
gerais de todo módulo novo.
§ Compilar ao ser solicitado — Determina se um projeto está totalmente compilado antes
que ele seja iniciado ou se o código está compilado conforme o necessário, permitindo
que o aplicativo inicie logo.
§ Listar membros automaticamente — Exibe uma lista que contém informações que
concluiriam logicamente a instrução no ponto de inserção atual. Exemplo.
 Microsoft© Access 97 Avançado
Reprodução proibida
19
§ Informação rápida automática — Exibe informações sobre funções e seus parâmetros à
medida que você digita. Exemplo:
§ Dicas de dados automáticas — Exibe o valor da variável sobre a qual o seu cursor está
posicionado. Disponível somente no modo de interrupção. Exemplo:
§ Largura da tabulação — Define a largura da guia, que pode variar de 1 a 32 espaços; o
padrão é 4 espaços.
2.9.3. Configurações da janela
§ Visualizar módulo completo — Define o estado padrão dos novos módulos para permitir
que você observe os procedimentos na janela Código como uma lista rolável simples ou
somente um procedimento de cada vez. Não altera o modo de exibição dos módulos
atualmente abertos.
§ Separador de procedimento — Permite que você exiba ou oculte as barras separadoras que
aparecem no fim de cada procedimento na janela Código.
§ Arrastar-e-soltar edição de texto — Permite que você arraste e solte elementos dentro do
código atual e da janela Código para as janelas Imediata ou Inspeção de variáveis.
§ Janela depurar visível — Mantém a janela Depurar aberta.
§ Barra do indicador de margem — Exibe a margem de indicador.
2.10. Janelas do editor de código do Access
A parte de programação do MS Access possui apenas três janelas:
§ Janela de Código
§ Janela Depurar
§ Janela do Pesquisador de Objetos.
2.10.1. Janela de Código
A janela de código contém as seções de declaração e a seção de procedimentos e é
onde se digita o código.
 Microsoft© Access 97 Avançado
Reprodução proibida
20
A janela de código é aberta nas seguintes situações:
§ Na guia Módulos da janela de Banco de Dados clique em Novo para criar um nvo módulo
ou em Estrutura para abrir um módulo existente.
§ Na estrutura de formulário ou relatório, acione o menu Exibir|Código, ou clique no ícone
da barra de ferramentas, ou acione o construtor de código nas propriedades do objeto.
2.10.2. Janela Depurar
A janela Depurar consiste de três painéis: Imediato, Locais e Inspecionar. Para
visualizar a janela Depurar, abra um módulo e clique no ícone na barra de ferramentas.
Você também pode abrir a janela Depurar acionando o menu Exibir| Janela Depurar. Você
pode também pressionar Ctrl-G a qualquer momento dentro do Access.
 Microsoft© Access 97 Avançado
Reprodução proibida
21
Você pode alternar entre o painel Locais e o painel Inspecionar clicando na guia
Locais ou na guia Inspecionar da janela Depurar. O painel Imediato permanece visível,
independentemente de qual guia é clicada.
2.10.2.1. O Painel Locais
O painel Locais exibe uma lista de variáveis em três colunas: Expressão, Valor e Tipo.
Algumas variáveis, como tipos definidos por usuários, matrizes e objetos, podem conter
informações hierárquicas. Estas variáveis têm um botão para expandir/reduzir à esquerda dos
nomes de variável para controlar a exibição de informações hierárquicas. Quando o painel
Locais está visível, ele é atualizado automaticamente quando o modo de execução muda do
modo de execução para o modo interrupção. Isto acontece quando a execução atinge um
ponto de interrupção ou quando você começa a depurar o código.
A primeira variável da lista é uma variável especial de módulo. Para um módulo
classe, esta é a variável Me definida pelo sistema. Esta é uma referência de objeto à instância
atual da classe definida pelo módulo atual. Já que esta variável é uma referência de objeto, ela
pode ser expandida para mostrar todas as propriedades e os membros de dados da instância de
classe atual. Para módulos padrões, a primeira variável é o nome do módulo atual e também
pode ser expandida para exibir todas as variáveis no nível de módulo no módulo atual. Você
pode alterar o valor de uma variável do painel Locais, mas não pode alterar suas definições de
Expressão ou Tipo.
 Microsoft© Access 97 Avançado
Reprodução proibida
22
2.10.2.2. O Painel Inspecionar
O painel Inspecionar permite que você visualize o valor deuma expressão ou uma
variável enquanto o código estiver em execução. Para definir uma expressão de inspeção,
clique no menu Depurar|Adicionar inspeção de variáveis. O painel Inspecionar proporciona
as seguintes capacidades:
§ Expandir/reduzir informações hierárquicas.
§ Redimensionar cabeçalhos de coluna.
§ Editar valores in loco.
2.10.2.3. O Painel Imediato
No painel Imediato, você pode:
§ Executar qualquer procedimento Sub ou Function, inclusive procedimentos de evento.
§ Executar uma expressão qualquer, inclusive usando variáveis do procedimento em
execução.
§ Visualizar a saída de valores enviados pelo método Print do objeto Debug.
Para executar um procedimento definido dentro de um módulo classe a partir do
painel Imediato, você precisa qualificar o procedimento com o nome do módulo classe, a
menos que você esteja no modo de interrupção dentro daquele módulo. Se você estiver no
modo interrupção, não é necessário qualificar o procedimento pois esse módulo está
atualmente no escopo.
O exemplo seguinte, quando digitado no painel Imediato da janela Depurar, executa
um procedimento ListarNomes que está definido no módulo classe associado a um formulário
Funcionários:
Form_Funcionários.ListarNomes
O próximo exemplo executa o procedimento do evento Click para um botão de
comando chamado InformaçõesPessoais em um formulário Funcionários:
Form_Funcionários.InformaçõesPessoais_Click
Para executar uma expressão, use o sinal ? seguido da expressão desejada. Por
exemplo, o comando abaixo irá calcular o número inteiro de uma divisão.
? Int(345/7)
2.10.2.4. Outros Recursos da Janela Depurar
A nova janela Depurar proporciona automaticamente informações de status sobre seu
código. Quando nenhum código está sendo executado, a barra de status no topo da janela
Depurar mostra "<Pronto>". Uma vez iniciada a execução do código, a barra de status mostra
o nome do banco de dados atual, o módulo no qual reside o procedimento em execução, e o
nome do próprio procedimento.
 Microsoft© Access 97 Avançado
Reprodução proibida
23
Você também pode visualizar a janela Chamadas a partir da janela Depurar clicando
no botão Construir .
2.10.3. Janela Pesquisador de Objetos
A janela Pesquisador de Objetos é aberta pelo menu Exibir|Pesquisador de Objetos
ou pela tecla F2.
O Pesquisador de Objetos é uma caixa de diálogo que exibe informações sobre
objetos, propriedades, métodos e constantes do banco de dados atual e em bibliotecas de
objetos referenciados. Você pode utilizar o Pesquisador de Objeto para pesquisar um
elemento específico, visualizar suas definições, obter ajuda sobre ele ou colá-lo em um
módulo.
* * * * *
 Microsoft© Access 97 Avançado
Reprodução proibida
24
PRÁTICA 2 – PROGRAMAÇÃO NO MS ACCESS 97
EXERCÍCIO 1 – Criando um módulo padrão
Crie um módulo basDemonstracao contendo o procedimento Welcome.
1. Abra o MS Access 97.
2. Crie um banco de dados vazio chamado dbWelcome.mdb.
3. Selecione a guia Módulos na janela de Banco de Dados.
4. Clique em Novo.
5. Digite o seguinte procedimento:
Sub Welcome()
 MsgBox "Bem-vindo ao curso MS Access 97 Avançado", vbOKOnly, "Treinar"
End Sub
Perceba como o Access diferencia cores para instruções e texto de usuário e como o editor de
código fornece dicas da sintaxe da instrução MsgBox.
6. Clique no menu Arquivo|Salvar.
7. Informe o nome basDemonstracao e clique OK..
8. Posisione o cursor em qualquer parte do código.
9. Tecle F5. Será mostrada uma caixa de mensagem chamada Treinar com o texto "Bem-
vindo ao curso MS Access 97 Avançado"
10. Clique no botão OK da caixa de mensagem.
11. Feche a janela de módulo e veja o nome do módulo basDemonstracao gravado na guia
Módulos da janela de Banco de Dados.
EXERCÍCIO 2 – Criando um módulo de classe em formulário
Crie um formulário chamado frmDemonstracao.
1. Clique na guia Formulários da janela de Banco de Dados.
2. Clique em Novo.
3. Escolha Modo estrutura e clique em OK.
4. Desligue o Assistentes de controle da barra de ferramentas Caixa de ferramentas.
5. Crie um botão de comando.
6. Abra as propriedades do botão de controle e selecione a guia Todas.
7. Atribua as seguintes propriedades:
Nome: cmdOK
Legenda: &Ok
Ao clicar: [Procedimento de Evento]
 Microsoft© Access 97 Avançado
Reprodução proibida
25
8. Clique no botão do construtor de código em frente à propriedade Ao clicar. Será
aberta a janela de módulo de classe.
9. Digite o código a seguir:
Private Sub cmdOk_Click()
 MsgBox "Isto é um procedimento de evento do controle cmdOk"
End Sub
10. Feche a janela de módulo.
11. Salve o formulário como frmDemonstracao.
12. Alterne para o Modo Formulário.
13. Clique no controle Ok. Surgirá uma caixa de mensagem com o texto "Isto é um
procedimento de evento do controle cmdOk"
14. Feche o formulário.
 Microsoft© Access 97 Avançado
Reprodução proibida
26
EXERCÍCIOS DE FIXAÇÃO – PROGRAMAÇÃO NO MS ACCESS 97
1) No MS Access 97, um módulo é:
a. ( ) Um arquivo formato Microsoft Access 97.
b. ( ) Um arquivo texto com código VBA.
c. ( ) Um conjunto de declarações e procedimentos que formam uma unidade.
d. ( ) Uma subrotina que realiza uma tarefa específica, como cadastrar clientes.
e. ( ) Um algoritmo.
2) Quais os tipos de módulo existentes no MS Access 97.
a. ( ) Módulo Padrão e Módulo de Classe
b. ( ) Módulo Padrão, Módulo de Classe e Módulo em formulário/relatório.
c. ( ) Módulo Standard e Módulo Misto
d. ( ) Módulo Private e Módulo Public
e. ( ) Módulo de cadastro, Módulo de consulta e Módulo de relatório.
3) Os módulos padrão do MS Access 97 residem.
a. ( ) Na guia Módulos da janela de Banco de Dados do Access.
b. ( ) Na estrutura de formulários e relatórios.
c. ( ) Na guia Macros da janela de Banco de Dados do Access.
d. ( ) Na estrutura de tabelas ou consultas.
e. ( ) Em arquivos texto de extensão .bas.
4) Os módulos de classe do MS Access 97 residem.
a. ( ) Na guia Módulos da janela de Banco de Dados do Access.
b. ( ) Na guia Módulos da janela de Banco de Dados do Access ou na estrutura de
formulários e relatórios.
c. ( ) Na guia Macros da janela de Banco de Dados do Access.
d. ( ) Na estrutura de tabelas ou consultas.
e. ( ) Em arquivos texto de extensão .bas.
5) Os módulos de classe em formulários contém.
a. ( ) Somente procedimentos de evento.
b. ( ) Somente procedimentos Sub e Function
c. ( ) Somente procedimentos Sub e Function e procedimentos de evento
d. ( ) Declarações, procedimentos de evento e eventualmente procedimentos Sub ou
Function.
e. ( ) Procedimentos de formulário.
6) O código VBA em módulos do MS Access 97 são editados:
a. ( ) No Notepad.
b. ( ) No Visual Basic Enviroment.
c. ( ) Em janela de código do módulo dentro do próprio arquivo de banco de dados.
d. ( ) Em qualquer utilitário que edite arquivo texto.
 Microsoft© Access 97 Avançado
Reprodução proibida
27
e. ( ) No MS Word, quando este é definido como editor padrão de mensagens.
7) As janelas disponíveis na edição de módulo são:
a. ( ) Janela de código, janela Locais e janela Imediato.
b. ( ) Janela de código, janela Depurar e janela Pesquisador de objeto.
c. ( ) Janela Locais, janela Inspecionar e janela Imediato.
d. ( ) Janela estrutura, janela formulário e janela folha de dados.
e. ( ) Janela propriedades, janela métodos e janela eventos.
 Microsoft© Access 97 Avançado
Reprodução proibida
28
3. PROCEDIMENTOS EM MÓDULO PADRÃO
Procedimento é uma unidade de código VBA que contém instruções e métodos
sequencia e logicamente ordenados que ao final de algum tempo de execução realizará uma
tarefa específica, previamente planejada no algoritmo.
Por exemplo, podemos querer determinar as raízes de uma equação do segundo grau
por meio de um procedimento. Ao final, podemos ter como resultado um valor, dois valores
ou nenhum.
A equação do 2º grau possui a forma geral: ax2 + bx + c = 0
A resolução do problema consiste em receber três valores da equação do 2º grau,
normalmente chamados de a, b e c e determinar os valores dex. Os valores de x são
determinados pela fórmula de báskara, que consiste em:
2a
 4b b 2 ac
x
−±=
O algorimo para implementar a fórmula de Báskara é:
Algoritmo Baskara
Declare a, b, c, Delta, x1, x2 numérico
Leia a
Leia b
Leia c
{Calcule Delta}
Delta ← b2 – 4 x a x c
Se Delta = 0 então
x1 ← -b ÷ 2 x a
Escreva x1
SenãoSe Delta > 0 então
x1 ← (-b + Delta ) ÷ (2 x a)
x2 ← (-b - Delta ) ÷ (2 x a)
Escreva x1
Escreva x2
Senão
Escreva "Não há solução"
Fim Se
Fim algoritmo
Este algoritmo tem uma finalidade geral e portanto é adequado usar módulo padrão.
Módulos padrão são criados na guia Módulos da janela de Banco de Dados. Selecione a guia
Módulos na janela de Banco de Dados e clique no botão Novo. É aberta uma janela de código
para criação de procedimentos em módulo padrão.
Cada módulo pode conter um ou mais procedimentos do tipo Sub (procedimento sem
retorno de valor, ou simplesmente procedimento) e Function (procedimento com retorno de
valor, ou simplesmente, função).
 Microsoft© Access 97 Avançado
Reprodução proibida
29
Abaixo da seção de declarações, digite a palavra reservada Sub ou Function seguido
do nome do procedimento.
Após teclar Enter, uma seção de procedimento será criada, iniciando com a declaração
do procedimento e terminando com a palavra reservada End Sub ou End Function.
Option Compare Database
Option Explicit
Sub MeuProcedimento()
 [ instruções ]
End Sub
Function MinhaFuncao()
 [ instruções ]
End Function
Na área entre a declaração do procedimento e o seu fim você deve digitar o seu código
VBA. Comece sempre com a declaração das variáveis e constantes que serão utilizados pelo
seu código.
Criemos um primeiro código para implementar o algoritmo de Báskara.
Sub Baskara()
 Dim sngA As Single
 Dim sngB As Single
 Dim sngC As Single
 Dim dblDelta As Double
 Dim sngX1 As Single
 Dim sngX2 As Single
 sngA = InputBox("Valor de A")
 sngB = InputBox("Valor de B")
 sngC = InputBox("Valor de C")
 ' Cálculo de Delta
 dblDelta = sngB ^ 2 - 4 * sngA * sngC
 If dblDelta = 0 Then
 sngX1 = -sngB / (2 * sngA)
 MsgBox sngX1
 ElseIf dblDelta > 0 Then
 sngX1 = (-sngB + Sqr(dblDelta)) / (2 * sngA)
 sngX1 = (-sngB - Sqr(dblDelta)) / (2 * sngA)
 MsgBox sngX1
 MsgBox sngX2
 Else
 MsgBox "Não há solução"
 End If
End Sub
Os parênteses após o nome do procedimento serve para receber argumentos (também
chamado de parâmetros). Veremos a passagem e recebimento de argumentos mais adiante.
Dentro do mesmo módulo, podemos ter mais de um procedimento Sub ou Function.
Criaremos um procedimento para cálculo de fatorial de um número.
 Microsoft© Access 97 Avançado
Reprodução proibida
30
Sub Fatorial()
 Dim lngNumero As Long
 Dim dblFatorial As Double
 Dim lngContador As Long
 lngNumero = InputBox("Entre com um número")
 dblFatorial = 1
 lngContador = 2
 If lngNumero = 0 Or lngNumero = 1 Then
 MsgBox "O fatorial é 1"
 Else
 Do While lngContador <= lngNumero
 dblFatorial = dblFatorial * lngContador
 lngContador = lngContador + 1
 Loop
 MsgBox "O fatorial é " + str(dblFatorial)
 End If
End Sub
3.1. Compilação de módulo
Na maioria da linguagens de programação o termo compilação significa gerar um
arquivo executável a partir do programa fonte. Compilar no MS Access 97 significa verificar
a sintaxe das instruções e a verificação de variáveis e constantes não declaradas (caso Option
Explicit esteja ativado).
Ao terminar a digitação do código, você deve compilar o módulo. A compilação é
feita no menu Depurar|Compilar módulos carregados na janela de módulo. A compilação
abrange todos os módulos abertos (seja padrão, de classe ou de formulário/relatório) e não
somente o módulo que está sendo editado.
Se houve erro de sintaxe ou variável não declarada, uma caixa de mensagem
informará o erro e o texto onde o erro ocorreu será selecionado. Por exemplo, o código abaixo
apresentará erro, pois estamos usando uma variável não declarada.
Option Compare Database
Option Explicit
Sub Teste()
 Dim intNumero As Integer
 intNumero = intDesconto * 42
 MsgBox intNumero
End Sub 
Ao compilar, será mostrada uma caixa de diálogo com o erro “Variável não definida”.
 Microsoft© Access 97 Avançado
Reprodução proibida
31
Ao clicar OK, a janela do código onde ocorreu o erro será aberta e o local do erro
ficará marcado.
Caso não haja erros de sintaxe, verifique erros de lógica, para que o programa não
trave o computador. Se tudo estiver correto, salve o módulo e forneça um nome. A gravação
do módulo é feita pelo menu Arquivo|Salvar.
3.2. Teste de execução de procedimento em módulo padrão
Os procedimentos em módulos padrão, desde que não recebam argumentos, podem
ser executados, para fins de teste, a partir da janela de código do módulo que está sendo
editado.
Dentro de um mesmo módulo podem ser escritos vários procedimentos. Para executar
um deles, você deve posicionar o cursor em qualquer parte do procedimento desejado e teclar
F5 ou acionar o menu Executar|Ir para/continuar ou ainda teclar o ícone .
3.3. Execução passo-a-passo
Você pode executar o procedimento passo-a-passo, uma linha de cada vez, para
acompanhar o fluxo de execução, depurar eventuais erros de lógica ou visualizar o conteúdo
de variáveis.
A execução passo-a-passo é acionada pela tecla F8 ou pelo ícone na barra de
ferramentas da janela de módulo ou pelo menu Depurar|Depuração total. Durante a
execução passo-a-passo, o texto da linha de código que está sendo executada ficará na cor
definida por “Texto de ponto de execução” definido nas opções do editor de código (menu
Ferramentas|Opções, guia Módulo) e o indicador surgirá na barra Indicador de Margem.
A qualquer momento, você pode decidir pela execução total, teclando-se F5. Durante
a execução passo-a-passo você pode abortar a execução acionando o menu Executar|Fim ou
clicar no ícone na barra de ferramentas. Este ícone só está ativado se algum procedimento
estiver sendo executado. Ao editar o código, preste atenção neste ícone e lembre-se de
terminar a execução antes de fazer qualquer alteração em seu código ou na estrutura de
tabelas, consultas, formulários e relatórios.
 Microsoft© Access 97 Avançado
Reprodução proibida
32
3.4. Inspeção de variáveis
Durante a execução passo-a-passo você pode posicionar o mouse sobre uma variável e
verificar o valor nela contida naquele momento da execução.
 Microsoft© Access 97 Avançado
Reprodução proibida
33
Lembre-se que este recurso de inspeção de variáveis durante a execução do
procedimento só está disponível se a opção “Dicas de dados automáticas” estiver ativada nas
opções do editor de código.
Você pode inspecionar todas as variáveis no painel Locais da janela Depurar.
3.5. Ponto de interrupção
Para depurar uma aplicação não é necessário executar passo-a-passo todos os códigos.
Normalmente, você quer estudar algumas partes do código mais suceptíveis a falhas. Você
 Microsoft© Access 97 Avançado
Reprodução proibida
34
pode estabelecer pontos de interrupção nas linhas em que você quer começar a execução
passo-a-passo.
Para isto, vá até a linha onde se deseja interromper a execução e tecle F9 ou o ícone
na barra de ferramentas ou acione o menu Depurar|Ativar/Desativar pontos de
interrupção. O indicador de margem apresentará o ícone e o texto da linha ficará na cor
marrom em segundo plano.
Ao executar o procedimento com F5, o código será executado completamente e parará
no ponto de interrupção. A partir daí, pode-se prosseguir com F8 para execução passo-a-passo
ou F5 para continuar a execução completa. Um novo F9 na linha do ponto de interrupção
desativará o ponto de interrupção.
Os pontos de interrupção servem para testar o aplicativo. Você deve lembrar de
desativar todos os pontos de interrupção antes de salvar o módulo (ou formulário ou relatório)
para ser distribuído. Pressionando Control+Shift+F9 desativa todos os pontos deinterrupção
de todos os módulos, estejam estes salvos ou não.
3.6. Chamada de Procedimentos
Os procedimentos anteriores são duas unidades de código independentes entre si. Cada
um deles é executado ao teclar F5.
Usamos a tecla F5 apenas para testar cada um dos procedimentos. Naturalmente,
quando construir um aplicativo em Access, ele não funcionará à base de tecla F5. Haverá uma
interface gráfica, normalmente um formulário, com opções para executar os procedimentos
que você criou. Veremos em outro capítulo como chamar um procedimento a partir de um
formulário.
Agora, precisamos saber como um procedimento pode chamar outro e como eles se
relacionam.
Suponha que você escreva um procedimento para calcular a combinação de n números
tomados p a p. A fórmula da combinação é:
Cn p
n
p n p
,
!
!( )!
= −
Note que para resolver este problema é preciso calcular três fatorias. Ora, já vimos um
procedimento para calcular fatoriais. Não bastaria escrever três vezes o código dentro do
procedimento de combinação?
Não é nada produtivo ter que rescrever o mesmo algoritmo várias vezes. O que
podemos fazer é fazer com que o procedimento de combinação chame o procedimento de
fatorial todas as vezes que for necessário.
Qualquer procedimento pode chamar outro procedimento apenas colocando-se o nome
do procedimento como se fosse uma instrução do VBA.
Sub Combinacao()
 .
 Microsoft© Access 97 Avançado
Reprodução proibida
35
 .
 Fatorial
 .
End Sub
Esquematicamente, a chamada de um procedimento por outro funciona assim:
Entretanto, o procedimento Fatorial exige que um valor seja informado. No caso,
informamos o valor com a função InputBox do VBA. O procedimento Fatorial também
fornece a resposta por meio da função MsgBox. Da forma como o procedimento foi escrito
ele é um procedimento completo e independente.
Para que o procedimento de combinação possa utilizar o procedimento Fatorial, de
forma a ambos funcionarem em conjunto, devemos modificar o procedimento Fatorial.
A primeira coisa a fazer é retirar a função InputBox do procedimento Fatorial. O
número para o qual se deseja calcular o fatorial deve ser passado como um argumento.
3.6.1. Passagem de Argumentos
Os parênteses à frente do nome do procedimento servem para receber argumentos
vindos de outro procedimento que o chamou. Argumentos são variáveis que receberão
valores, constituindo-se assim a entrada de dados para o procedimento.
Sub Fatorial(lngNumero As Long)
 Dim dblFatorial As Double
 Dim lngContador As Long
 dblFatorial = 1
 lngContador = 2
 If lngNumero = 0 Or lngNumero = 1 Then
 MsgBox "O fatorial é 1"
 Else
 Do While lngContador <= lngNumero
 dblFatorial = dblFatorial * lngContador
 lngContador = lngContador + 1
 Loop
 MsgBox "O fatorial é " + str(dblFatorial)
 End If
End Sub
Para um procedimento chamar outro passando argumentos, basta escrever o seu nome
e enviar a variável ou valor à frente do nome. No caso abaixo, o procedimento Combinacao
irá chamar o procedimento Fatorial, passando o valor 4 como argumento.
 Microsoft© Access 97 Avançado
Reprodução proibida
36
Sub Combinacao()
 .
 .
 Fatorial(4)
 .
End Sub
O outro problema do procedimento Fatorial é que o resultado é escrito na tela e não
pode ser usado pelo procedimento Combinacao. Devemos, portanto, transformar o
procedimento Fatorial de Sub para Function, de forma que ele possa retornar o resultado para
o procedimento que o chamou.
3.6.2. Retorno de Valor
Somente procedimentos do tipo Function podem retornar valor para o procedimento
que o chamou.
Para retornar um valor, usa-se o próprio nome do procedimento para retornar o valor.
Como procedimento do tipo Function retornam valor, eles precisam ter um tipo definido.
Function Fatorial(lngNumero As Long) As Double
 Dim dblFatorial As Double
 Dim lngContador As Long
 dblFatorial = 1
 lngContador = 2
 If lngNumero = 0 Or lngNumero = 1 Then
 Fatorial = 1
 Else
 Do While lngContador <= lngNumero
 dblFatorial = dblFatorial * lngContador
 lngContador = lngContador + 1
 Loop
 Fatorial = dblFatorial
 End If
End Sub
Note que em Fatorial = 1, Fatorial não é uma variável e sim o nome do procedimento.
1 é o valor a ser retornado. Note também que o procedimento Fatorial, que agora é do tipo
Function, tem o mesmo tipo de dado que a variável dblFatorial.
Agora, o procedimento Combinacao pode chamar a function Fatorial e armazenar o
valor de retorna em uma de suas variáveis.
Sub Combinacao()
 Dim N As Integer
 Dim P As Integer
 Dim dblFatN As Double
 Dim dblFatP As Double
 Dim dblFatNP As Double
 Dim dblResultado As Double
 Microsoft© Access 97 Avançado
Reprodução proibida
37
 N = InputBox("Entre com o valor de N")
 P = InputBox("Entre com o valor de P")
 dblFatN = Fatorial(N)
 dblFatP = Fatorial(P)
 dblFatNP = Fatorial(N - P)
 dblResultado = dblFatN / (dblFatP * dblFatNP)
 MsgBox dblResultado
End Sub
O procedimento Combinacao é um código completo, mas dependente da existência do
procedimento Fatorial. O procedimento Combinacao pode ser executado com F5, mas o
procedimento Fatorial não pode mais, por depender da passagem de um argumento.
Como a combinação é um código de uso geral, podemos transformá-lo também em
uma função, para que outro procedimento o chame. Neste caso, são necessários dois
argumentos.
Function Combinacao(intN As Integer, intP As Integer) As Double
 Dim dblFatN As Double
 Dim dblFatP As Double
 Dim dblFatNP As Double
 dblFatN = Fatorial(intN)
 dblFatP = Fatorial(intP)
 dblFatNP = Fatorial(intN - intP)
 Combinacao = dblFatN / (dblFatP * dblFatNP)
End Sub
Podemos testar a função Combinacao chamando-a de um outro procedimento, pois,
agora que ela recebe argumentos, ela não pode mais ser executada com F5.
Sub TestaCombinacao()
 Dim N As Integer, P As Integer
 N = 3
 P = 2
 MsgBox Combinacao(N,P)
End Sub
3.6.3. Passagem de Argumentos por Valor e por Referência
Os argumentos passados de um procedimento para outro podem ser por valor ou por
referência.
A passagem por valor indica que a variável enviada e a variável definida como
argumento são duas posições de memória distintas. Elas podem até ter os mesmos nomes.
Sub Teste1()
 Dim X As Integer
 X = 10
 MsgBox X ' Será escrito 10
 Teste2(X)
 MsgBox X ' Ainda será escrito 10
End Sub
 Microsoft© Access 97 Avançado
Reprodução proibida
38
Sub Teste2(X As Integer)
 MsgBox X ' Será escrito 10
 X = 20
 MsgBox X ' Será escrito 20
End Sub
No exemplo acima, a variável X do procedimento Teste1 contém o valor 10, e é
passado como argumento para o procedimento Teste2. Em Teste2, o valor é alterado para 20,
mas esta variável não tem nada a ver com o X de Teste1. Apenas o valor de X em Teste1 foi
passado para a variável X de Teste2. Ao retornar para Teste1, a variável X continua a ter o
valor original.
Em suma, a passagem de argumentos por valor equivale a copiar o valor para outra
variável.
Na passagem por referência, as alterações na alteração do argumento afetam o
conteúdo da variável que foi passada como argumento. Na passagem por referência, o
endereço de memória é que é passado para o procedimento. Assim, ambas as variáveis são na
realidade a mesma variável, mesmo que tenham nomes distintos
Sub Teste1()
 Dim X As Integer
 X = 10
 MsgBox X ' Será escrito 10
 Teste2 X
 MsgBox X ' Será escrito 20
End Sub
Sub Teste2(ByRef G As Integer)
 MsgBox G ' Será escrito 10
 G = 20
 MsgBox G ' Será escrito 20
End Sub
As palavras-chave ByRef e ByVal definem o tipo de passagem de argumento. O
padrão no VBA é ByRef, ou seja, se você não especificar nada, assume a passagem por
referência.
Entretanto, ByVal e ByRef sozinhos não garantem que os argumentos sejam passados
por valor e pro referência, respectivamente. O modo de chamada também define o tipo de
passagem.
Se na chamada do procedimento os argumentos forem passados entre parênteses,
entãoa passagem é por valor, independentemente de ByRef e ByVal.
Sub Teste1()
 Dim X As Integer
 X = 10
 MsgBox X ' Será escrito 10
 Teste2(X) ' Os parênteses definem que a passagem é por valor
 MsgBox X ' Será escrito 10
End Sub
Sub Teste2(ByRef G As Integer)
 MsgBox G ' Será escrito 10
 Microsoft© Access 97 Avançado
Reprodução proibida
39
 G = 20
 MsgBox G ' Será escrito 20
End Sub
Se na chamada do procedimento os argumentos não forem passados entre parênteses,
então o tipo de passagem será definido por ByRef e ByVal. Lembrando que ByRef é o padrão
do VBA.
Sub Teste1()
 Dim X As Integer
 X = 10
 MsgBox X ' Será escrito 10
 Teste2 X ' O tipo de passagem dependerá de ByRef ou ByVal
 MsgBox X ' Será escrito 10
End Sub
Sub Teste2(ByVal G As Integer)
 MsgBox G ' Será escrito 10
 G = 20
 MsgBox G ' Será escrito 20
End Sub
* * * * *
 Microsoft© Access 97 Avançado
Reprodução proibida
40
PRÁTICA 3 – CRIAÇÃO DE MÓDULO PADRÃO
EXERCÍCIO 1 – Criando um procedimento para cálculo de fatorial
Crie um módulo basFatorial contendo o procedimento Fatorial.
1. Abra o MS Access 97.
2. Crie um banco de dados vazio chamado dbPratica3.mdb.
3. Selecione a guia Módulos na janela de Banco de Dados.
4. Clique em Novo.
5. Digite o seguinte procedimento:
Sub Fatorial()
 Dim lngNumero As Long
 Dim dblFatorial As Double
 Dim lngContador As Long
 lngNumero = InputBox("Entre com um número")
 dblFatorial = 1
 lngContador = 2
 If lngNumero = 0 Or lngNumero = 1 Then
 MsgBox "O fatorial é 1"
 Else
 Do While lngContador <= lngNumero
 dblFatorial = dblFatorial * lngContador
 lngContador = lngContador + 1
 Loop
 MsgBox "O fatorial é " + str(dblFatorial)
 End If
End Sub
6. Compile o módulo e verifique se há algum erro. Corrija onde for necessaário.
7. Clique no menu Arquivo|Salvar.
8. Informe o nome basFatorial e clique OK..
9. Posisione o cursor em qualquer parte do código e execute o código passo-a-passo (F8).
10. Continue com a execução até a linha If lngNumero = 0 Or lngNumero = 1
Then.
11. Posicione o cursor sobre as variáveis e inspecione seu conteúdo.
12. Abra a janela Depurar (Control+G).
13. Inspecione as variáveis no painel Locais.
14. No Painel Imediato, digite:
? 2 * 50 + lngContador
15. Feche a janela de módulo e veja o nome do módulo basFatorial gravado na guia Módulos
da janela de Banco de Dados.
 Microsoft© Access 97 Avançado
Reprodução proibida
41
EXERCÍCIOS DE FIXAÇÃO – CRIAÇÃO DE MÓDULO PADRÃO
1) No MS Access 97, compilar significa:
a. ( ) Gerar um arquivo executável.
b. ( ) Gerar um arquivo objeto.
c. ( ) Criar um conjunto de discos de instalação do aplicativo.
d. ( ) Verificar a sintaxe dos comandos e a existência de variáveis e constantes não
declaradas.
e. ( ) Resumir os comandos.
2) A compilação abrange:
a. ( ) Somente módulos padrão
b. ( ) Somente os módulos que estão sendo editados.
c. ( ) Somente os módulos de classe de formulários/relatórios
d. ( ) Todos os módulos de um banco de dados especificado na caixa de diálogo Compilar.
e. ( ) Os módulos que estão sendo editados ou todos os módulos do banco de dados atual.
3) Os módulos padrão do MS Access 97 residem.
a. ( ) Na guia Módulos da janela de Banco de Dados do Access.
b. ( ) Na estrutura de formulários e relatórios.
c. ( ) Na guia Macros da janela de Banco de Dados do Access.
d. ( ) Na estrutura de tabelas ou consultas.
e. ( ) Em arquivos texto de extensão .bas.
4) Os módulos de classe do MS Access 97 residem.
a. ( ) Na guia Módulos da janela de Banco de Dados do Access.
b. ( ) Na guia Módulos da janela de Banco de Dados do Access ou na estrutura de
formulários e relatórios.
c. ( ) Na guia Macros da janela de Banco de Dados do Access.
d. ( ) Na estrutura de tabelas ou consultas.
e. ( ) Em arquivos texto de extensão .bas.
5) O código VBA em módulos do MS Access 97 são editados:
a. ( ) No Notepad.
b. ( ) No Visual Basic Enviroment.
c. ( ) Em janela de código do módulo dentro do próprio arquivo de banco de dados.
d. ( ) Em qualquer utilitário que edite arquivo texto.
e. ( ) No MS Word, quando este é definido como editor padrão de mensagens.
 Microsoft© Access 97 Avançado
Reprodução proibida
42
4. MÓDULO DE CLASSE EM FORMULÁRIO/RELATÓRIO
Cada formulário e relatório pode conter apenas um módulo. Este módulo é do tipo
módulo de classe. Este módulo não aparece como um objeto na guia de Módulos, pois fica
embutido no formulário/relatório. Por isso, ele era chamado Code Behind Form.
Os procedimentos estão relacionados a eventos do formulário, do relatório ou dos
controles do formulário (controles de relatório não geram evento). Os procedimentos são
criados no modo estrutura do formulário/relatório. No modo estrutura, com um objeto
selecionado, por exemplo o botão de comando cmdOk, na guia Eventos da janela de
propriedades seleciona-se o evento ao qual o procedimento estará associado. O evento pode
chamar uma macro ou um procedimento em código VBA.
Escolhendo [Procedimento de evento] e clicando-se no botão do Construtor de
Código, uma janela de módulo, semelhante a uma janela de módulo padrão, irá se abrir.
O nome do procedimento é gerado automaticamente. Ele é formado pelo nome do
objeto e pelo evento, separado por um sublinhado ( _ ). Por exemplo, para o controle
cmdCancel e evento Clicar o nome do procedimento é cmdCancel_Click.
Um código comum associado ao clicar sobre o botão Cancel é o do fechamento do
formulário corrente.
Private Sub cmdCancel_Click(Cancel As Integer)
 DoCmd.Close
End Sub
 Microsoft© Access 97 Avançado
Reprodução proibida
43
O procedimento de módulo de formulário ou de relatório só é executado quando o
evento do objeto associado ao procedimento ocorrer.
Como os procedimentos de evento recebem o nome do controle e do evento, é
extremamente recomendável não usar os nomes padrão fornecido pelo Access (Texto1,
Comando2, ect). Deve-se nomear os controles com um nome significativo na guia Outra da
janela de Propriedades.
Algumas das características vistas no módulo padrão se aplicam também no módulo
de classe, dentre elas: Compilação, execução passo-a-passo, ponto de interrupção e inspeção
de variáveis.
4.1. Coleções e Objetos de Formulário/Relatório
Formulários, relatórios e controles são objetos do Access e, portanto, possuem
propriedades, métodos e eventos. As propriedades e os eventos são acessíveis no modo
estrutura do formulário/relatório, na janela de Propriedades. Alterando-se as propriedades no
modo estrutura, os valores tornam-se estáticos. Por exemplo, se se define a Legenda do
formulário como “Menu Principal”, ela só pode ser alterada novamente no modo estrutura
NOTA: Controles de relatórios não possuem eventos.
Via programação, podemos ter acesso às propriedades dos objetos. Os valores das
propriedades podem ser alterados dinamicamente, durante a execução do código. A
programação permite também que os métodos dos objetos sejam invocados, algo que não é
possível no modo estrutura.
Todos os formulários do banco de dados formam a coleção de formulários. Todos os
relatórios do banco de dados formam a coleção de relatórios. Uma coleção é um objeto que
contém objetos de um mesmo tipo. Eis as coleções do Access.
Coleção Descrição
Forms Coleção de formulários abertos
Reports Coleção de relatórios abertos
Controls Coleção de controles em formulários ou relatórios abertos
Modules Coleção de módulos padrão e módulose de classe (inclusive módulos de classe
de formulário e de relatório)
A hierarquia completa dos objetos do Access é mostrada na figura abaixo:
 Microsoft© Access 97 Avançado
Reprodução proibida
44
Por ser um objeto, cada coleção possui também propriedades e métodos.
Para referenciar um objeto específico de uma coleção, pode-se usar quatro formas
diferentes:
Coleção(número do item)
Coleção(“Nome do item”)
Coleção![Nome do item]
Coleção.Item(número do item]
A primeira e a última forma têm a desvantagem deter que saber qual o número do
item dentro da coleção. Se existem vários formulários num banco de dados, cada um deles
recebe um número sequencial, começando do zero (0). Na última forma, Item é uma
propriedade da coleção.
As duas outras formas são mais compreeensíveis e mais fáceis de usar porque já
sabemos o nome do item.
Por exemplo, para referir a um formulário específico chamado frmPedidos, use a
expressão:
Forms![frmPedidos] ou Forms(“frmPedidos”)
Para referir-se a um relatórios chamado rptLista_de_Produtos, use a expressão:
Reports![rptLista_de_Produtos] ou Reports(“rptLista_de_Produtos”)
Para referir-se a um controle chamado txtPreçoUnitário, no formulário frmPedidos,
use a expressão:
Forms![frmPedidos]![txtPreçoUnitário]
Se o código estiver sendo escrito atrás do formulário frmPedidos, não é necessário
referir-se a ele mesmo como Forms![frmPedidos], mas simplesmente como Me!. Assim, a
referência ao controle txtPreçoUnitário pode ser simplificado para Me![txtPreçoUnitário].
NOTA: O objeto Form referencia formulários abertos. Formulários fechados são
referenciados pelo objeto Document da hierarquia de objetos do DAO – Data Access Objects.
 Microsoft© Access 97 Avançado
Reprodução proibida
45
4.2. Propriedades e Métodos
Se em vez de querer acessar um controle do formulário você quiser acessar suas
propriedades ou invocar seus métodos, use a expressão:
Forms![frmPedidos].Caption
ou simplesmente
Me.Caption
Para acessar uma propriedade de um controle ou invocar um de seus métodos, use a
expressão:
Forms![frmPedidos]![txtPreçoUnitário].BackColor
ou simplemente
Me![txtPreçoUnitário].BackColor
 O caracter ! é usado para indicar que o próximo elemento é um item definido pelo
usuário e o ponto indica que o próximo elemento é uma propriedade ou método. Você pode
usar o ponto para substituir a !, se quiser. Portanto, Forms![frmPedidos] equivale a
Forms.[frmPedidos].
Ao escrever um código VBA, se a opção “Listar membros automaticamente” do editor
de código estivar acionada, será exibida uma lista das propriedades e métodos do objeto e os
controles do objeto.
Algumas propriedades são somente para leitura, isto é, você não pode alterar o seu
valor, somente recurá-lo. Por exemplo, a propriedade Name é tipicamente uma propriedade
para somente leitura, já que o nome é fornecido ao salvar a estrutura de um objeto.
Todas as propriedades visíveis na janela de propriedades na estrutura de um
formulário são acessíveis via programação. Entretanto, existem várias propriedades que são
acessíveis somente no modo programado e não podem ser acessados no modo estrtutura. Por
exemplo, a propriedade Hwnd de um formulário está disponível somente no modo
programado.
4.3. Coleção padrão e propriedade padrão
Um objeto pode conter coleções. Um objeto formulário, por exemplo, contém a
coleção Controls. À rigor, a referência a um controle de um formulário deveria ser:
Forms![frmPedidos].Controls![txtPreçoUnitário]
Método
Propriedade
Controle
 Microsoft© Access 97 Avançado
Reprodução proibida
46
Mas como a coleção Controls é a coleção padrão do objeto Form, não é necessário
mencioná-lo.
Os objetos possuem várias propriedades, mas uma delas é a propriedade padrão. Por
exemplo, o controle caixa de texto possui a propriedade Text (o conteúdo da caixa de texto)
como padrão. Assim, pode-se omitir esta propriedade.
Forms![frmPedidos]![txtPreçoUnitário].Text = 3.00
equivale a
Forms![frmPedidos]![txtPreçoUnitário] = 3.00
4.4. Propriedades de Coleção
As coleções Forms, Reports e Controls possuem apenas propriedades, mas não
métodos. As propriedades são:
Application Retorna o objeto Application, no caso, o Microsoft Access. Somente
leitura. Como o retorno é um objeto, deve ser usado como Set obj =
object.Application
Sub ApplicationProperty( )
 Dim obj As Object
Set obj = Forms.Application ' Retorna o objeto
Microsoft Access
End Sub
Count Retorna a quantidade de objetos da coleção. Somente leitura.
Sub CountProperty( )
 Dim intForms As Integer
IntForms = Forms.Count
End Sub
Item Retorna o objeto em uma determinada posição ou índice dentro da coleção.
Somente leitura.
Sub ItemProperty( )
 Dim obj As Object
Set obj = Forms.Item(0) ' Retorna o primeiro objeto
form aberto
End Sub
Parent Retorna o objeto superior. Somente leitura. Como o retorno é um objeto,
deve ser usado como Set obj = object.Parent.
Sub ApplicationProperty( )
 Dim obj As Object
Set obj = Me.Controls(”txtCodigo”).Parent ' Retorna o
objeto form atual
End Sub
 Microsoft© Access 97 Avançado
Reprodução proibida
47
4.5. Seções de Formulário/Relatório
As seções dos formulários e relatórios são objetos, da mesma forma que controles. As
seções possuem propriedades e eventos, mas não métodos.
Deve-se tomar cuidado, pois, assim como os controles, o nome destes objetos é dado
automaticamente pelo Access, entretanto, não se justifica alterá-los. Na versão em inglês, os
nomes padrão são: FormHeader, FormFooter, Detail, PageHeader e PageFooter.
As propriedades e métodos das seções podem ser acessadas via programação,
entretanto, as seções PageHeader e PageFooter de relatórios não possuem propriedades nem
eventos que possam ser acessados via programação.
4.6. Eventos de Formulário
Eis alguns dos eventos de formulário para os quais pode-se definir código:
Evento Descrição
NoAtual (OnCurrent) O evento NoAtual ocorre quando o foco é movido para um registro,
tornando-o o registro atual, ou quando o formulário é aberto ou atualizado
ou quando sua consulta é repetida.
O Microsoft Access executa a macro ou procedimento de evento Current
antes de o primeiro ou próximo registro ser exibido.
Ao executar uma macro ou procedimento de evento quando ocorre o evento
Current de um formulário, é possível exibir uma mensagem ou sincronizar
registros em um outro formulário relacionado ao registro atual. Por
exemplo, quando o registro de um cliente torna-se o atual, você pode exibir
o pedido anterior do cliente. Quando o registro de um fornecedor torna-se o
atual, é possível exibir os produtos fabricados pelo fornecedor em um
formulário Fornecedores. Você também pode efetuar cálculos com base no
registro atual ou alterar o formulário em resposta aos dados desse registro.
Se a sua macro ou procedimento de evento executar uma ação
IrParaControle ou IrParaRegistro ou o método correspondente do objeto
DoCmd em resposta a um evento Open, ocorrerá o evento Current.
O evento Current também ocorre quando você atualiza um formulário ou
repete a tabela ou consulta base do formulário — por exemplo, quando
você clica em Remover Filtro/Classificação no menu Registros ou utiliza a
ação RepetirConsulta em uma macro ou o método Requery em código do
Visual Basic.
Quando você abre um formulário pela primeira vez, os eventos ocorrem na
ordem a seguir:
Open ð Load ð Resize ð Activate ð Current
Antes de Inserir (BeforeInsert) Ocorre quando o usuário digita o primeiro caractere de um novo registro,
mas antes de realmente o registro ser gravado. A ordem dos eventos é:
BeforeInsert ð BeforeUpdate ð AfterUpdate ð AfterInsert
Após Inserir (AfterInsert) Ocorre quando o registro passa a ser um novo registro.
Antes de Atualizar
(BeforeUpdate)
Ocorre quando o usuário atualiza o registro
Após Atualizar (AfterUpdate) Ocorre quando o registro é atualizado
 Microsoft© Access 97 Avançado
Reprodução proibida
48
Ao Excluir (OnDelete) Ocorre quando o usuário tecla DEL em um ou mais registros.
Confirmar Antes de Excluir
(BeforeDelConfirm)
Ocorre antes de o registro ser efetivametne excluído, quando o MS Access
apresenta a mensagem de confirmação da exclusão
Após Confirmar Exclusão
(AfterDelConfirm)
Ocorre após a confirmação da exclusão do registro.
Ao Abrir (OnOpen) Ocorre ao abrir o formulário. A ordem dos eventos é:
Open ð Load ð Resize ð Activate ð Current
Ao Carregar (OnLoad) Ocorre após o formulário ser aberto e carregar os dados para exibição.
Ao Redimensionar (OnResize) Ocorre ao redimensionar a janela do formulário.
Ao Descarregar (OnUnload) Ocorre antes

Outros materiais