Anda di halaman 1dari 24

Visual Basic for Applications: # 1

VBA e Access
Modo de interaco
As funcionalidades do VBA esto completamente integradas com o Access
Um bom exemplo dessa integrao o facto dos formulrios e dos mdulos
fazerem por defeito parte integrante de uma base de dados em Access
Visual Basic for Applications: # 2
Opes do Access
Consultar e alterar opes
Application.GetOption(OptionName)
Application.SetOption OptionName, Setting
Visual Basic for Applications: # 3
Hierarquia de Objectos
Objectos de nvel um
[Application.]Forms: collection dos formulrios que se encontram abertos na base
de dados
[Application.]Reports: collection dos relatrios que se encontram abertos na base
de dados
[Application.]DataAccessPages: collection das pginas que se encontram
abertas na base de dados
[Application.]Modules: collection dos mdulos que se encontram abertos na base
de dados
[Application.]DoCmd: permite utilizar directamente no cdigo o conjunto de
aces disponveis como macros (abrir formulrios, imprimir relatrios, ...)
[Application.]Screen: permite referenciar o controle, pgina, folha de dados,
formulrio ou relatrio que tem o foco num dado momento
Screen.ActiveControl
Screen.ActiveDataAccessPage
Screen.ActiveDatasheet
Screen.ActiveForm
Screen.ActiveReport
Visual Basic for Applications: # 4
Objecto DoCmd
Abrir formulrios/relatrios
DoCmd.OpenForm FormName, , , WhereCondition, DataMode, , OpenArgs
DoCmd.OpenReport ReportName, , , WhereCondition, , OpenArgs
DataMode pode ser uma das seguintes constantes:
acFormPropertySettings usa as permisses definidas nas propriedades do formulrio
acFormEdit permite inserir novos registos e alterar os existentes
acFormAdd apenas permite inserir novos registos (os registos existentes so ocultos)
acFormReadOnly no permite inserir novos registos nem editar os existentes
Fechar formulrios/relatrios
DoCmd.Close ObjectType, ObjectName, Save
ObjectType pode ser uma das seguintes constantes (entre outras):
acDefault para fechar a janela activa
acForm para fechar formulrios
acReport para fechar relatrios
Save pode ser uma das seguintes constantes:
acSavePrompt questiona o utilizador para guardar possveis alteraes
acSaveYes guarda possveis alteraes
acSaveNo no guarda possveis alteraes
Visual Basic for Applications: # 5
Objectos Form I
Referenciao
Forms(Clientes)
Forms!Clientes
Forms![Clientes e Facturas]
Forms(0)
Screen.ActiveForm
Propriedades I
form.Name nome do formulrio
form.Caption ttulo do formulrio
form.Visible visibilidade do formulrio
form.NavigationButtons esconde/apresenta os botes de navegao
form.AllowAdditions se True permite adicionar novos registos (activa o boto
Novo registo da barra de ferramentas e da barra de navegao)
form.AllowDeletions se True permite remover registos (activa o boto Eliminar
registo da barra de ferramentas)
form.AllowEdits se True permite editar os registos previamente guardados. Se
False permite editar novos registos at o momento anterior a serem guardados
form.DataEntry se True apenas permite adicionar novos registos
Visual Basic for Applications: # 6
Objectos Form II
Propriedades II
form.Modal se True requer que o formulrio seja fechado para que o foco possa
ser movido para outro objecto da aplicao
form.RecordSource origem dos registos do formulrio ( possvel indicar uma
tabela/consulta da base de dados ou uma expresso vlida em SQL)
form.Filter filtra os registos a apresentar no formulrio
form.FilterOn activa/desactiva o filtro
form.OrderBy modo de ordenao dos registos do formulrio
form.OrderByOn activa/desactiva o modo de ordenao
Mtodos
form.Recalc recalcula todos os controlos que possuem expresses com clculos
form.Refresh actualiza o conjunto actual de registos do formulrio. Os registos que
entretanto tenham sido adicionados/removidos (por outro utilizador num ambiente
multi-utilizador) no sero includos/excludos do conjunto actual. To pouco sero
excludos os registos que j no satisfaam a consulta associada ao formulrio
form.Requery executa novamente a consulta na qual o formulrio baseado
form.Undo desfaz todas as alteraes feitas ao registo actual desde que foi
guardado pela ltima vez
Visual Basic for Applications: # 7
Objectos Report I
Referenciao
Reports(Clientes)
Reports!Clientes
Reports![Clientes e Facturas]
Reports(0)
Screen.ActiveReport
Propriedades
report.Name nome do relatrio
report.Caption ttulo do relatrio
report.Visible visibilidade do relatrio
report.RecordSource origem dos registos do relatrio ( possvel indicar uma
tabela/consulta da base de dados ou uma expresso vlida em SQL)
report.Filter filtra os registos a apresentar no relatrio
report.FilterOn activa/desactiva o filtro
report.OrderBy modo de ordenao dos registos do relatrio
report.OrderByOn activa/desactiva o modo de ordenao
Visual Basic for Applications: # 8
Objectos Report II
Seces e grupos I
report.Section(Index) seces do relatrio
(tambm vlido para formulrios)
Index pode ser uma das seguintes constantes:
acDetail seco detalhe
acHeader seco cabealho
acFooter seco rodap
acPageHeader seco cabealho de pgina
acPageFooter seco rodap de pgina
acGroupLevel1Header cabealho do nvel de
agrupamento 1 (s relatrios)
acGroupLevel1Footer rodap do nvel de
agrupamento 1 (s relatrios)

