Académique Documents
Professionnel Documents
Culture Documents
1. ORIENTAÇÃO A EVENTOS...............................................................................................................2
1.1. ORDEM DE EXECUÇÃO DOS EVENTOS....................................................................................3
2. NORMAS DE NOMENCLATURA......................................................................................................5
2.1. JANELA DE CÓDIGO .....................................................................................................................6
3. VARIÁVEIS............................................................................................................................................7
3.1. DECLARAÇÃO DE VARIÁVEIS ...................................................................................................7
3.2. OPERADORES...............................................................................................................................11
3.2.4. PRECEDÊNCIAS ........................................................................................................................11
4. ESTRUTURAS DE PROGRAMAÇÃO .............................................................................................12
4.1. COMANDOS CONDICIONAIS ....................................................................................................12
4.2. COMANDOS DE LAÇOS CONDICIONAIS ................................................................................13
5.1. ACESSO RANDÔMICO ................................................................................................................15
5.2. ACESSO SEQUENCIAL................................................................................................................18
5.3. ACESSO BINÁRIO ........................................................................................................................20
6. PROCEDIMENTOS - FUNÇÕES E SUBROTINAS........................................................................25
6.1. ARGUMENTOS BYVAL E BYREF .............................................................................................26
6.2. ARGUMENTOS OPCIONAIS .......................................................................................................27
7. UTILIZAÇÃO 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 MANIPULAÇÃO DE DADOS .......................................................................35
9.2.1. INSTRUÇÃO CREATE TABLE .................................................................................................40
9.2.2. INSTRUÇÃO CREATE INDEX .................................................................................................40
9.2.3. INSTRUÇÃO DROP TABLE OU DROP INDEX .......................................................................41
9.2.4. INSTRUÇÃO ALTER TABLE....................................................................................................41
9.2.5. CLÁUSULA CONSTRAINT.......................................................................................................42
9.3. FUNÇÕES AGREGADAS .............................................................................................................42
10. TÉCNICAS DE PESQUISA DE DADOS.........................................................................................43
10.1. MÉTODO FIND............................................................................................................................45
10.2. MÉTODO SEEK ...........................................................................................................................47
11. INTEGRANDO COM O OFFICE 2000...........................................................................................50
11.1 FUNÇÕES 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. EXERCÍCIOS PROPOSTOS............................................................................................................57
ANEXO 1 ..................................................................................................................................................59
ANEXO 2 ..................................................................................................................................................73
1
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
1. ORIENTAÇÃO A EVENTOS
Um evento é uma ação específica que ocorre sobre e/ou com um
determinado objeto. O Access pode responder a vários eventos simultaneamente,
como por exemplo: cliques de mouse, alterações em dados, abertura ou
fechamento de formulários e muitos outros. Os eventos são, geralmente, o
resultado de uma ação do usuário. Podemos criar a nossa própria resposta a um
evento através 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 formulário ou o objeto relatório. Tudo o que você precisa fazer é adicionar o
código que responda às ações quando ocorrer(em) o(s) evento(s) para o formulário
ou relatório.
Abaixo a lista de eventos disponíveis em ordem alfabética:
2
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Uma única ação pode acionar vários eventos que ocorrem em uma
seqüência específica, visto que a execução do Visual Basic se dá de modo
assíncrono, 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 execução.
Abrindo um formulário:
Open (Ao abrir) Activate (Ao ativar) Current (No atual) Enter
(Ao entrar) GotFocus (Ao receber foco)
Fechando um formulário:
Exit (Ao sair) LostFocus (Ao perder foco) Unload (Ao descarregar)
Deactivate (Ao desativar) Close (Ao fechar)
3
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Excluindo um registro:
Delete (Ao excluir) BeforeDelConfirm (Confirmar antes de excluir)
AfterDelConfirm (Após confirmar exclusão)
Abrindo um formulário:
Open (Ao abrir) Load (Ao carregar) Resize (Ao redimensionar)
Activate (Ao ativar) Current (No atual)
Fechando um formulário:
Unload (Ao descarregar) Deactivate (Ao desativar) Close (Ao fechar)
No segundo controle:
Enter (Ao entrar) GotFocus (Ao receber foco) MouseDown
(Ao apertar mouse) MouseUp (Ao liberar mouse) Click (Ao clicar)
4
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
2. NORMAS DE NOMENCLATURA
[prefixo][marca](nome_do_componente)[sufixo]
5
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Ativa/Desativa
pontos de
interrupçãp
Seleciona o objeto
desejado
Seleciona o procedimento,
Insere módulo método ou evento do
ou objeto.
procedimento Área de código onde
na área de escrevemos os comandos em
código VBA.
Visualiza somente um ou
todos procedimentos da
janela
6
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
3. VARIÁVEIS
7
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
8
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Exemplos:
Const PI=3.141592654
Public Const MAX_REG=20
Const NEW_MAX_REG = MAX_REG * 3
Você pode criar tipos de variáveis definidos pelo usuário com o uso da
sentença TYPE, que deve ser colocada na seção de declarações de um módulo de
código. Um tipo criado pelo usuário é sempre visto de forma global dentro do
código, apesar de que as variáveis declaradas com este tipo possam ser globais ou
locais as funções ou aos módulos do formulário.
Abaixo criamos um tipo definido pelo usuário que guarda as informações de
um usuário.
Type RegUsuario
Cod As Integer
Nome As String
Cargo As String
Salario As Currency
End Type
Você pode declarar uma variável global ou local ou a nível de módulo com o
tipo RegUsuario.
9
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Onde:
NomeVar : É o nome do array que você deseja criar. Este nome segue as
mesmas regras da criação de variáveis.
Dimensão : É a dimensão da variável Array. Você pode declarar o elemento
inicial e final do array através da seguinte sintaxe:
[Inicial To] Final
Tipo : Segue as mesmas regras de tipos de dados.
Este recurso é útil quando você não sabe ao certo quantos elementos irão
compor seu array, mas já quer deixá-lo declarado em seu código. 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 serão do tipo de dados Variant (cada um dos seus elementos terá 16
bytes de tamanho).
A sintaxe do comando Redim é praticamente idêntica à do comando Dim:
Onde:
Preserve: Mantém todos os dados existentes no array que está
sendo redimensionado.
10
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
3.2. OPERADORES
Como você já deve estar imaginando, operadores são sinais gráficos que
indicam determinadas operações a serem realizadas, e se dividem em quatro
categorias distintas:
3.2.4. PRECEDÊNCIAS
Quando uma expressão composta por vários operadores existem regras para
indicar sua prioridade de execução. Para evitarmos que se encontre um valor
diferente para uma mesma expressão, o VBA adota a seguinte ordem no momento
de avaliar uma expressão:
11
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
1 2 3 4
5 7 6
4. ESTRUTURAS DE PROGRAMAÇÃO
If «condição» Then
«comando1»
«comando2»
Else
«comando3»
«comando4»
End If
If «condição1» Then
«comando1»
«comando2»
ElseIf «condição2» Then
«comando3»
Else
«comando4»
End If
12
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Do While «condição»
bloco_de_comandos
Loop
Do
bloco_de_comandos
Loop While «condição»
13
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Go To
Faz com que o programa desvie incondicionalmente para um rótulo ou uma
linha especificada dentro de uma procedure. Não se recomenda utilizar este
comando para programação estruturada, somente para desvio quando acontecer
um erro.
Sintaxe: Go To (rótulo | número de linha)
Exemplo:
...
On Error Go To Trata_Erro
...
...
Trata_Erro:
MsgBox Err.Description
...
...
End Sub
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
Exemplo:
With Me!txtNome
.BackColor = 0
.Visible = True
.Enabled = True
End With
14
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
5. MANIPULAÇÃO DE ARQUIVOS
Um arquivo nada mais é do que uma série de bytes relacionados e
localizados em disco. Quando uma aplicação acessa um arquivo, é necessário fazer
suposições sobre o tipo de dado que será acessado (integer, single, ou outros tipos
de dados). Existem três tipos de acesso a arquivos:
• Randômico
• Seqüencial
• Binário
15
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Notamos que todos os strings são de tamanho fixo. Isto se torna necessário
uma vez que o registro precisa ter um comprimento pré-determinado e fixo.
Notamos também que, se Nome possuir somente 10 caracteres, os 5 caracteres
restantes são preenchidos com espaços em branco. Da mesma forma que se Nome
for maior que 15, os caracteres a partir do 15° serão ignorados (truncados).
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:
16
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Gravando no arquivo
Deletando Registros
17
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Para remover uma das cópias deste registro duplicado devemos seguir os
seguintes passos.
⇒ Criar um novo arquivo
⇒ Copiar todos os registros válidos do arquivo original para o novo arquivo
⇒ Fechar todos os arquivos abertos através da declaração Close
⇒ Utilizar a declaração Kill para apagar o arquivo original do disco
⇒ Utilizar a declaração Name para renomear o novo arquivo com o nome
do arquivo original
⇒ Abrir novamente o arquivo e atualizar o valor de suas variáveis de
controle.
18
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Exemplo:
Onde:
• Input retorna um tipo de dado Variant e Input$ retorna uma String
• n; número de bytes (caracteres) a serem lidos
• NumArq: Número do arquivo definido para uso na declaração Open
LinhasDoArquivo = Input$(LOF(NumArq),NumArq)
19
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
20
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
21
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
OBS.: Apesar do acesso binário prover uma maior flexibilidade que o acesso
randômico, requer mais código para manipulação de operações de I/O.
22
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
23
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
O código acima cria uma tabela que pode ser utilizada para procurar um
empregado pelo seu último nome. A tabela fornece a localização do começo do
registro especificado.
Esta tabela pode ser lida ou criada a cada vez que o arquivo de empregados
é aberto. Não devemos esquecer de atualizar esta tabela toda vez que o registro
sofrer alguma alteração.
24
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Sintaxe
25
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Exemplo:
26
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Note que quando você utilizar a opção optional para um argumento, todos
os demais argumentos subseqüentes deverão ser opcionais também.
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 função,
a IsMissing.
IsMissing(Nome do Argumento)
Exemplo:
27
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
28
ACCESS 2000 PROGRAMAÇÃO 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
específica existir para tratar esta ocorrência, o programa será finalizado.
Abaixo algumas dicas para não termos problemas com os erros mais
comuns:
Usarmos sempre a opção Option Explicit para obrigar a declaração das
variáveis utilizadas;
Sempre escreva o procedimento ou função em uma folha de papel para
depois transferir para o módulo, utilize-se do português estruturado;
Comente ao máximo o seu programa;
Crie sempre uma rotina de tratamento de erros em seus módulos. Os
assistentes do Access, quando criam algum controle ou procedimento do
evento, já introduzem no código a rotina padrão de tratamento de erros.
29
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Se o seu programa não 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
execução.
Esta instrução contém informações sobre os erros gerados e suas
propriedades têm valores somente enquanto o tratamento de erros não é
desativado, seja por um Resume, seja pela finalização do procedimento. Se você
desejar gerar um erro específico, use os métodos Clear e Raise, para esvaziar os
valores atuais das propriedades e gerar um novo tipo de erro.
Você obtém informações completas sobre o erro gerado inspecionando
os valores das propriedades Number e Description do objeto. Sempre que
necessário, você pode inspecionar a propriedade Number e, de posse do código do
erro, efetuar um tratamento específico para cada caso. A propriedade Description é
extremamente útil para o programador, pois evita que, em todos os pontos do
programa, seja necessário criar código para exibir uma mensagem padrão, porém
deve-se levar em conta que a mensagem será sempre exibida em inglês.
Esquematizando:
Start Label_X:
Error Resume
On Error GoTo Label_X Handler
Resume Next
Ação 1 (Error)
Resume
Ação 2
Ret_Erro: Ação 3
End
30
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Inserindo um ponto
de interrupção.
31
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Existe uma função MsgBox que serve para mostrar ao usuário uma
mensagem de erro ou de aviso. Ela mostra a mensagem em uma caixa de diálogo;
aguarda o usuário escolher um botão e retorna um valor indicando qual botão foi
clicado pelo usuário.
Esta função possui 5 argumentos. O primeiro é o próprio texto da
mensagem que se quer exibir. O segundo é o tipo de botão e o ícone que se quer
exibir. O terceiro é o texto da barra de título 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 é:
Onde:
32
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Exemplo:
Rotina_Erro:
Select Case Err.Number
Case 3022
MsgBox "Violação de Chave!", _
vbOKOnly + vbCritical, "Mensagem de Erro"
Case 3314
MsgBox "Campo requerido não preenchido!", _
vbOKOnly + vbQuestion, "Mensagem de Aviso"
Case Else
MsgBox Err.Description
End Select
33
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
34
ACCESS 2000 PROGRAMAÇÃO 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 aplicação para banco de dados relacionais. Através da instrução SQL é que o
banco de dados retorna ou executa a ação sobre o conjunto de registros. Os
comandos são, basicamente, divididos em linguagem de definição de dados (DDL) e
linguagem de manipulação de dados (DML).
Se você quiser se aprimorar mais neste vasto conceito da linguagem SQL
utilize o arquivo de help do próprio produto Access 2000, que é o mecanisno do Jet
Engine 3.5, que está no diretório C:\Windows\System\JetSql35.hlp.
Palavras-chaves:
Comandos: SELECT ...FROM
Qualificadores: WHERE
Cláusulas: ORDER BY
Operadores: =, >, <>, LIKE ...
Funções agregadas: MAX, MIN, COUNT...
Sintaxe:
35
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Exemplos:
Sintaxe:
Exemplos:
36
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Sintaxe:
Exemplos:
Sintaxe:
Exemplos:
Sintaxe:
DELETE [tabela.*] FROM tabela WHERE critérios;
Exemplos:
DELETE * FROM Funcionários WHERE Cargo = 'Estagiário';
37
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Sintaxe:
Exemplo:
Sintaxe:
Você pode usar nome, mas não tipo de dados em uma cláusula WHERE ou HAVING.
O exemplo a seguir espera que dois parâmetros sejam fornecidos e, então, aplica
os critérios aos registros na tabela Pedidos:
38
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Sintaxe:
Exemplo:
Sintaxe:
Exemplo:
Sintaxe:
Exemplo:
39
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Sintaxe:
CREATE TABLE tabela (campo1 tipo [(tamanho)] [NOT NULL] [índice1] [, campo2
tipo [(tamanho)] [NOT NULL] [
índice2] [, ...]] [, CONSTRAINT índicedemulticampos [, ...]])
Exemplo:
Sintaxe:
Exemplo:
40
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Sintaxe:
Exemplo:
Sintaxe:
Exemplo:
41
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
CONSTRAINT nome
{PRIMARY KEY (primária1[, primária2 [, ...]]) |
UNIQUE (exclusiva1[, exclusiva2 [, ...]]) |
NOT NULL (nãonulo1[, nãonulo2 [, ...]]) |
FOREIGN KEY (ref1[, ref2 [, ...]]) REFERENCES tabelaexterna
[(campoexterno1 [, campoexterno2 [, ...]])]}
Exemplo:
CREATE TABLE MinhaTabela (Nome TEXT, Sobrenome TEXT, DataNasc DATETIME,
CONSTRAINT MinhaTabelaRestrição UNIQUE (Nome, Sobrenome,
DataNasc));
Sintaxe: Avg(expr)
Sintaxe: Count(expr)
42
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Sintaxe: Min(expr)
Max(expr)
9.3.4 SOMA
Retorna a soma de um conjunto de valores contido em um campo
especificado em uma consulta.
Sintaxe: Sum(expr)
43
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Forms!Pedidos.RecordsetClone.MoveLast
MsgBox "Este formulário contém " _
& Forms!Pedidos.RecordsetClone.RecordCount _
& " registros.", vbInformation, "Quantidade de Registros"
Sub Cod_Empresa_AfterUpdate()
Dim rst As Recordset
Dim strLocalizar As String
44
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
45
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Sub LocalizarRegistro()
Dim dbs As Database, rst As Recordset
Dim strCritério As String
' Retorna referência ao banco de dados atual.
Set dbs = CurrentDb
' Define critério de localização.
strCritério = "[PaísDeDestino] = '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 strCritério
' 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!PaísDeDestino; " "; rst!DataDoPedido
rst.FindNext strCritério
Loop
End If
rst.Close
Set dbs = Nothing
End Sub
Propriedade Bookmark
46
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Sintaxe
Parte Descrição
conjuntoderegistros Uma variável de objeto que representa um objeto
Recordset tipo table que possui um índice definido como especificado pela
propriedade Index do objeto Recordset.
comparação Uma das seguintes expressões de seqüência: <, <=, =, >= ou
>.
chave1, chave2...chave13 Um ou mais valores que correspondem aos
campos no índice atual do objeto Recordset, como especificado pela configuração
da sua propriedade Index. Você pode usar até 13 argumentos chave.
Comentários
Você deve definir o índice atual com a propriedade Index antes de usar
Seek. Se o índice identificar um campo chave não-exclusivo, Seek localizará o
primeiro registro que satisfizer os critérios.
O método Seek pesquisa pelos campos-chave especificados e localiza o
primeiro registro que satisfaz os critérios especificados por comparação e chave1.
Uma vez encontrado, ele torna esse registro no registro atual e define a
propriedade NoMatch como False. Se o método Seek não conseguir localizar uma
correspondência, a propriedade NoMatch será definida como True e o registro atual
ficará indefinido.
47
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Se comparação for igual a (=), maior ou igual a (>=), ou maior que (>),
Seek começará no início do índice e pesquisará para frente.
Se comparação for menor que (<) ou menor ou igual a (<=), Seek
começará no final do índice e pesquisará para trás. Entretanto, se houver alguma
entrada de índice duplicada no final do índice, Seek começará em uma entrada
arbitrária entre as duplicatas e pesquisará para trás.
Você deve especificar valores para todos os campos definidos no índice. Se
você utilizar Seek com um índice de várias colunas e não especificar um valor de
comparação para cada campo no índice, não poderá utilizar o operador igual a (=)
na comparação. Isso porque alguns dos campos dos critérios (chave2, chave3,
etc.). adotarão Null como padrão, o que provavelmente não terá correspondência.
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.
48
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
49
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
50
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
No exemplo anterior, a variável que conterá o objeto foi declarada como tipo
Object, não como tipo Word.Application. O VBA sabe qual objeto criar porque as
extensões de arquivo estão registradas no Windows em HKEY_CLASSES_ROOT. Por
isso, a extensão .DOC significa Microsoft Word e .XLS indica o Excel.
51
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Microsoft WORD
Documents
Windows
Selection
ou então você pode combinar essas referências dos objetos, como segue:
MsgBox docDocument.Paragraphs(3).Sentences(3).Word(5)
52
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
APPLICATION
Workbooks
WorkSheets Add-Int
Charts AutoCorrect
Document Properties Assistant
VBProject DBug
CustomViews Dialogs
PivotCaches RecentFiles
Styles FileSearch
Borders VBE
Font ODBCErrors
Interior
Windows
Panels
Names
Routing Slip
Mailer
Por exemplo, um aplicativo de investimento precisaria calcular uma fórmula
para apurar um valor futuro.
53
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
txtJurosAnuais = 8
txtDepósitoMensal = 400
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 PROGRAMAÇÃO EM VBA SENAC-RS
APPLICATION
References
Forms
Controls
Reports
Controls
Modules
Screen
Docmd
Outra aplicação para o objeto DoCmd é permitir que o Access faça a maior
parte da exportação de dados para você. Nem o Visual Basic nem DAO oferecem
uma capacidade inerente de transferir dados para/de uma tabela. Os tipos possíveis
de saída para o método OutPutTo incluem as seguintes constantes:
• AcFormatActiveXServer
• AcFormatHTML
• AcFormatIIS
• AcFormatRTF
• AcFormatTXT
• AcFormatXLS
55
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
• AcSpreadSheetTypeExcel3
• AcSpreadSheetTypeExcel4
• AcSpreadSheetTypeExcel5
• AcSpreadSheetTypeExcel7
• AcSpreadSheetTypeExcel97
• AcSpreadSheetTypeLotusWK1
• AcSpreadSheetTypeLotusWK3
• AcSpreadSheetTypeLotusWK4
56
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
3. Criar uma rotina que execute um backup de segurança dos dados do seu
sistema. Para isso precisamos armazenar em disquete somente as
tabelas do banco.
8. Criar uma rotina para desabilitar/habilitar a tecla SHIFT, já que esta tecla
permite que o usuário aborte os procedimentos de inicialização 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 relatório com totalização por página. Temos que criar uma
variável para zerar o acumulador e depois devemos, a cada registro
impresso, incrementar o valor armazenado no acumulador.
57
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
11. Executar filtro por formulário para exibir todos os clientes que realizaram
compras no Brasil, com a possibilidade de se remover o filtro aplicado.
Criar um botão para exibir o relatório de todos as compras realizadas
pelo cliente que você estiver posicionado.
12. Utilizar código para testar os diversos eventos de um objeto, tais como:
antes de inserir, antes de atualizar, ao sair do controle, ao fechar, no
cronômetro, ao clicar, e outros.
58
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Anexo 1
Código Mensagem
59
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
3015 <Nome do índice> não é um índice nesta tabela. Consulte a coleção Indexes do objeto
TableDef para determinar os nomes de índice válidos.
3016 O campo não caberá no registro.
3017 O tamanho do campo é grande demais.
3018 Não foi possível encontrar o campo <nome>.
3019 Operação inválida sem um índice atual.
3020 Você tentou chamar Update ou CancelUpdate ou tentou atualizar um Field em um
conjunto de registros sem chamar primeiro AddNew ou Edit.
3021 Sem registro atual.
3022 As alterações que você solicitou à tabela não foram bem-sucedidas porque criariam
valores duplicados no índice, na chave primária ou na relação. Altere os dados no
campo ou campos que contêm dados duplicados, remova o índice ou redefina-o para
permitir entradas duplicadas e tente novamente.
3023 AddNew ou Edit já utilizado.
3024 Não foi possível encontrar <nome>.
3025 Não é possível abrir mais arquivos.
3026 Espaço insuficiente em disco.
3027 Não foi possível atualizar. O banco de dados ou objeto é somente leitura.
3028 Não é possível iniciar seu aplicativo. O arquivo de informações do grupo de trabalho
está ausente ou aberto exclusivamente por outro usuário.
3029 Nome de conta ou senha inválidos.
3030 <Nome da conta> não é um nome de conta válido.
3031 Senha inválida.
3032 Não é possível executar esta operação.
3033 Você não tem as permissões necessárias para utilizar o objeto <nome>. Faça o seu
administrador do sistema ou a pessoa que criou este objeto estabelecer as permissões
apropriadas para você.
3034 Você tentou aceitar ou cancelar uma transação sem utilizar primeiro BeginTrans.
3036 O banco de dados alcançou o tamanho máximo.
3037 Não é possível abrir mais tabelas ou consultas.
3039 Não foi possível criar o índice; muitos índices já definidos.
3040 Erro de E/S em disco durante a leitura.
3041 Não é possível abrir um banco de dados criado com uma versão anterior do seu
aplicativo.
3042 Sem identificadores de arquivo do MS-DOS.
3043 Erro de disco ou rede.
3044 <Caminho> não é um caminho válido. Certifique-se de que o nome do caminho está
digitado corretamente e que você está conectado ao servidor no qual se encontra o
arquivo.
3045 Não foi possível utilizar <nome>; o arquivo já está em utilização.
3046 Não foi possível salvar; atualmente bloqueado por outro usuário.
3047 O registro é grande demais.
3048 Não é possível abrir mais bancos de dados.
3049 Não é possível abrir o banco de dados <nome>. Ele pode não ser um banco de dados
que o seu aplicativo reconheça ou o arquivo pode estar corrompido.
3051 O mecanismo de banco de dados Microsoft Jet não pode abrir o arquivo <nome>. Ele
já está aberto exclusivamente por outro usuário ou você precisa de permissão para
visualizar seus dados.
3052 O número de bloqueios de compartilhamento de arquivos do MS-DOS foi excedido.
Você precisa aumentar o número de bloqueios instalados com Share.exe.
3053 Tarefas cliente em excesso.
3054 Campos Memorando ou ‘Objeto OLE’ em excesso.
3055 Nome de campo inválido.
3056 Não foi possível reparar este banco de dados.
3057 Operação não suportada em tabelas vinculadas.
3058 O índice ou chave primária não pode conter um valor Null.
3059 Operação cancelada pelo usuário.
3060 Tipo de dados incorreto para o parâmetro <parâmetro>.
3061 Muito poucos parâmetros. Eram esperados <número>.
3062 Alias de saída <nome> duplicado.
60
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
61
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
62
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
63
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
64
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
65
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
3317 Um ou mais valores são proibidos pela regra de validação <regra> definida para
<nome>. Insira um valor que a expressão deste campo possa aceitar.
3318 Os valores especificados em uma cláusula TOP não são permitidos em consultas
exclusão e nem em relatórios.
3319 Erro de sintaxe na consulta união.
3320 <Erro> em expressão de validação em nível de tabela.
3321 Sem banco de dados especificado na seqüência de conexão ou cláusula IN.
3322 A consulta de tabela de referência cruzada contém um ou mais títulos fixos e inválidos
de colunas.
3323 A consulta não pode ser utilizada como origem da linha.
3324 A consulta é uma consulta DDL e não pode ser utilizada como origem da linha.
3325 A consulta passagem com a propriedade ReturnsRecords definida como True não
retornou registros.
3326 Este Recordset não é atualizável.
3334 Somente pode estar presente no formato da versão 1.0.
3336 Btrieve: opção IndexDDF inválida na configuração da inicialização.
3337 Opção DataCodePage inválida na configuração da inicialização.
3338 Btrieve: as opções Xtrieve não estão corretas na configuração da inicialização.
3339 Btrieve: opção IndexDeleteRenumber inválida na configuração da inicialização.
3340 A consulta <nome> está corrompida.
3341 O campo atual deve corresponder à chave de associação <nome> na tabela que serve
como lado ‘um’ da relação um-para-muitos. Insira um registro no lado ‘um’ da tabela
com o valor de chave desejado e, em seguida, faça a entrada com a chave de
associação desejada na tabela ‘somente-muitos’.
3342 Memorando ou Objeto OLE inválido na subconsulta <nome>.
3343 Formato de banco de dados <nome do arquivo> não-reconhecido.
3344 O mecanismo de banco de dados não reconhece o campo <nome> em uma expressão
de validação ou o valor padrão na tabela <nome>.
3345 Referência de campo <nome> desconhecida ou inválida.
3346 O número de valores de consulta e de campos de destino não é o mesmo.
3349 Sobrecarga de campo numérico.
3350 O objeto é inválido para a operação.
3351 A expressão ORDER BY <expressão> inclui campos que não são selecionados pela
consulta. Somente os campos solicitados na primeira consulta podem ser incluídos em
uma expressão ORDER BY.
3352 Sem nome de campo de destino na instrução INSERT INTO <instrução>.
3353 Btrieve: não é possível encontrar o arquivo Field.ddf.
3354 No máximo um registro pode ser retornado por esta subconsulta.
3355 Erro de sintaxe no valor padrão.
3356 Você tentou abrir um banco de dados que já está aberto exclusivamente pelo usuário
<nome> na máquina <nome>. Tente novamente quando o banco de dados estiver
disponível.
3357 Esta consulta não é uma consulta definição de dados devidamente formada.
3358 Não é possível abrir o arquivo de informações do grupo de trabalho do mecanismo
Microsoft Jet.
3359 A consulta passagem deve conter pelo menos um caractere.
3360 A consulta é complexa demais.
3361 Uniões não-permitidas em uma subconsulta.
3362 A atualização/exclusão de linha única afetou mais de uma linha de uma tabela
vinculada. O índice exclusivo contém valores duplicados.
3364 Não é possível utilizar o campo Memorando ou Objeto OLE <nome> na cláusula
SELECT de uma consulta união.
3365 Não é possível definir esta propriedade para objetos remotos.
3366 Não é possível acrescentar uma relação sem campos definidos.
3367 Não é possível acrescentar. Já existe na coleção um objeto com este nome.
3368 A relação deve ser no mesmo número de campos com os mesmos tipos de dados.
3370 Não é possível modificar a estrutura da tabela <nome>. Ela está em um banco de
dados somente leitura.
3371 Não é possível encontrar tabela ou restrição.
3372 Não há índice <nome> na tabela <nome>.
66
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
3373 Não é possível criar uma relação. A tabela referenciada <nome> não tem uma chave
primária.
3374 Os campos especificados não são indexados exclusivamente na tabela <nome>.
3375 A tabela <nome> já tem um índice chamado <nome>.
3376 A tabela <nome> não existe.
3377 Não há relação <nome> na tabela <nome>.
3378 Já existe uma relação chamada <nome> no banco de dados atual.
3379 Não é possível criar relações para impor integridade referencial. Os dados existentes
na tabela <nome> violam as regras de integridade referencial na tabela <nome>.
3380 O campo <nome> já existe na tabela <nome>.
3381 Não há campo chamado <nome> na tabela <nome>.
3382 O tamanho do campo <nome> é longo demais.
3383 Não é possível excluir o campo <nome>. Ele faz parte de uma ou mais relações.
3384 Não é possível excluir uma propriedade interna.
3385 As propriedades não definidas pelo usuário não suportam um valor Null.
3386 A propriedade <nome> deve ser definida antes de utilizar este método.
3388 Função <nome> desconhecida na expressão de validação ou no valor padrão em
<nome>.
3389 Suporte de consulta não-disponível.
3390 O nome da conta já existe.
3393 Não é possível executar associação, grupo, classificação ou restrição indexada. Um
valor que está sendo procurado ou classificado é longo demais.
3394 Não é possível salvar a propriedade; ela é uma propriedade de esquema.
3396 Não é possível executar a operação em cascata. Como existem registros relacionados
na tabela <nome>, as regras de integridade referencial seriam violadas.
3397 Não é possível executar a operação em cascata. Deve haver um registro relacionado
na tabela <nome>.
3398 Não é possível executar a operação em cascata. Isto resultaria em uma chave nula na
tabela <nome>.
3399 Não é possível executar a operação em cascata. Isto resultaria em uma chave
duplicada na tabela <nome>.
3400 Não é possível executar a operação em cascata. Isto resultaria em duas atualizações
do campo <nome> na tabela <nome>.
3401 Não é possível executar a operação em cascata. Isto transformaria o campo <nome>
em Null, o que não é permitido.
3402 Não é possível executar a operação em cascata. Isto transformaria o campo <nome>
em uma seqüência de comprimento zero, o que não é permitido.
3403 Não é possível executar a operação em cascata: <texto de validação>.
3404 Não é possível executar a operação em cascata. O valor inserido é proibido pela regra
de validação <regra> definida para <nome>.
3405 Erro <texto de erro> na regra de validação.
3406 A expressão que você está tentando utilizar na propriedade DefaultValue é inválida
porque <texto de erro>. Utilize uma expressão válida para definir esta propriedade.
3407 A tabela MSysConf do servidor existe, mas está em um formato incorreto. Entre em
contato com o seu administrador do sistema.
3409 Nome de campo <nome> inválido na definição de índice ou relação.
3411 Entrada inválida. Não é possível executar a operação em cascata na tabela <nome>
porque o valor inserido é grande demais para o campo <nome>.
3412 Não é possível executar a atualização em cascata na tabela porque ela está
atualmente em uso por um outro usuário.
3414 Não é possível executar a operação em cascata na tabela <nome> porque ela está
atualmente em uso.
3415 A seqüência de comprimento zero é válida somente em um campo Texto ou
Memorando.
3416 <alerta de erro reservado>
3417 Uma consulta ação não pode ser utilizada como origem de linha.
3418 Não é possível abrir <nome da tabela>. Outro usuário está com a tabela aberta
utilizando um arquivo de controle de rede ou um estilo de bloqueio diferente.
3419 Não é possível 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 PROGRAMAÇÃO EM VBA SENAC-RS
68
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
69
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
70
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
71
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
72
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Anexo 2
RESUMO DAS FUNÇÕES INTERNAS DO VBA
Funções Matemáticas
Abs Retorna o valor absoluto de um número
Atn Calcula o arco tangente de um número
Cos Calcula o cosseno de um número
Exp Retorna o valor de e elevado a uma potência
Fix Retorna a parte inteira de um número
Int Retorna a parte inteira de um número
Log Calcula o logaritmo natural de um número
Rnd Retorna um número aleatório (randômico)
Sgn Retorna um inteiro conforme o sinal do número
Sin Calcula o seno de um número
Sqr Calcula a raiz quadrada de um número
Tan Calcula a tangente de um número
Funções Financeiras
DDB Calcula a depreciação de um ativo pelo método do Declínio de Balanço
FV Calcula o valor futuro de uma anuidade ou prestação
IPmt Calcula o valor pago a título de juros de uma prestação
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 número de períodos de uma anuidade
NPV Calcula o valor presente líquido 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 período de uma anuidade
SLN Retorna a depreciação linear de um ativo
SYD Retorna a depreciação de um ativo pelo método da soma dos dígitos dos anos.
73
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Funções de Array
Retorna uma variável de memória do tipo de dado Variant contendo o array
Array
especificado pelo usuário
Lbound Retorna o menor elemento da dimensão especificada de um determinado array
Ubound Retorna o maior elemento da dimensão especificada de um determinado array
74
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Funções de Verificação
Choose Seleciona e retorna um valor de uma lista de argumentos existente.
IIF Retorna uma de duas partes, dependendo da avaliação de uma expressão.
IsArray Retorna um valor Boolean indicando se uma determinada variável é um array
Retorna um valor Boolean indicando se uma determinada expressão pode ser
IsDate
convertida para uma data.
Retorna um valor Boolean indicando se uma determinada variável foi
IsEmpty
inicializada ou não.
Retorna um valor Boolean indicando se uma determinada expressão é um
IsError
valor de erro.
IsMissing Retorna um valor Boolean indicando seum argumento opcional foi passado
75
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
ATN
Categoria: Funções Matemáticas
Finalidade: Calcula o Arco Tangente de um número
Sintaxe: ATN(Número)
Número - A função Atn retorna o número de radianos referentes ao arco
Onde:
tangente do ângulo especificado.
Teste=Atn(30) 'Teste = 1.53747533091665
Exemplo:
Teste=Atn(45) 'Teste = 1.54857776146818
CBOOL
Categoria: Funções de Conversão de Dados
Finalidade: Converte uma expressão para Boolean (Booleano)
Sintaxe: CBOOL(Expressão)
Expressão - Se o valor da expressão resultante for zero, o valor False
Onde:
será retornado pela função CBool; caso contrário a resposta será True.
Primeiro = 10
Exemplo: Segundo = 10
Valor = 0
76
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
CDATE
Categoria: Funções de Conversão de Dados
Finalidade: Converte uma expressão para o tipo de dado Date (Data)
Sintaxe: CDATE(Data)
Hoje ="June 18, 2001"
Exemplo:
DataCurta = CDate(Hoje) ' DataCurta=18/06/01
CDBL
Categoria: Funções de Conversão de Dados
Finalidade: Converte uma expressão para Double (Número Duplo)
Sintaxe: CDBL(Expressão)
Expressão - O argumento da função poderá ser qualquer valor
Onde:
numérico válido ou expressão string
Dim MinhaMoeda As Currency
Exemplo: MinhaMoeda = 255.123456
Dado = CDbl(MinhaMoeda) ' Dado = 255.1235
CHOOSE
Categoria: Funções de Verificação
Seleciona e retorna um valor de uma lista de argumentos existentes em
Finalidade:
função do índice passado.
Sintaxe: CHOOSE( index, choice-1[, choice-2,...[,choice-n]])
Index - Expressão numérica ou campo que resulta em um valor entre 1
e o número de escolhas disponíveis.
Onde:
Choice - Expressão Variant contendo uma das possíveis escolhas.
Teste = Escolha(2) ' Teste = "Valor2" pois foi o valor retornado pela
função Escolha
Exemplo:
Function Escolha(Indice As Integer)
Escolha = Choose(Indice, “Valor1”,”Valor2”,”Valor3”)
End Function
CHR
Categoria: Funções de Conversão de Dados
Finalidade: Retorna o caractere correspondente ao código ASCII informado
Sintaxe: CHR(Código ASCII)
Teste = Chr(65) ' Teste = A
Exemplo: Teste = Chr(97) ' Teste = a
Teste = Chr(64) ' Teste = @
77
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
CINT
Categoria: Funções de Conversão de Dados
Finalidade: Converte uma expressão para o tipo de dados Integer (Número Inteiro)
Sintaxe: CINT(Expressão)
Expressão - O argumento da função poderá ser qualquer valor
Onde:
numérico válido ou expressão string
Dim Duplo As Double
Exemplo: Duplo = 8765.4321
Teste = CInt(Duplo) ' Teste=8765
CLNG
Categoria: Funções de Conversão de Dados
Converte uma expressão para o tipo de dado Long (Número Inteiro
Finalidade:
Longo)
Sintaxe: CLNG(Expressão)
Expressão - O argumento da função poderá ser qualquer valor
Onde:
numérico válido ou expressão string
Dim Dado As Double
Exemplo: Dado = 65432.123
Teste = CLng(Dado) ‘ Teste=65432
COMMAND
Categoria: Funções de Sistema Operacional
Retorna o argumento informado na linha de comando utilizado na
Finalidade:
inicialização do Microsoft Access.
Sintaxe: COMMAND
Crie um módulo onde você testará o argumento passado. Na linha de
Onde: comando adicione , após ao nome do arquivo .mdb, o seguinte texto
/cmd «argumento.
Dim Msg As String
If Command = "" Then
Msg = "Não existe argumento na linha de comando"
Exemplo: Else
Msg = "O argumento da linha de comando é " & Command
End If
MsgBox Msg
COS
Categoria: Funções Matemáticas
Finalidade: Calcula o cosseno de um ângulo.
Sintaxe: COS(Número)
Número - Pode ser qualquer expressão numérica válida que expresse
Onde:
um ângulo em radianos
Const PI = 3.14159265
Exemplo: Teste = Cos(PI) ' Teste = -1
Teste = Cos(PI/2) ' Teste = 1.7948965
CSNG
Categoria: Funções de Conversão de Dados
Finalidade: Converte uma expressão para o tipo de dados Single (Número Simples)
Sintaxe: CSNG(Expressão)
Expressão - O argumento da função poderá ser qualquer valor
Onde:
numérico válido ou expressão string
Dim Teste As Double
Exemplo: Teste = 22.12345678
Teste = CSng(Teste) ' Teste = 22.12346
CSTR
Categoria: Funções de Conversão de Dados
Finalidade: Converte uma expressão para o tipo de dados String (Texto)
Sintaxe: CSTR(Expressão)
Expressão - O argumento da função poderá ser qualquer valor
Onde:
numérico válido ou expressão string
Dim Dado As Double
Exemplo:
Dado = 555.4321
78
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Data - Data ou nome de variável do tipo Date que será utilizada para o
cálculo da função.
Onde: Ajustes
yyyy - Ano
q - Trimestre
m - mês
y - Dia do Ano
d - Dia
w - Dia da semana
ww - Semana
h - Hora
n - Minuto
s - Segundo
79
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
DATEDIFF
Categoria: Funções de Data e Hora
Retorna um intervalo de tempo decorrido entre duas datas de acordo
Finalidade:
com a unidade de tempo especificada.
DATEDIFF( Intervalo, Data1, Data2 [,FirstDayOfWeek[,
Sintaxe:
FirstWeekOfYear]])
Intervalo - Expressão 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 seção Ajustes logo
abaixo.
Ajustes
yyyy - Ano
q - Trimestre
m - mês
y - Dia do Ano
Onde:
d - Dia
w - Dia da semana
ww - Semana
h - Hora
n - Minuto
s - Segundo
Ajustes FirstDayOfWeek
0 - O atual do sistema
1 - Domingo (Padrão)
2 - Segunda
3 - Terça
4 - Quarta
5 - Quinta
6 - Sexta
7 - Sábado
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
80
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
DATEPART
Categoria: Funções de Data e Hora
Finalidade: Retorna a parte especificada de uma determinada data
Sintaxe: DATEPART( Intervalo, Data [,FirstDayOfWeek [,FirstWeekOfYear]])
Intervalo - Expressão do tipo string indicando o intervalo de tempo que
será retornado pela função. Veja a seção Ajustes a seguir.
Ajustes
Esta função utiliza os mesmos ajustes da função DateDiff
DATESERIAL
Categoria: Funções de Data e Hora
Finalidade: Retorna a data para o dia, mês e ano especificados.
Sintaxe: DATESERIAL(Ano, Mês, Dia)
Ano - Número entre 100 e 9999 inclusive
Mês - Qualquer expressão numérica entre 1 e 12
Onde:
Dia - Qualquer expressão numérica entre 1 e 31
DATEVALUE
Categoria: Funções de Data e Hora
Finalidade: Retorna uma data.
Sintaxe: DATEVALUE(Data)
Data - Expressão string representando uma data. O VBA pode
manipular datas que vão de 01/01/100 até 31/12/9999. Você também
Onde:
pode utilizar qualquer expressão que represente data, hora ou ambas.
81
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
DIR
Categoria: Funções de Sistema Operacional
Retorna o nome dos arquivos ou diretórios que combinam com o
Finalidade:
padrão especificado ou atributo de arquivo, ou volume de um drive.
Sintaxe: DIR [(PathName [,Attributes])]
Pathname - Expressão string que especifica o nome do arquivo. Este
string também pode conter o caminho completo (drive e diretório) do
arquivo procurado. Se o caminho não for encontrado, Null será
retornado.
Teste = Dir("C:\WINDOWS\*.INI")
List1.AddItem Teste
Do While Teste <> Empty
Teste = Dir
List1.AddItem Teste
Exemplo:
Loop
82
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
ENVIRON
Categoria: Funções de Sistema Operacional
Retorna o string associado a uma variável de ambiente do sistema
Finalidade:
operacional (como path e prompt, por exemplo)
Sintaxe: ENVIRON( {EnvString | Número })
EnvString - Expressão string contendo o nome da variável de ambiente.
Onde:
Número - Expressão numérica correspondente à ordem da variável na
tabela de variáveis de ambiente.
Teste = Environ(“PATH”)
Exemplo: Teste = Environ(“TEMP”) ' Teste = C:\Windows\TEMP
Teste = Environ(“USER”) ' Teste = U00012
ERROR
Categoria: Funções de Sistema Operacional
Retorna a mensagem de erro que corresponde a um dado número de
Finalidade:
erro.
Sintaxe: ERRO [(ErrorNumber)]
ErrorNumber - Qualquer número de erro válido para o VBA. Um número
de erro corresponde ao valor da propriedade Number do objeto Err, e
seus valores válidos vão de 0 a 65535, inclusive. Quando combinado
com a propriedade Name do objeto Err, este número representa uma
Onde:
mensagem de erro particular. Se ErrorNumber é um número de erro
válido, porém indefinido, a função error retorna a string definida pelo
usuário. Se Errornumber não é um número de erro válido, um erro
ocorre.
Teste = Error(5) ' Teste = Invalid Procedure Call
Exemplo: Teste = Error(6) ' Teste = Overflow
Teste = Error(7) ' Teste = Out of Memory
EXP
Categoria: Funções Matemáticas
Retorna o valor de e (base de um logaritmo natural) elevado a uma
Finalidade:
potência qualquer
Sintaxe: EXP (Número)
Número - Qualquer expressão numérica válida.
Onde:
Teste = Exp(1)
Exemplo:
O valor de e é aproximadamente 2,718282. Se o valor do número for
superior a 709,782712893, ocorrerá um erro de overflow.
FILEDATETIME
Categoria: Funções de Acesso a Arquivos
Retorna a data e hora em que o arquivo foi criado ou modificado pela
Finalidade:
última vez.
Sintaxe: FILEDATETIME(Pathname)
Pathname - Expressão string que especifica o nome do arquivo. Este
Onde: string também pode conter o caminho completo (drive e diretório) do
arquivo procurado.
Teste = FileDateTime(“C:\WINDOWS\WIN.COM”) ' Teste = 24/08/95
Exemplo:
09:50:00
FIX
Categoria: Funções Matemáticas
Finalidade: Retorna a parte inteira de um número
Sintaxe: FIX (Número)
Número - Qualquer expressão numérica válida. Se o número contém
Onde: Null, o valor de retorno será Null também.
83
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
FORMAT
Categoria: Funções de Data e Hora
Formata uma expressão de acordo com as instruções definidas pelo
Finalidade:
usuário
Sintaxe: FORMAT (Expressão [,Formato[, FirstDayOfWeek [,FirstWeekOfYear]]])
Expressão - Qualquer expressão válida
Data e Hora
Long Date - Exibe a data de acordo com o ajuste atual de seu sistema
para datas longas. Ex: Sábado, 23 de junho de 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
84
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Short Time - Exibe a hora de acordo com o ajuste atual de seu sistema
para horas curtas. Ex: 20:33
FV
Categoria: Funções Financeiras
Finalidade: Calcula o valor futuro de uma anuidade ou prestação
Sintaxe: FV(Rate, Nper, Pmt[, Pv[, Type]])
Rate - Taxa de juros no período
' Quanto obterei se depositar R$100,00 por seis meses a uma taxa de
2% ao mês
Exemplo:
Teste = FV(0.02,6,-100) ' Teste = 630.81
GETATTR
Categoria: Funções de Acesso a Arquivos
Retorna um número que representa os atributos de um arquivo ou
Finalidade:
diretório.
Sintaxe: GETATTR(Pathname)
Pathname - Expressão string que especifica o nome do arquivo. Esse
string também pode conter o caminho completo (drive e diretório) do
arquivo procurado. Se o caminho não for encontrado, Null será
retornado.
Valores de Retorno:
Onde: 0 - Normal
1 - Somente-leitura
2 - Oculto
4 - Sistema
16 - Diretório
32 - O arquivo foi alterado após o último backup
85
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
intDado = 100
Exemplo: Teste = IIf(intDado>10,"MaiorqueDez","MenorqueDez") ' Teste =
“MaiorqueDez”
INPUTBOX
Categoria: Funções de Sistema Operacional
Exibe uma caixa de diálogo para que o usuário possa digitar uma
Finalidade: resposta qualquer. Após escolher um dos botões disponíveis, o VBA
retorna o valor digitado.
Sintaxe: INPUTBOX(Prompt[, Title][,Default][,Xpos][,Ypos])
Prompt - Expressão string que será exibida como mensagem na caixa
de diálogo. O comprimento máximo da mensagem é de 1024
caracteres. Você pode quebrar a mensagem em várias linhas utilizando
a combinação de caracteres de retorno de carro CHR(13) e mudança
de linha CHR(10), como em (CHR(13) & CHR(10)).
86
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
INSTR
Categoria: Funções de Manipulação de Strings
Finalidade: Retorna a posição da primeira ocorrência de um string dentro de outro
Sintaxe: INSTR([Início,]String1,String2[,Compare])
Início - Expressão numérica que indica a posição inicial de cada busca.
Se omitido, a busca começa desde a primeira posição.
String1 - String onde é feita a procura
Onde:
String2 - Expressão string que está sendo procurada
Compare - Especifica o tipo de comparação a ser efetuado entre as
strings.
Teste = InStr("Casa","as") ' Teste = 2
Exemplo: Teste = InStr("Casamento","t") ' Teste = 8
Teste = InStr("Casa","z") ' Teste = 0
INT
Categoria: Funções Matemáticas
Finalidade: Retorna a parte inteira de um número
Sintaxe: INT(Número)
Número - Qualquer expressão numérica válida. Se número contém Null
Onde:
o valor de retorno será Null também.
Exemplo: Idêntico à função Fix
ISARRAY
Categoria: Funções de Verificação
Retorna um valor Boolean indicando se uma determinada variável é um
Finalidade:
Array.
Sintaxe: ISARRAY(Varname)
Onde: Varname - Qualquer variável de memória
Dim MeuArray(2) As Integer, Nome As String
Exemplo:
Teste = IsArray(Nome) ' Teste = False
Teste = IsArray(MeuArray) ' Teste = True
ISDATE
Categoria: Funções de Verificação
Retorna um valor Boolean indicando se uma determinada expressão
Finalidade:
pode ser convertida para uma data.
Sintaxe: ISDATE(Expressão)
Expressão - Qualquer data ou string que possa ser reconhecida como
Onde:
uma data ou hora válida
dtmDado = "23/06/2001"
strMens = "Hoje"
Exemplo:
Teste = IsDate(dtmDado) ' Teste = True
Teste = IsDate(strMens) ' Teste = False
ISEMPTY
Categoria: Funções de Verificação
Retorna um valor Boolean indicando se uma determinada variável foi
Finalidade:
inicializada ou não.
Sintaxe: ISEMPTY(Expressão)
Expressão - Qualquer expressão numérica ou string que possa ser
Onde:
reconhecida como um nome de variável.
Teste = IsEmpty(dtmDado) ' Teste = True
Exemplo: Dado = Null
Teste = IsEmpty(dtmDado) ' Teste = False
ISMISSING
Categoria: Funções de Verificação
Retorna um valor Boolean indicando se um argumento opcional foi
Finalidade:
passado para uma procedure ou não.
Sintaxe: ISMISSING(NomeArgumento)
NomeArgumento - Nome de um argumento opcional em uma
Onde:
procedure. Retorna um valor True se o argumento especificado não foi
87
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
ISNULL
Categoria: Funções de Verificação
Retorna um valor Boolean indicando se uma expressão contém dados
Finalidade:
inválidos (Null).
Sintaxe: ISNULL(Expressão)
Expressão - Qualquer valor numérico ou expressão string. Se a
Onde: expressão avaliada tiver dados inválidos (Null) a função resultará em
True, caso contrário o valor retornado será False.
strDado = ""
Teste = IsNull(strDado) ' Teste = False
Exemplo:
strDado = Null
Teste = IsNull(strDado) ' Teste = True
ISNUMERIC
Categoria: Funções de Verificação
Retorna um valor Boolean indicando se uma determinada expressão
Finalidade:
pode ser avaliada como numérica.
Sintaxe: ISNUMERIC(Expressão)
Onde: Expressão - Qualquer valor numérico ou expressão string
intDado = "100"
Teste = IsNumeric(intDado) ' Teste = True
Exemplo:
strDado = "Cem"
Teste = IsNumeric(strDado) ' Teste = False
LBOUND
Categoria: Funções de Array
Retorna o menor elemento da dimensão especificada de um
Finalidade:
determinado array.
Sintaxe: LBOUND(Arrayname[, Dimensão])
Arrayname - Nome da variável array
Dimensão - Número que indica que a dimensão do array está sendo
Onde:
inspecionada. Utilize 1 para a primeira dimensão, 2 para a segunda e
assim por diante.
Dim Dado (5 to 10)
Exemplo:
Teste = LBound(Dado,1) ' Teste = 5
LCASE
Categoria: Funções de Manipulação de Strings
Finalidade: Retorna uma string convertida para letras minúsculas
Sintaxe: LCASE(string)
String - Qualquer expressão string válida. Somente as letras maiúsculas
Onde: serão convertidas para minúsculas. Os demais caracteres como letras
minúsculas, números e sinais permanecem inalterados.
Dado = "CAIXA ALTA"
Exemplo:
Teste = LCase(Dado) ‘ Teste = "caixa alta"
LEFT
Categoria: Funções de Manipulação de Strings
Retorna o número especificado de caracteres a partir do lado esquerdo
Finalidade:
de uma string.
Sintaxe: LEFT(String, Comprimento)
Onde: String - Expressão string da qual os caracteres serão retornados.
88
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Form1.Picture = LoadPicture(“PARTY.BMP”)
Exemplo: Form1.Icon = LoadPicture(“PHONE01.ICO”)
LOG
Categoria: Funções Matemáticas
Finalidade: Calcula o logaritmo natural de um número
Sintaxe: LOG(Número)
Número - Qualquer expressão numérica válida maior que zero.
Onde:
Teste = Log(0) ' Teste = 1
Exemplo:
Teste = Log(5) ' Teste = 1.6094379124341
LTRIM
Categoria: Funções de Manipulação de Strings
Retorna uma cópia de uma string eliminando os espaços em branco
Finalidade:
existentes entre o início da string e o primeiro caractere.
Sintaxe: LTRIM(String)
String - Qualquer expressão string válida. Se a string contém Null, Null
Onde: é retornado.
Dado = "Vermelho"
Teste = Mid(Dado,1,3) ' Teste = "Ver"
Exemplo:
Teste = Mid(Dado,4) ' Teste = "melho"
Teste = Mid(Dado,5,4) ' Teste = "elho"
89
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
MINUTE
Categoria: Funções de Data e Hora
Finalidade: Retorna o número de minutos da hora especificada (de 0 à 59)
Sintaxe: MINUTE ( Time )
Time - Qualquer expressão numérica ou string que possa representar
um intervalo de tempo. Se Time contém Null, o valor de retorno da
Onde:
função será Null Também.
90
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
Valores de Retorno
1 - OK
2 - Cancel
3 - Abort
4 - Retry
5 - Ignore
6 - Yes
7 - No
' Exibe botões OK e Cancel e Ícone de Parada Crítica
Teste = MsgBox("Teste",17,"MsgBox")
Exemplo:
' Exibe Yes/No numa janela de Atenção com o primeiro botão default
Teste = MsgBox("Teste",68,"MsgBox")
NOW
Categoria: Funções de Data e Hora
Finalidade: Retorna a data e hora atuais do seu sistema
Sintaxe: NOW
Exemplo: Teste = Now ' Teste = 21/05/2001 09:50:25
OCT
Categoria: Funções de Conversão de Dados
Finalidade: Retorna uma string representando o valor octal de um número.
Sintaxe: OCT(Número)
Número - Qualquer expressão numérica ou string válida.
Onde:
Teste = Oct(8) ' Teste = 10
Exemplo:
Teste = Oct(456) ' Teste = 713
QBCOLOR
Categoria: Funções de Sistema Operacional
Finalidade: Retorna o valor da cor RGB correspondente ao número de cor
informado.
Sintaxe: QBCOLOR(cor)
Onde: Cor - Número de 0 à 15 conforme descrito na seção 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
91
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
RND
Categoria: Funções Matemáticas
Finalidade: Retorna um número aleatório (randômico)
Sintaxe: RND[(Número])
Onde: Número- Qualquer expressão numérica válida.
Ajustes :
>0 - Retorna 1
=0 - Retorna 0
<0 - Retorna -1
Exemplo: Teste = Sgn(12) ' Teste = 1
92
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
SHELL
Categoria: Funções de Sistema Operacional
Finalidade: Inicia a execução de um programa aplicativo qualquer.
Sintaxe: SHELL( PathName [,WindowsStyle])
Onde: PathName- Nome do programa a ser executado. Pode incluir eventuais
argumentos na linha de comando. Também pode incluir o diretório e
drive onde está localizado o executável. Você também pode informar o
nome do documento se o mesmo tiver sua extensão associada a um
executável no Windows (o arquivo .txt abrir pelo NotePad).
WindowsStyle - Número 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 posição
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 posição. A
janela corrente permanece ativa.
6 - A janela é exibida como um ícone. A janela corrente permanece
ativa.
SIN
Categoria: Funções Matemáticas
Finalidade: Calcula o seno de um número
Sintaxe: SIN(Número)
Onde: Número - Qualquer expressão numérica válida que expresse um ângulo
em radianos .
SPACE
Categoria: Funções de Manipulação de Strings
Finalidade: Retorna um string com o número de espaços em branco especificados
pelo usuário.
Sintaxe: SPACE(Número)
Onde: Número - Quantidade de espaços em branco que você quer incluir no
string.
93
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
STRCOMP
Categoria: Funções de Manipulação de Strings
Finalidade: Retorna um valor indicando o resultado de uma comparação de strings
(se maior, igual, ou menor)
Sintaxe: StrComp(String1, String2 [,Compare])
Onde: String1 - Qualquer expressão string válida
String2 - Qualquer expressão string válida
Compare - Especifica o tipo de comparação a ser efetuada.
Ajustes:
String1 < String2 - Retorna -1
String1 = String2 - Retorna 0
String1 > String2 - Retorna 1
String1 ou String2 = NULL - Retorna Null
STRCONV
Categoria: Funções de Manipulação de Strings
Finalidade: Retorna um string convertido de acordo com a operação especificada
pelo usuário
Sintaxe: STRCONV(String, Conversion)
Onde: String - O string a ser convertido
Conversion - A soma dos valores que especificam o tipo da conversão a
ser feita.
Ajustes:
1 - Retorna o string para caracteres maiúsculos
2 - Converte o string para caracteres minúsculos
3 - Converte a primeira letra de cada palavra do string para maiúscula
String1 > String2 - Retorna 1
String1 ou String2 = NULL - Retorna Null
94
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
TAN
Categoria: Funções Matemáticas
Finalidade: Calcula a tangente de um número
Sintaxe: TAN( Número )
Onde: Número - Qualquer expressão numérica válida que expresse um ângulo
em radianos.
TIME
Categoria: Funções de Data e Hora
Finalidade: Retorna a hora atual do sistema
Sintaxe: TIME
Exemplo: Teste = Time ' Teste = 15:43:05
TIMER
Categoria: Funções de Data e Hora
Finalidade: Retorna o número de segundos decorridos desde às 0:00hs (de 0 à 59)
Sintaxe: TIMER
Exemplo: Teste = Timer ' Teste = 855912.6
TRIM
Categoria: Funções de Manipulação de Strings
Finalidade: Retorna uma cópia de um string eliminando os espaços existentes entre
o início do string e o primeiro caractere e o último caractere do string e
o fim do mesmo.
Sintaxe: TRIM(String)
Onde: String - Qualquer expressão string válida. Se o string contém Null, o
Null é retornado.
Exemplo: Dado = " Casa "
Teste = Trim(Dado) ' Teste = "Casa"
UBOUND
Categoria: Funções de Array
Finalidade: Retorna o maior elemento da dimensão especificada de um
determinado array.
Sintaxe: UBOUND(ArrayName [,Dimensão])
Onde: ArrayName - Nome da variável Array
Dimensão - Número que indica que dimensão do array está sendo
inspecionada. Utilize 1 para a primeira dimensão, 2 para a segunda e
assim por diante.
UCASE
Categoria: Funções de Manipulação de Strings
Finalidade: Retorna uma string convertida para letras maiúsculas
Sintaxe: UCASE (String)
Onde: String - Qualquer expressão string válida. Somente as letras minúsculas
serão convertidas maiúsculas. Os demais caraceteres como números e
sinais permanecem inalterados.
Exemplo: Dado = "caixa alta"
Teste = UCase(Dado) ' Teste = "CAIXA ALTA"
95
ACCESS 2000 PROGRAMAÇÃO EM VBA SENAC-RS
VAL
Categoria: Funções de Conversão de Dados
Finalidade: Retorna os números contidos em um string
Sintaxe: VAL(String)
Onde: String - Qualquer expressão string válida.
Exemplo: Teste = Val("2457") ' Teste = 2457
Teste = Val("2 45 7") ' Teste = 2457
Teste = Val("24 and 57") ' Teste = 24
VARTYPE
Categoria: Funções de Verificação
Finalidade: Retorna um valor indicando o subtipo de uma variável
Sintaxe: VARTYPE(VarName)
Onde: VarName - Qualquer variável de memória válida
Ajustes:
00 - Empty
01 - Null
02 - Integer
03 - Long Integer
04 - Single
05 - Double
06 - Currency
07 - Date
08 - String
09 - OLE Automation Object
10 - Error
11 - Boolean
12 - Variant (usada somente com arrays de Variants)
13 - Não OLE Automation Object
17 - Byte
8192 - Array
WEEKDAY
Categoria: Funções de Data e Hora
Finalidade: Retorna o número do dia da semana (1 - Domingo, etc)
Sintaxe: WEEKDAY( Data [, Firstdayofweek])
Onde: Data - Expressão string ou numérica representando uma data. Se data
contém Null, Null é retornado
Firstdayofweek - Um constante que define o primeiro dia da semana.
Caso você não especifique, o Domingo será considerado como primeiro
dia. Veja a seção Ajustes da função DateDiff para maiores detalhes.
YEAR
Categoria: Funções de Data e Hora
Finalidade: Retorna o número do ano de uma determinada data.
Sintaxe: YEAR(Data)
Onde: Data - Expressão string ou numérica representando uma data. Se
Data contém Null, o Null é retornado.
Exemplo: Teste = Year(#23/06/2001#) ' Teste = 2001
96