acGroupLevel10Header cabealho do nvel de agrupamento 10 (s relatrios)


acGroupLevel10Footer rodap do nvel de agrupamento 10 (s relatrios)
report.GroupLevel(Index) nveis de agrupamento/ordenao do relatrio
Index pode variar entre 0 e 9
Visual Basic for Applications: # 9
Objectos Report III
Seces e grupos II
CreateGroupLevel(Report, Expression, Header, Footer) cria novos nveis de
agrupamento ou sequncias de ordenaes num relatrio e devolve o ndice do
nvel criado no contexto da propriedade GroupLevel (este mtodo dever ser
executado num mdulo externo ao mdulo do relatrio pois apenas est disponvel
quando o relatrio est aberto em modo de estrutura)
grouplevel.SortOrder modo de ordenao do grupo (False corresponde a
ordenao ascendente)
grouplevel.GroupHeader se True activa o cabealho do grupo
grouplevel.GroupFooter se True activa o rodap do grupo
grouplevel.GroupOn especifica como os dados so agrupados (por exemplo, para
um campo do tipo data possvel definir um agrupamento por ms)
grouplevel.GroupInterval especifica o intervalo para agrupar os dados (por
exemplo, o valor 6 para um campo do tipo data agrupado por ms corresponde a
definir intervalos de agrupamento de semestres)
grouplevel.KeepTogether impe restries ao modo de apresentar o cabealho,
rodap e seco de detalhe do grupo nas pginas do relatrio
Visual Basic for Applications: # 10
Objectos Control I
Referenciao
[form | report].Controls(Nome")
[form | report].Controls!Nome
[form | report]!Nome
[form | report].Controls(0)
Screen.ActiveControl
Propriedades comuns I
Name nome que identifica o control
Caption texto presente no control
Left / Top posio relativa ao canto superior esquerdo do formulrio/relatrio
Height / Width altura e comprimento do control
BackColor / ForeColor cor do fundo e cor do texto do control
BackStyle estilo do fundo do control (transparente/opaco)
SpecialEffect aparncia do control (com relevo, com profundidade, ...)
Font tipo de letra do control
Visual Basic for Applications: # 11
Objectos Control II
Propriedades comuns II
ControlTipText texto de ajuda para quando se mantm o foco sobre o control
TabIndex ordem de navegao do control (utilizando a tecla Tab)
TabStop se False previne a navegao por intermdio da tecla Tab
Visible visibilidade do control
Enabled se False previne o control de receber o foco e responder a eventos
Locked se True previne o utilizador de editar o valor presente no control
ControlSource origem dos dados do control (campo de uma tabela/consulta,
expresso SQL ou expresso com clculos)
Text box
Text texto presente na caixa de texto
PasswordChar caracter especial de edio para introduo de passwords
EnterKeyBehavior se True permite a edio em vrias linhas (ao premir
ENTER cria uma nova linha para a insero de dados)
Visual Basic for Applications: # 12
Objectos Control III
Command button
Default boto seleccionado por defeito quando se abre o formulrio
Cancel boto seleccionado por defeito no caso do formulrio ser cancelado
Option / check / toggle buttons
Value True se seleccionado; False se no seleccionado; Null se no activo
OptionValue valor associado ao boto no caso de estar inserido num grupo de
opes
Combo / List boxes
RowSource origem dos dados do control
RowSourceType tipo da origem dos dados do control
Table/Query os dados so os registos de uma tabela/consulta ou expresso SQL
Value List os dados so uma lista de itens
Field List os dados so uma lista de campos de uma tabela/consulta ou expresso
SQL
BoundColumn coluna dependente
Value valor da coluna dependente
Visual Basic for Applications: # 13
ActiveX Data Objects I
Aspectos gerais
A biblioteca ADO oferece
uma interface genrica de
acesso a dados
Permite comunicar com um
amplo conjunto de diferentes
formatos de dados
Define uma nica sintaxe
para manipular o mesmo tipo
de objectos ( independente
do formato dos dados)
Constitui por si s uma
hierarquia de objectos
independente da hierarquia
de objectos da aplicao
principal
Visual Basic for Applications: # 14
ActiveX Data Objects II
Hierarquia de objectos
ADODB objecto de topo da hierarquia ADO
Connection para definir e estabelecer ligaes com diferentes bases de dados
Command para executar instrues sobre uma dada ligao
Recordset para manipular conjuntos de registos
Errors conjunto de erros ocorridos durante a ltima operao de uma dada ligao
Parameters conjunto de parmetros de um dado comando com parmetros
Fields conjunto de atributos (campos) de um dado registo
Properties conjunto de propriedades especficas de um dado objecto
ADODB
Connection Command Recordset
Fields Parameters Errors
Properties Properties Properties
Visual Basic for Applications: # 15
Objectos Connection e Command
Ligaes
Explcitas versus implcitas
Ligao corrente do Access
Data Source Names (DSNs)
Objectos Connection
connection.Open ConnectionString estabelece uma nova ligao
connection.Execute(CommandText, ,Options) para executar comandos
adCmdTable indica que CommandText refere o nome de uma tabela ou consulta
adCmdText indica que CommandText refere uma expresso SQL
connection.Close fecha a ligao
Objectos Command
command.ActiveConnection ligao sobre a qual o comando deve ser executado
command.CommandText texto do comando
command.CommandType tipo de comando (adCmdTable / adCmdText)
command.Parameters parmetros do comando
command.Execute para executar o comando
Visual Basic for Applications: # 16
Data Source Names
Instalar DSNs
<Control Panel> seguido de
<Administrative Tools> e
<Data Sources (ODBC)>
Visual Basic for Applications: # 17
Objectos Recordset I
Abrir e Fechar
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
recordset.Source fonte de dados do recordset
recordset.ActiveConnection ligao associada ao recordset
recordset.CursorType tipo do cursor do recordset
adOpenForwardOnly navegao apenas para a frente
adOpenStatic navegao livre
adOpenDynamic navegao livre; visualizao em tempo real das adies e edies
(alteraes e eliminaes) feitas por outros utilizadores
adOpenKeyset navegao livre; visualizao em tempo real apenas das edies feitas
por outros utilizadores; batch updates
recordset.LockType tipo de bloqueio utilizado na edio dos registos do recordset
adLockReadOnly no permite adio nem edio
adLockPessimistic bloqueia o registo corrente logo que comea o processo de edio
adLockOptimistic bloqueia o registo corrente apenas quando sincroniza os dados com
o servidor (mtodo Update)
adLockBatchOptimistic bloqueia os vrios registos alterados apenas quando
sincroniza os dados com o servidor (mtodo UpdateBatch)
recordset.Close fecha o recordset
Visual Basic for Applications: # 18
Objectos Recordset II
Movimentao
recordset.Move NumRecords, Start move a posio do registo corrente
recordset.MoveFirst macro para recordset.Move 0, adBookmarkFirst
recordset.MoveLast macro para recordset.Move 1, adBookmarkCurrent
recordset.MoveNext macro para recordset.Move 0, adBookmarkLast
recordset.MovePrevious macro para recordset.Move -1, adBookmarkCurrent
recordset.BOF indica se a posio do registo corrente antes do primeiro registo
recordset.EOF indica se a posio do registo corrente depois do ltimo registo
recordset.Bookmark marcador que identifica unicamente o registo corrente
recordset.RecordCount nmero total de registos
Edio
recordset.Delete elimina o registo corrente
recordset.AddNew para adicionar novos registos
recordset.Update guarda as alteraes feitas ao registo corrente
recordset.CancelUpdate anula as alteraes feitas ao registo corrente
Visual Basic for Applications: # 19
Objectos Recordset III
Batch Updates
recordset.UpdateBatch guarda as alteraes feitas em todos os registos
recordset.CancelBatch anula as alteraes feitas em todos os registos
Transaces
connection.BeginTrans inicia uma nova transaco
connection.CommitTrans confirma as alteraes feitas durante a transaco e
termina a transaco
connection.RollbackTrans repe as alteraes feitas durante a transaco e
termina a transaco
connection.Attributes atributos para criao automtica de transaces
adXactAbortRetaining cria uma nova transaco aps RollbackTrans
adXactCommitRetaining cria uma nova transaco aps CommitTrans
Filtrar, ordenar e pesquisar registos
recordset.Filter critrio para filtragem dos registos do recordset
recordset.Sort critrio para ordenao dos registos do recordset
recordset.Find Criteria, SkipRows, SearchDirection, Start procura o primeiro
registo que verifica o critrio e torna-o o registo corrente
Visual Basic for Applications: # 20
Tratamento de Erros I
Ideia bsica
Sempre que ocorre um erro, o seu tratamento fica a cargo da ltima declarao
On Error invocada no procedimento corrente. Caso no haja qualquer declarao
desse tipo, o erro tratado no primeiro procedimento pai que possui tratamento de
erros. Se nenhum dos procedimentos envolvidos possuir tratamento de erros, o
sistema aborta a execuo e apresenta uma mensagem indicando o erro ocorrido.
Formas de tratar erros I
On Error GoTo line activa a rotina de tratamento de erros que se encontra a
partir da indicao line. A posterior ocorrncia de qualquer erro transfere
imediatamente a execuo para a rotina especificada
[Sub | Function] procedimento( )
On Error GoTo Rotina_Tratamento_Erros
[...]
Exit [Sub | Function]
Rotina_Tratamento_Erros:
[...]
End [Sub | Function]
Visual Basic for Applications: # 21
Tratamento de Erros II
Formas de tratar erros II
On Error Resume Next ignora a posterior ocorrncia de qualquer erro e
prossegue a execuo na instruo seguinte que provocou o erro
On Error GoTo 0 desactiva o tratamento de erros no procedimento corrente
Retomar a execuo
Resume retoma a execuo na instruo que provocou o erro
Resume Next retoma a execuo na instruo seguinte que provocou o erro
Resume line retoma a execuo na instruo indicada por line
Objecto Err
Err.Number nmero que identifica o ltimo erro ocorrido
Err.Description descrio sumria do ltimo erro ocorrido
Err.Clear limpa as propriedades Number (0) e Description (``). invocado
sempre que as seguintes instrues so executadas:
Instrues do tipo Resume
Instrues do tipo On Error
Instrues Exit Sub, Exit Function, Exit Property
Err.Raise Number provoca a ocorrncia do erro identificado por Number
Visual Basic for Applications: # 22
Collections
Objecto Collection
Conjunto ordenado de objectos no necessariamente do mesmo tipo
Declarar um novo objecto collection: Dim Var As New Collection
Propriedades
collection.Count nmero de objectos da collection (s de leitura)
Mtodos
collection.Add Item, Key, Before, After adiciona um novo objecto collection
Item: objecto a adicionar
Key: nome pelo qual o objecto ser conhecido na collection
Before / After: objecto antes/depois do qual o novo objecto deve ser adicionado
collection.Item(Index) ou collection(Index) objecto da collection de ordem Index
(o primeiro objecto de ordem 1)
collection.Item(Key) ou collection(Key) objecto da collection cujo nome Key
collection.Remove Index remove o objecto de ordem Index
collection.Remove Key remove o objecto cujo nome Key
Visual Basic for Applications: # 23
Mdulos de Classe I
Variveis de classe: data members
Private m_DataMember As Type
Propriedades de classe I
Property Get
Public Property Get PropertyName( [args] ) As PropertyDataType
[... : PropertyName = expr]
[Exit Property]
[... : PropertyName = expr]
End Property
Property Let
Public Property Let PropertyName( [args,] NewValue As PropertyDataType)
[... : m_DataMember = expr]
[Exit Property]
[... : m_DataMember = expr]
End Property
Visual Basic for Applications: # 24
Mdulos de Classe II
Propriedades de classe II
Property Set
Public Property Set PropertyName( [args,] NewObj As PropertyDataType)
[... : Set m_DataMember = expr]
[Exit Property]
[... : Set m_DataMember = expr]
End Property
Mtodos de classe
Public [Sub | Function] MethodName( [args] )
[...]
End [Sub | Function]
Eventos de classe
Private Sub Class_Initialize( ) ocorre quando um objecto da classe
instanciado pela primeira vez
Private Sub Class_Terminate( ) ocorre quando todos os objectos da classe so
removidos da memria
Classes de collections
Private m_DataMember As New Collection