Você está na página 1de 93

Disciplina: Programao em microinformtica

(ILM001)
VBA com Word / Excel / Access
Office 2013
(Verso 1.1)

Prof. Hamilton Martins Viana


Esta apostila pode ser encontrada no site:

http://sites.google.com/site/hamiltonmv

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:2

Pgina Assunto
03

Primeira parte - Word Aula 1. Criao de uma macro

07

O ambiente VBA

08

Exerccio sobre macros

12

Aula 2 de programao com Word - Uso de formulrios / Exerccio 1

15

Exerccio 2

17

Complementao

20

Segunda parte - Excel Aula 1

22

Criao de macros no Excel sem uso do gravador de macros

23

Uso de formulrios em Excel

27

Uso de tratadores de evento em VBA com Excel

30

Aula 2 de programao com Excel

30

Criao e uso de funes - a funo SaldoEstoque

36

Aula 3 de programao com Excel

37

Exerccios VBA com Excel

40

Terceira parte - Access Aula 1

41

Uso de formulrios com Access

46

Exerccios para aula 1 com Access

49

Aula 2 de Access

49

Incluso de botes no formulrio do Access:

53

Uso de DoCmd

54

Exerccios Access Aula 2

59

Aula 3 de Access

65

Aula 4 de Access

65

Uso de relatrios com Access

73

Aula 5 de Access

78

Automatizao de tarefas

84

Projeto final da disciplina.

87

Complemento - Alguns programas do projeto Access e dos exerccios de script.

93

Bibliografia

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:3


Disciplina Programao em Microinformtica (ILM 001)
Segundo a Microsoft, foram vendidas mais de 100 milhes de licenas para cada verso
do pacote Office.
O pacote Office composto de quatro aplicativos (Power Point, Word, Excel e Access).
Apesar de serem os programas mais utilizados em todo o mundo, poucos conhecem e
usam seus recursos mais avanados que podem ser utilizados atravs da programao
com VBA (Visual Basic for Applications).
Primeira Parte Word Aula 1
Para iniciarmos vamos executar o Word 2013 e em seguida d um click em Documento
em branco.
No Word, a programao feita atravs de Macros, da seguinte maneira:

Criao de uma macro


Para criar uma nova macro dever estar disponvel a guia Desenvolvedor, que fica
visvel seguindo-se os passos abaixo:

Mostrar a guia Desenvolvedor


1.
2.
3.
4.

Clique na guia Arquivo.


Clique em Opes.
Clique em Personalizar Faixa de Opes.
Em Personalizar a Faixa de Opes e em Guias Principais, marque a caixa de
seleo Desenvolvedor.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:4


D um click no boto Ok e l est a guia desenvolvedor. D um click nela que
apresentar a seguinte aparncia:

atravs dessa guia que iremos iniciar nossos trabalhos.

Uma macro contm um conjunto de instrues que sero processadas passo a passo,
quando a macro for executada. Resumindo, uma macro um programa de computador.
Para criar uma nova macro, na guia Desenvolvedor d um click no item Gravar Macro:

Na janela que abrir, escolha o nome da nova macro (pode ser por exemplo,
MinhaMacro). importante notar que nomes de macros no podem conter caracteres
especiais e nem espaos em branco. Escolha o seu documento, na caixa Armazenar
macro em:. Se voc escolher Todos os documentos, a macro ficar gravada no Word
que est instalado no Word do computador em que foi criada e voc no poder leva-la
com o documento gravado.
Vamos escolher o documento que estamos editando.
A janela para gravao da macro, ficar como o exemplo a seguir:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:5

D um click no boto OK. Note que o apontador do mouse ficou um pouco diferente. A
partir desse momento todas as aes que voc executar estaro sendo gravadas, at que
voc pare a gravao. Note que o cone que antes era Gravar Macro, agora mostra
Parar Gravao.

Antes de parar a gravao vamos realizar algumas aes que ficaro gravadas em nossa
macro. Digite por exemplo seu nome e em seguida digite Fatec-sp, pressione a tecla
Enter digite, teeeesteee por exemplo, selecione uma parte do texto e formate essa parte
selecionada com tamanho 16, e na cor vermelha.
Pare a gravao da macro com um click no boto Parar Gravao.
Obs: Como est sendo utilizado o gravador de macros, a seleo com o mouse no
possvel. Para selecionar o texto, use a tecla Shift + as setas de direo.
Pronto podemos parar agora a gravao da macro. A partir de agora, toda vez que a
macro for executada, repetir as operaes que voc realizou.
Vamos testar a macro MinhaMacro:
- Apague o texto impresso em seu documento.
- D um click para acionar o item Macros, na guia Desenvolvedor e na janela que surgir,
selecione a macro que quer executar.

- Selecione a macro desejada (neste caso a macro MinhaMacro, o nome que voc
escolheu).
- D um click no boto Executar e note que a macro repete os passos gravados.

Incluso de uma macro na Barra de Ferramentas de Acesso Rpido.


Vamos automatizar um pouco mais o processo de execuo de uma determinada macro.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:6


Podemos atribuir nossa nova macro Barra de Ferramentas de Acesso Rpido para
podermos execut-la com mais comodidade.
Para isso, d um click no tem Arquivo do menu;
Em seguida escolha Opes / Barra de ferramentas de acesso rpido
No item Escolher comandos em: selecione Macros e em seguida escolha a macro
desejada (neste caso MinhaMacro). Click em Adicionar.
Na caixa da direita, selecione a macro desejada e click em Modificar
Escolha o cone mais adequado e mude o Nome para exibio. Pronto! D um click em
Ok e veja o boto p/ acionar a macro na Barra de Ferramentas de Acesso Rpido.
Quando terminar, voc pode utilizar a macro, com apenas um click do mouse.
Abaixo h um exemplo da janela Opes com os itens a serem configurados:

Obs: D um click com o boto direito do mouse na Barra de Acesso Rpido e veja
as opes.

Programao usando o VBA (Visual Basic for Applications):


Vamos agora verificar a parte mais poderosa do uso de macros atravs do VBA.
Para isso, selecione a guia Desenvolvedor e d um click no item Macros.
Selecione a macro que interessa e d um click sobre o boto Editar. Nesse momento o
Word abre o ambiente do VBA, que muito parecido com o ambiente do Visual Basic 6.0.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:7

O ambiente VBA.

Atravs desse ambiente, podemos fazer a programao que quisermos.

Note que as frases em cor verde so comentrios (iniciam por apstrofe) sendo utilizados
apenas para documentao.

Obs.: O gravador de macros inclui, na forma de instrues, todas as aes que


executamos quando criamos a macro.
Podemos modificar diretamente as instrues ou incluir novas instrues mudando o
comportamento da macro.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:8

Exerccio sobre macros


EXERCCIOS
Inclua manualmente na macro, aps a ltima instruo j gravada, as instrues abaixo:
Selection.TypeParagraph
Selection.TypeParagraph
Selection.Font.Size = 26
Selection.TypeText Text:= Al Mundo
Selection.MoveLeft Unit:=wdCharacter, Count:=5, Extend:=wdExtend
Selection.Font.Color = wdColorGreen

Salve as modificaes efetuadas: Arquivo / Salvar normal


Nossa macro agora ficar com a seguinte aparncia:
Sub MinhaMacro()
'
' MinhaMacro Macro
' Teste de macro
'
Selection.TypeText Text:="Hamilton"
Selection.TypeParagraph
Selection.TypeText Text:="Fatec-SP"
Selection.TypeParagraph
Selection.TypeText Text:="olaaaa"
Selection.MoveLeft Unit:=wdCharacter, Count:=7, Extend:=wdExtend
' Instrues inseridas manualmente na macro
Selection.TypeParagraph
Selection.TypeParagraph
Selection.Font.Size = 26
Selection.TypeText Text:="Al Mundo"
Selection.MoveLeft Unit:=wdCharacter, Count:=5, Extend:=wdExtend
Selection.Font.Color = wdColorGreen
End Sub

Execute-a, verifique como funciona, analise as instrues da macro e explique o


funcionamento.
Obs.: Estando no ambiente do VBA voc pode obter ajuda sobre quaisquer
instrues ou objetos que desejar. Para isso, selecione a instruo ou objeto
e pressione a tecla F1.
Por exemplo, selecione a palavra MoveRight e pressione F1 (obs. A partir do
Office 2010 necessrio acesso internet para obter ajuda).
Obs.: Para alternar entre a janela do VB e a janela do Word, pressione Alt + F11.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:9


Exerccio: Altere manualmente a macro para que, aps exibir o texto anterior,
escreva seu nome em tamanho 20, em negrito, itlico e sublinhado. Aps
isso, o texto deve voltar ao normal e com tamanho do fonte 12.
Sugesto: Crie uma nova macro p/ ver como se faz negrito, itlico e sublinhado, copie o
cdigo na macro MinhaMacro e em seguida, apague a macro de exemplo.

Obs.: Note que as macros so para o VBA, apenas PROCEDIMENTOS, dentro da


pasta Mdulos
Podemos digitar diretamente na pasta Mdulos, as macros que quisermos.
Exerccio : Suponhamos que desejamos acionar a calculadora do Windows.
Crie manualmente uma nova macro chamada Calculadora, coloque um boto na Barra
de Ferramentas de Acesso Rpido, com o cone de uma calculadora, sendo que quando
esse boto for acionado, executado o programa calc.exe.

Obs.:
a) A instruo Shell( caminho / programa ) executa programas externos
b) A instruo acima executa o programa calc.exe que est na pasta
c:\windows\System32\.
Nossa macro (tambm chamamos de Procedure) ficar assim:

Obs.: Caso a Calculadora no esteja na pasta indicada acima, localize-a e corrija o


programa.
- Voltar ao ambiente do Word (alt + F11).
- Testar a macro.
Observaes importantes:
a)Todos os exerccios sero apresentados ao professor, para avaliao.
b)Se voc quiser levar seu documento de Word com macros para outro
computador, assegure-se que a pasta Mdulos esteja em seu projeto. Para isso,
arraste a pasta NewMacros para seu projeto. Veja abaixo:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:10

c)Ao salvar o documento, escolha salvar com o tipo Documento Habilitado para
Macro do Word(*.docm). Se isso no for feito, todas as macros que voc fez
sero perdidas.
Exerccios:
1-Fazer uma macro de nome TesteInputOutput que utilize:
- variveis - a maneira que manipulamos valores em programao.
- inputbox uma funo do VBA que nos permite a entrada de dados em um
programa.
- msgbox uma funo do VBA que nos permite exibir mensagens para o
usurio.
Essa macro dever declarar uma varivel do tipo string que receber uma frase
digitada pelo usurio.
Em seguida, ser exibida uma caixa de mensagem com a frase digitada. Quando
for dado o click no boto Ok da caixa de mensagem, a frase dever ser enviada
como texto para o documento do Word onde se executou a macro.
A codificao da macro ser mais ou menos como a seguir:

Complementao:
a) Na msgbox a frase digitada dever aparecer na segunda linha da caixa de
mensagem - use chr$(13) para concatenao de strings e mudar a linha.
b) O string a exibir no documento do Word deve ser no tipo de fonte Times New
Roman (Selection.Font.Name=Times New Roman), O tamanho deve ser 16,
negrito, itlico, azul.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:11


c) Aps a exibio, o tamanho deve ser 12, preto, no itlico no negrito.
2-Fazer uma macro que quando executada, exibe uma InputBox solicitando o texto para
o cabealho do documento do Word. Se nada for digitado, ao ser pressionado o boto Ok,
o cabealho padro Cabealho de Documento - Para Aula Prg Micro exibido. Se um
texto for digitado, esse texto ser o cabealho.
3-Uma boa maneira de transitar dados entre aplicaes Windows, pela rea de
Transferncia. Modifique a macro que aciona a calculadora e faa modificaes para que
o clculo efetuado na calculadora e mandado para a rea de Transferncia (Editar /
Copiar manualmente!) aparea no texto, como no exemplo: Valor calculado pela
calculadora = 9999.
Obs. O fato de a macro ter exibido a calculadora no significa que a execuo da
macro parou nesse ponto e que esteja aguardando alguma ao do usurio. As
instrues aps a exibio da calculadora foram todas executadas e o
processamento da macro foi encerrado. Se aps (ou antes) de exibir a calculadora
voc escreveu instrues para pegar dados da rea de Transferncia e Colar no
documento, essas instrues so executadas imediatamente sem interrupes at
o fim da macro.
Se voc quiser que o processamento d uma pausa enquanto voc faz os clculos
com a calculadora e Copie o resultado para depois Colar no documento, utilize
uma inputbox ou uma msgbox que interrompem o processamento at que
ocorra o click no boto Ok.

Salve seu documento que continuaremos com ele na prxima aula.


Para salv-lo, veja as observaes nos itens b e c da pgina 10.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:12


Aula 2 de programao com Word - Uso de formulrios
Execute o Word 2013 e certifique-se que a guia Desenvolvedor esteja presente. Vamos
utiliz-la para que o Word configure adequadamente o ambiente para uso de macros.
D um click no cone Gravar Macro, selecione o documento atual, click em Ok e em
seguida d um click em Parar gravao. Com esse procedimento, o Word cria
automaticamente as pastas Mdulos e NewMacros onde so gravadas as macros.

Exerccio - 1:
Fazer uma macro diretamente na pasta NewMacros (sem usar o gravador) que
exiba um formulrio com layout e programao mais ou menos como a seguir:
Programao:

Volte para o ambiente do documento do Word, d um click em Macros, selecione a


macro MacroOla e click em Executar.

O que acontece e porque???

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:13

Se voc der um click no boto Depurar o computador indica a instruo onde ocorreu o
erro. Que erro ocorreu?
O que ocorre que a instruo executvel FrmOla.Show tentou exibir um formulrio de
nome FrmOla, porm esse formulrio no existe!!! Precisamos cri-lo.
Neste momento, o ambiente do VBA est travado aguardando que voc d um click no
cone Redefinir aquele quadradinho da barra de ferramentas, abaixo do item
Depurar, da barra de menu.
Vamos voltar ao ambiente do documento do Word e incluir um cone na barra de acesso
rpido para executar a macro MacroOla.
Teste o cone e veja que o erro se repete.
Para criar um formulrio, d um click nos itens Inserir / UserForm e configure-o de
acordo com a figura abaixo:
Layout do formulrio:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:14


Os nomes (Name) dos componentes so importantes pois atravs do nome que vamos
acess-los via programao.
O name do formulrio FrmOla e o name do boto BtnClickMe configure-os dessa
maneira.
Execute novamente a macro e verifique que desta vez ela funciona...
Pare a execuo e vamos incluir alguma programao ao nosso formulrio.
Como queremos que o boto responda nossa ao ao clica-lo, vamos programar o
evento click do boto. Para isso, d um click duplo no boto.
Programao associada ao evento click do boto:

Para ganhar tempo, copie-a do texto abaixo:


Private Sub BtnClickme_Click()
' Boto de boas vindas! Ao receber o click exibe mensagem de boas vindas.
MsgBox "Bem vindos ao VBA!!!", vbExclamation, "O L A M I G O S!"
End Sub

O procedimento acima exibe uma caixa de mensagem dando boas vindas. Ao ser dado o
click no boto OK da caixa de mensagem, esta encerrada.
Note que o formulrio continua ativo, se no for fechado manualmente.
Para melhorar isso, inclua a instruo end aps MsgBox. Essa instruo encerra a
execuo do VBA. Nosso cdigo ficar assim:
Private Sub BtnClickme_Click()
' Boto de boas vindas! Ao receber o click exibe mensagem de boas vindas.
MsgBox "Bem vindos ao VBA!!!", vbExclamation, "O L A M I G O S!"
End
End Sub
Execute novamente a macro para ver o efeito da instruo End.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:15


Exerccio - 2:
Fazer diretamente na pasta NewMacros (sem usar o gravador de macros), uma
macro de nome CalculaNota que exibe um formulrio de acordo com o layout
a seguir. O usurio digita as duas notas de um aluno e o programa calcula a mdia
aritmtica.
O programa exibe no documento do Word a nota e a informao se o aluno est
Aprovado ou Reprovado.
A macro ser mais ou menos assim:

Sub CalculaNota()
'Esta macro exibe um formulrio para clculo da mdia de duas notas
MsgBox "Digite duas notas do aluno. A mdia ser exibida no documento do Word"
FrmNotas.Show
End Sub

Layout do formulrio:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:16

Vamos fazer a programao passo a passo para ver seu efeito!


Faa a seguinte programao no tratador de evento click do boto BtnCalcula:
Private Sub BtnCalcula_Click()
' Clculo da mdia de duas notas.
LblResultado.Caption = TxtNota1.Text + TxtNota2.Text
End Sub
Volte ao ambiente do Word, execute a macro e teste o formulrio. Explique o resultado.

Parece que h um problema de converso de dados.

Mudando-se o cdigo como abaixo, quase resolvemos nosso problema:

Verifique se est ok e conserte se no estiver.


Como fazer para inserir Aprovado ou Reprovado no label Situao do Aluno?

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:17


Veja exemplo de programao associada ao formulrio acima. Entenda-o e acerte seu
programa:

Inclua a instruo que vimos na aula anterior, para exibir informaes no documento do
word:
Selection.TypeText Text:="Nota do aluno: " + LblResultado.Caption
Complementao:
Exerccios:
a) As caixas de texto txtNota1 e txtNota2 devem aceitar apenas valores numricos e o
ponto decimal. A programao a seguinte:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim tecla As String
tecla = Chr$(KeyAscii)
If (tecla < "0" Or tecla > "9") And tecla <> "." Then
Beep
KeyAscii = 0
End If
End Sub
b) As caixas de texto txtNota1 e txtNota2 devem aceitar apenas nmeros e apenas
um nico ponto decimal.
Obs.: a funo InStr( txtNota1.Text,.) retorna 0 se no achou o . ou retorna a posio
onde encontrou o .. Verifique o Help on line.

c) Se uma tecla invlida for digitada, o programa dever exibir mensagem de alerta.
d) As caixas de texto txtNota1 e txtNota2 devem aceitar no mximo 4 caracteres
(propriedade maxlength).

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:18


e) Inclua no formulrio do VBA uma caixa de texto para ser digitado o Nome do Aluno.
Todos os caracteres devem ficar em maisculo. Use as funes do VBA: Asc,
Ucase, Chr. Exemplo:
KeyAscii = Asc ( UCase ( Chr ( KeyAscii ) ) )
Ao ser pressionado o boto Calcula, o nome do aluno dever aparecer no
documento do Word, em cor preta, negrito, tamanho 14.
f) Ao ser pressionado o boto Calcula, exibir no documento do Word, o nome do
aluno que est na caixa de texto. Em seguida, exibir a informao se o aluno est
ou no aprovado. O nome do aluno dever estar formatado em cor preta, negrito e
tamanho 14.
- Se o aluno estiver aprovado, o texto APROVADO,ser na cor azul.
- Se reprovado, o texto REPROVADO dever ser na cor vermelha. Aps a
impresso, o texto voltar a ser preto.

Aps efetuar seus testes, vamos eliminar as nossas macros do Word. Para isso, d
um click com o boto direito do mouse no cone da Barra de Ferramentas e os
remova.
Em seguida, d um click no item Macros, selecione cada macro e d um click no
boto Excluir.

Alguns programas deste projeto:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:19

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:20


Nota do aluno: 34,56665

Segunda Parte Excel Aula 1


Para iniciarmos, abra o Excel, para comearmos a criao de nossa macro, que ir
acrescentar um cabealho em qualquer planilha na qual for chamada. Ao abrir o Excel,
escolha Pasta de trabalho em branco.

No Excel o processo de criao de macro muito parecido com o Word. Para testar,
vamos seguir os mesmos passos usados no Word para criar uma nova macro:
Para isso, faa ficar disponvel a guia Desenvolvedor, selecione-a e d um click no
itemGravar macro.
Na janela que abrir, configure o seguinte:
- Mude o nome da macro para Cabecalho lembre-se que nomes de macros, assim
como nomes de variveis no podem conter caracteres especiais e nem espaos.
- No item Armazenar macro em, escolha Esta pasta de trabalho.
Obs.:Se voc escolher Pasta de trabalho pessoal de macros, a macro ficar gravada no Excel
que est instalado no micro. No faremos isso. A macro que criarmos ser disponibilizada
apenas na planilha que estamos desenvolvendo. Para isso, na caixa Armazenar macro
em:, escolha Esta pasta de trabalho.

- Em Descrio, substitua o ***** por seu nome.


- Click em Ok.

A partir deste momento, tudo que voc fizer estar sendo gravado na macro, at que voc
d um click no boto .Parar gravao.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:21

Quando parar a gravao, a macro ser gravada na forma de comandos VBA, com o
nome que voc escolheu.

A macro que iremos criar far o seguinte:


- Insere uma linha a partir da primeira linha
- Posiciona o foco na clula A1 e a formata com tamanho 14;
- Digita o texto Programao em microinformtica, na clula A1;
Ento no Excel, siga os seguintes passos:
. Posicione o cursor na clula B3 e formate-a com tamanho 14;
. Na clula B3 digite o texto Programao em microinformtica e pressione a tecla
Enter.
. Encerre a gravao da macro, dando um click no boto Parar Gravao.
Pronto: Nossa macroCabecalho est gravada. Vamos v-la. D um click no boto
Macros, selecione a macro Cabealho e d um click no boto Editar
Aparecer uma janela parecida com a abaixo:

A figura acima mostra uma parte do ambiente de desenvolvimento do VBA. Explore a


macro Cabecalho...
Obs. Comentrios: Em VB iniciam com apstrofo, ficam na cor verde e servem apenas
para a documentao do programa.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:22


A macro Cabecalho est gravada em nossa planilha do Excel. Vamos execut-la. Para
voltar ao Excel ou vice-versa, use a combinao de teclas Alt + F11.
Apague o contedo da clula B3 e execute a macro Cabealho que voc criou, para ver
seu efeito.
Para execut-la, abra selecione a guia Desenvolvedor, d um click no boto Macros,
escolha a macro Cabealho e d um click em Executar.
Aps execut-la, volte ao ambiente do VBA, com a combinao de teclas Alt + F11 para
estud-la um pouco melhor.
Obs. O gravador de macros do Excel gera a parte mais pesada da codificao,
gerando inclusive algumas instrues desnecessrias, que deixam a execuo da macro
mais lenta.
Podemos analisar e modificar as instrues da macro para melhor adequ-la a nossas
necessidades.
Por exemplo, podemos eliminar as instrues:

Podemos tambm substituir a instruo: ActiveCell.FormulaR1C1 = "Programao em


Microinformtica."
Por ActiveCell.FormulaR1C1 = inputbox (Digite o Cabealho desejado...)
Faa essas modificaes, execute a macro e veja o efeito.
Obs.: Voc pode executar a macro, pressionando a tecla F5. Se voc estiver no ambiente
do VBA e pressionar F5, a macro ser executada o foco volta ao ambiente do VBA.
-Para ver o efeito da execuo da macro, use Alt + F11 (Mostra a planilha).
-Limpe novamente os textos da planilha e execute a macro novamente.

Criao de macros no Excel sem uso do gravador de macros


Criando macros sem o uso de gravador:
Abra o editor do VBA (Alt + F11), e digite aps o End Sub do procedimento Sub
Cabealho:
Sub Teste_Cabecalho_Com_Data()
Note que aps voc pressionar Enter, o programa inclui automaticamente o End sub.
Digite em seguida, os comandos abaixo, deixando a procedure da forma:
Sub Teste_Cabecalho_Com_Data()
Range("A1").Select
ActiveCell.FormulaR1C1 = InputBox("Digite o Cabecalho : ", "A T E N O") + Str(Date)
End Sub

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:23

Obs. : A expresso Str ( Date) concatenada string que ser digitada na InputBox. Ela
composta por duas funes do VBA:
Str converte nmero em texto.
Date retorna a data do computador.
Pressione F5 para execut-la e veja o efeito. Obs. Quando se pressiona F5, executado
o procedimento onde est o foco (cursor do editor).
Volte para o ambiente do Excel (Alt + F11) e verifique que o procedimento
Teste_Cabecalho_Com_Data aparece junto com a macro anterior (Cabealho).

A qualquer momento, o ambiente do VBA dispe de um Help, de onde se podem obter


informaes valiosas. Para acionar o Help, basta selecionar o objeto ou instruo que se
necessita ajuda e pressionar a tecla F1. Tente com Inputbox da macro acima.

Uso de formulrios em Excel:


Utilizao de formulrios na programao com VBA: Utilizam-se formulrios de maneira
similar programao em VB. No formulrio, so includos componentes tais como
botes, caixas de texto, labels etc. que respondem a eventos provocados pelo usurio.
Para testar isso, feche o Excel, e atravs do Windows Explorer copie para a rea de
trabalho do Windows, o arquivo Livros que est em nossa pasta !!PrgMicro.
Abra o arquivo Livros que contm a planilha Estoque, igual abaixo:

Obs.: No Office 2007, o nvel de segurana aumentou. Ao salvar


uma planilha que contenha macros, no item de menu Salvar
Como escolha uma pasta Pasta de Trabalho Habilitada para
Macro do Excel. Se isso no for feito, a planilha ser salva sem
as macros e voc perder todo o seu trabalho.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:24


Crie uma macro de nome TstForm, sem nenhuma programao (click no boto Gravar
Macro ).

Pressione o boto OK e em seguida pare a gravao. Pronto! Gravamos uma macro de


nome TstForm, sem nenhuma programao. Agora, abra o ambiente do VBA, com a
combinao Alt + F11. Na janela Project Explorer, abra a pasta Mdulos/Mdulo1, que
onde esto as macros.
Inclua um formulrio associado sua planilha. v ao ambiente do VBA e d click nos itens
Inserir / UserForm. Voc ver a seguinte janela:

Atravs dessa janela voc ir elaborar e programar a interface com a qual o usurio ir
manipular dados na planilha.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:25


RECORDANDO O QUE VIMOS COM A PROGRAMAO USANDO O WORD:
Estrutura de comandos e programao em VBA aos objetos so associadas
propriedades, que so as caractersticas do objeto. Por exemplo, o tamanho, cor etc. so
propriedades de um objeto. Aos objetos tambm so associados mtodos (funes)
exemplo usando-se planilha Excel: Range(A2:A6).Select deixa selecionadas as clulas
A2 at A6.
Recordando Variveis a maneira pela qual manipulamos valores em programao.
Exemplo de criao de variveis em VBA :
D um duplo click no formulrio para abrir a janela de programao e copie somente a
parte do cdigo abaixo, para dentro do procedimento que abrir:

Private Sub UserForm_Click()

Dim x As String
x = "Bem vindos ao VBA..."
FrmVendaLivros.Caption = x

End Sub
Para executar, ponha o cursor no meio de qualquer instruo e pressione F5.
Pare a execuo!!!
Selecione o formulrio e na janela Propriedades digite, na propriedade Caption, o texto
Venda de Livros.
Inclua no formulrio os componentes abaixo e configure o formulrio de acordo com o
seguinte layout:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:26

Obs.: vamos mudar todos os nomes dos componentes, de acordo com seu tipo e objetivo:
Exemplos:
Formulrios inicia com Frm exemplo FrmVendaLivros
Caixa de Combinao - Inicia com Cxc exemplo CxcLivro
Label Inicia com Lbl exemplos LblValorUnit, LblValortotal
Caixa de Texto Inicia com Txt exemplo TxtQuantidade
Boto de comando inicia com Btn exemplo BtnCalcula
Para isso, selecione cada componente e altere a propriedade Name na janela de
propriedades.
Para executar o formulrio, vamos criar nossa procedure, digitando diretamente na Macro
TstForm:

Sub TstForm()
FrmVendaLivros.Show Esta instruo exibe e executa o formulrio FrmLivros.
End Sub
Pressione a tecla F5 para ver o programa funcionando.
Note que os componentes esto prontos e funcionando, porm no respondem aos
eventos provocados pois estes (os eventos) no esto sendo tratados. Faremos em
seguida o tratamento aos eventos que ocorrerem nos componentes do formulrio.
Feche o formulrio e volte janela da planilha (Alt + F11), selecione a rea igual abaixo,
d o nome a essa seleo de TabLivros e pressione a tecla Enter.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:27

Volte ao ambiente do VBA, selecione o componente CxcLivros e coloque em sua


propriedade RowSource, o texto TabLivros, que o nome que voc colocou na regio
selecionada da planilha.

Execute novamente o programa (tecla F5) e d um click no componente CxcLivros.


Note que o componente responde ao evento, trazendo a tabela TabLivros.

Vamos continuar nossa programao. Para voltar fase de projeto, interrompa a


execuo do programa.
Duas funcionalidades de nosso programa sero:
a) Quando ocorrer o click no nome do livro, dever surgir o valor unitrio no label de
nome LblValorUnit.
b) Se digitarmos a quantidade de livros e pressionarmos o boto Calcula, o
programa dever exibir o valor Total da compra, no label LblValorTotal.
Uso de tratadores de evento em VBA com Excel
Programao dos Tratadores de Eventos do VBA:
A janela de programao abre-se ao ocorrer o click duplo no componente que desejamos
programar. Essa janela tem a seguinte aparncia e a programao ser a seguinte:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:28

Faa o teste e verifique o funcionamento do programa.


Selecione um livro na caixa de combinao, digite a quantidade desejada e pressione o
boto Calcula. Ao fazer isso, o tratador do evento Click do boto executado e o valor
total dos livros calculado.

Exerccios:
1) Fazer o valor unitrio aparecer formatado, com centavos e separador de milhares.
Isso pode ser feito com ajuda da instruo format. Veja o exemplo abaixo:
Private Sub cxcLivro_Change()
lblValorUnit.Caption = Format(cxcLivro.Column(3), "R$##,###.00")
End Sub
2) Note que o valor unitrio fica muito bonito formatado, s que o programa no
funciona mais. Verifique o motivo e conserte-o.
3) O campo Quantidade deve aceitar apenas nmeros. Lembra do programa de
clculo da mdia que fizemos quando estudamos o VBA p/ Word? bem parecido.
4) Formatar em formato de moeda (R$) com centavos, o campo Valor Total.
5) Inclua uma caixa de texto para que o operador possa oferecer um desconto no
preo da compra. Caso o desconto exceda 20% o programa deve alert-lo sobre
esse fato, mas deve realizar o clculo assim mesmo. Use a procedure do VBA
msgbox. Use o Help para ver seu funcionamento.

6) Inclua um label p/ exibir separadamente o valor do desconto.em moeda.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:29

7) O campo em que o operador vai informar o desconto, deve aceitar somente


nmeros e o ponto decimal. Note que o desconto deve ser um valor real. Se voc
for usar variveis reais, a declarao , por exemplo: dim desconto as single.
8) Formate adequadamente todos os valores em formato de moeda para exibio nos
campos do formulrio.
Use a instruo Format. Exemplo, supondo-se que valorTotal varivel real, a
instruo de formatao do campo no formulrio, ser mais ou menos como abaixo:
LblValorTotal.Caption=Format ( valorTotal, R$#,###.00)
Formato sugerido do formulrio Venda de Livros at agora:

Para finalizar, selecione o boto e atribua para True sua propriedade Default. Se a
propriedade default de um boto estiver True, voc pode executar o programa
associado ao evento Click desse boto, pressionando a tecla Enter.
Ainda no boto, coloque a letra C na propriedade Accelerator e note que a letra C do
Calcula, ficou sublinhado. Agora voc pode executar o programa do boto com a
combinao de teclas Alt + C.

Salve a planilha, teste o programa e prepare-se para apresent-lo.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:30

Aula 2 de programao com Excel


Vamos continuar desenvolvendo nossa aplicao com VBA.
Abra o arquivo Livros.xls que utilizamos na aula anterior. Ative o ambiente do VBA (Alt +
F11)

Criao e uso de funes:


Podemos criar funes em VBA e utiliz-las na planilha Excel.
Por exemplo, suponha que precisamos da informao da situao de nosso estoque, da
seguinte maneira:
- se o estoque estiver igual ou abaixo de 3 unidades, isso significa que o estoque estar
baixo.
- se estiver entre 4 e 14 unidades, estar bom (normal).
- com 15 unidades ou mais, estar muito alto.
Podemos usar as funes nativas do Excel e criar um expresso para resolver isso. Uma
soluo melhor, seria criar a seguinte funo em VBA, que deve ser digitada no mesmo
Mdulo que contm a procedure TstForm:
A funo SaldoEstoque:
Function SaldoEstoque(estoque As Integer) As String
If estoque <= 3 Then SaldoEstoque = "Estoque Baixo"
If estoque > 3 And estoque <= 15 Then SaldoEstoque = "Estoque Normal"
If estoque > 15 Then SaldoEstoque = "Estoque Em Excesso"
End Function

Sub TstForm()
FrmVendaLivros.Show Esta instruo exibe e executa o formulrio FrmLivros.
End Sub
Agora basta chamar a funo SaldoEstoque, na planilha e utiliz-la:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:31

Verifique que o formulrio FrmVendaLivros deve estar mais ou menos com a aparncia:

Lembre-se que se o desconto oferecido for maior que 20%, o programa exibe uma
mensagem de aviso, porm faz a operao assim mesmo.
Option Explicit
Private Sub BtnCalcula_Click()
'Declaraa de variveis
Dim VUnit As Single
Dim VQuant As Integer
Dim VDesconto As Single
Dim VDescontoMoeda As Single
Dim VTotal As Single
' Atribuio dos valores s variveis
VUnit = Val(LblVunit.Caption)
VQuant = Val(TxtQuantidade.Text)
VDesconto = Val(TxtDesconto.Text)

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:32

If VDesconto > 20 Then


MsgBox " Ateno ! Desconto maior que 20%!!!"
End If
VTotal = VUnit * VQuant
VDescontoMoeda = VTotal * VDesconto / 100
VTotal = VTotal - VDescontoMoeda
LblDesconto.Caption = Format(VDescontoMoeda, "#,###.00")
LblVtotal.Caption = Format(VTotal, "#,###.00")
End Sub

Vamos alter-lo para que o usurio possa cancelar a operao caso haja algum erro.
Para isso, usaremos a msgbox na forma de funo, onde ser retornado o valor do
boto Yes ou No, que o usurio clicou.
O cdigo ficar mais ou menos igual ao abaixo:
Option Explicit
Private Sub BtnCalcula_Click()
'Declaraa de variveis
Dim VUnit As Single
Dim VQuant As Integer
Dim VDesconto As Single
Dim VDescontoMoeda As Single
Dim VTotal As Single
' Atribuio dos valores s variveis
VUnit = Val(LblVunit.Caption)
VQuant = Val(TxtQuantidade.Text)
VDesconto = Val(TxtDesconto.Text)

If VDesconto > 20 Then


If MsgBox(" Ateno: Desconto maior que 20%... Continua?", vbYesNo) = vbNo Then
Exit Sub
End If
End If
VTotal = VUnit * VQuant
VDescontoMoeda = VTotal * VDesconto / 100
VTotal = VTotal - VDescontoMoeda
LblDesconto.Caption = Format(VDescontoMoeda, "#,###.00")
LblVtotal.Caption = Format(VTotal, "#,###.00")
End Sub

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:33


Exerccio: Se o percentual do desconto for maior que 20% e o usurio pressionar o boto
No, o programa dever limpar os valores dos labels LblDesconto, LblValorTotal e dever
mandar o foco para a caixa de texto txtDesconto, deixando os valores dessa caixa
selecionados.
Para isso, utilizar o mtodo setfocus e as funes:
txtDesconto.SetFocus
Txtdesconto.SelStart=0
Txtdesconto.Sellength=len(Txtdesconto.text)

Essa parte do programa ficar mais ou menos assim:


If VDesconto > 20 Then
If MsgBox(" Ateno: Desconto maior que 20%... Continua?", vbYesNo) = vbNo Then
LblDesconto.Caption = ""
LblVtotal.Caption = ""
TxtDesconto.SetFocus
TxtDesconto.SelStart = 0
TxtDesconto.SelLength = Len(TxtDesconto.Text)
Exit Sub
End If
End If

Continuando nosso projeto, inclua um novo formulrio (Inserir UserForm) e configure-o


como abaixo:

Os nome dos componentes sero:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:34


Name do formulrio: FrmLivraria,
Name dos botes: btnVendas, btnEstoque, BtnFim.
Os botes btnVendas e btnEstoque devero iniciar com a propriedade Visible
false. Ou seja, no estaro visveis. Ficaro disponveis, ou seja, visveis, somente
quando o usurio acertar a senha.
Name das caixas de texto: txtNome, txtSenha.
Insira na propriedade Picture do formulrio FrmLivraria, uma das fotos da pasta
...\\MsManager\!!Prg_Micro...
Obs.: Podemos adequar o tamanho da figura ao formulrio, atravs da propriedade
PictureSizemode.
Especificaes e exerccios associados a este formulrio:
1) Ao iniciar a execuo da macro, o formulrio frmLivraria exibido, solicitando ao
usurio que digite seu nome e senha.
2) As letras digitadas no campo nome, devem ficar todas em maisculo. Vide exemplo
abaixo:

3) Se o foco estiver em txtNome e for pressionada a barra de espao, o foco deve


mudar para txtSenha. Exemplo:
If KeyAscii = 32 Then txtSenha.SetFocus
Obs.: Para digitao e verificao da senha, o projeto deve obedecer s especificaes a
seguir:

a) Se a senha for correta, o programa exibe a mensagem: Bem Vindo Senhor


**nome**!. Caso contrrio, o programa exibe: Caia Fora!....
b) Os caracteres digitados na senha aparecem como *.
c) A sequncia de caracteres do nome e da senha so finalizados pela barra de
espao.
d) A senha correta 1234.
e) O usurio pode fazer at trs tentativas p/ acertar a senha. A cada tentativa, o
programa informa que a senha informada foi incorreta e quantas tentativas faltam.
Se o usurio acertar a senha, veja o item "g" desta lista.
Se ocorrerem mais de 3 tentativas, o programa deve encerrar a execuo.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:35


f) Inclua o boto btnFim com a propriedade Caption Fim e com a propriedade
Accelerator = F, que ao receber o click do mouse encerra o programa. A
instruo End. Encerra a execuo do VBA.
g) Inclua os botes btnVendas com caption Vendas e o boto btnEstoque com
caption Estoque. Esses botes estaro inicialmente invisveis e s ficaro visveis
quando o usurio acertar a senha.

Ao ser dado o clique no boto btnVendas, exibido na forma modal, o formulrio


FrmVendaLivros. Dever ter a forma:
Private Sub BtnVendas_Click()
FrmVendaLivros.Show 1
End Sub
Ao ser dado o clique no boto BtnEstoque, exibido o formulrio FrmEstoque que
desenvolveremos posteriormente.
Ao ser dado o clique no boto BtnFim, o programa encerrado. Veja o exemplo abaixo:
Private Sub BtnFim_Click()
Unload FrmLivraria ' descarrega da memria o formulrio FrmLivraria
End Sub
Crie no Mdulo1, a procedure Livraria, que ao ser executada, exibe o formulrio
FrmLivraria. Veja a figura:

Salve a planilha, Teste o programa e prepare-se para apresent-lo.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:36

Aula 3 de programao com Excel


Inclua na Barra de Ferramentas de Acesso Rpido, o cone mais adequado para executar
a macro Livraria que voc fez na aula anterior (Veja como voc fez no Word pgina 7
da apostila).
Teste a execuo do programa para certificar-se que est tudo bem.
A interface de seu programa dever estar mais ou menos assim:

Exerccios:
1) Quando o usurio estiver fazendo o logon e acertar a senha, desabilitar as caixas
de texto de nome e senha.
2) Inclua no formulrio FrmVendaLivros, o boto Volta, que ao receber o click do
mouse fecha esse formulrio e o foco volta ao formulrio FrmLivraria.

Crie o formulrio FrmEstoque, com a seguinte aparncia:

Esse formulrio ser acionado quando o boto BtnEstoque, do formulrio FrmLivraria, for
clicado.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:37


Exerccios VBA com Excel:
1)
2)
3)
4)

Os campos Cdigo e Quant. s devem aceitar nmeros.


O campo Preo deve aceitar apenas nmeros e uma nica vrgula decimal.
Nos campos Nome Autor e Editora todos os caracteres devem ficar em maisculo.
Incluir instrues para que quando for pressionado o boto Ok, o programa
pergunta ao usurio se quer incluir mais algum livro. Se o usurio quiser continuar,
todas as caixas de texto sero limpas e o foco vai para TxtCodigo. Se o usurio
quiser parar, o formulrio fechado e o controle volta para frmLivraria.
5) No deve aceitar incluso de registros com campos em branco.
6) Para evitar a entrada de caracteres branco ou nulo, usar a funo trim. Essa
funo elimina brancos da esquerda e da direita do string.
Exemplo: if trim(txtNome.text) = then msgbox Nome em branco...

Programao inicial associada a esse formulrio:

Private Sub BtnCancela_Click()


Unload FrmEstoque
End Sub
Private Sub BtnOk_Click()
Dim endereco As String
Sheets("Estoque").Select
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveCell.Offset(0, 0).Value = TxtCodigo.Text
ActiveCell.Offset(0, 1).Value = TxtNome.Text
ActiveCell.Offset(0, 2).Value = TxtAutor.Text
ActiveCell.Offset(0, 3).Value = TxtEditora.Text
ActiveCell.Offset(0, 4).Value = TxtPreco.Text
ActiveCell.Offset(0, 5).Value = TxtQuant.Text
ActiveCell.Offset(0, 5).Select
endereco = ActiveCell.Address
ActiveCell.Offset(0, 1).Value = "=SaldoEstoque(" + endereco + ")"
FrmEstoque.Hide
End Sub

Obs. Note que os novos livros incluidos pelo formulrio frmEstoque no aparecem no
formulrio frmVendaLivros, quando ocorre o click no combo CxcLivro. Isso ocorre porque
sua propriedade RowSource foi definida estaticamente. Talvez devssemos defini-la
dinamicamente. Uma maneira de fazer isso redefinir a propriedade RowSource a cada
vez que ocorrer o click no combo CxcLivro. Veja as instruoes a seguir:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:38


Private Sub CxcLivro_DropButtonClick()
'Forma geral: ListBox1.RowSource = "Plan1!A1:C14"
Dim fimTabela As String
Range("A65536").End(xlUp).Offset(0, 6).Select
fimTabela = ActiveCell.Address
CxcLivro.RowSource = "Estoque!b2:" + fimTabela
End Sub

Vamos agora proceder finalizao de nosso sistema dotando-o de alguma segurana


adicional, para que o usurio no tenha acesso direto aos dados da planilha.
Vimos na aula anterior que ao ocorrer o click no boto "Fim" do formulrio principal, o
formulrio principal descarregado da memria e o controle volta para a planilha, onde
esta fica sob risco de alteraes indevidas pelo usurio.Veja o procedimento abaixo:
Private Sub BtnFim_Click()
Unload FrmLivraria
End Sub
Pode ser que no desejamos que o usurio tenha acesso diretamente aos dados da
planilha para que no aconteam acidentes desejados ou no.
Talvez seja mais interessante, ao ocorrer o click no boto "Fim", que a planilha seja
fechada. Para isso, substitua o cdigo anterior pelo cdigo abaixo:
Private Sub btnFim_Click()
Application.Quit ' encerra a execuo e fecha o Excel.
End Sub
Porm, quando for fechar o Excel, este faz uma verificao se os dados foram salvos ou
no, exigindo uma interveno do operador que tambm pode trazer riscos. Esse
problema pode ser resolvido com as instruoes:
Private Sub btnFim_Click()
If Application.ThisWorkbook.Saved = False Then
Application.ThisWorkbook.Save
' Salva as alteraes da planilha
End If
Application.Quit ' encerra a execuo e fecha o Excel.
End Sub
Ao abrir o Excel, no queremos que o usurio tenha acesso direto aos dados da planilha.
Ou seja, queremos que o processamento inicie pelo formulrio principal, atravs de um
nome e senha, ou seja, pelo formulrio frmLivraria.
Para isso, abra o "Project Explorer", abra a pasta "EstaPasta_de_trabalho" e digite o
seguinte procedimento:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:39

Option Explicit
Private Sub workbook_open()
MsgBox "B E M V I N D O S AO SISTEMA 'LIVRARIA' ", vbExclamation, "M E
N S A G E M D E B O A S V I N D A S"
FrmLivraria.Show ' exibe o formulrio inicial.
End Sub
As instruoes contidas nessa pasta e nesse procedimento so executadas quando o
arquivo de Excel aberto. Assim, ao abrir o arquivo, ao invs da planilha ser exibida ser
exibido o formulrio que solicita nome e senha.

Este apenas um prottipo de programa em VBA para o Excel, visando vislumbrar uma
pequena parcela do potencial dos recursos que o software pode oferecer.

Teste todo o projeto salve a planilha, e prepare-se para apresent-lo ao professor.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:40

Terceira Parte Access Aula 1


Aula 1 de Access.
Para trabalharmos com a programao do Access, iremos inicialmente reduzir o nvel de
segurana para evitarmos problemas com a execuo de macros. Para isso, localize e
abra o Access. No item de menu Arquivo, selecione o item Opes e selecione as
janelas:
Central de Confiabilidade/Configuraes da Central de Confiabilidade/Configuraes de
Macro. Em seguida, habilite todas as macros, click em Ok e feche o Access. Confira a
figura abaixo:

Copie o arquivo do Access Revenda.accdb do diretrio \\MsManager\!!PrgMicro para a


rea de trabalho e abra o arquivo dando-lhe um duplo click
Esse arquivo possui tabelas contendo registros de veculos e de vendedores em uma
revenda de veculos usados. Veja na figura abaixo:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:41

D um duplo click na tabela Veiculos para visualizar seus registros:

Faa o mesmo com a tabela Vendedor e verifique que ela no contm registros. Estes
sero acrescidos na tabela posteriormente.
Uso de formulrios com Access:
Selecione a tabela veculos, selecione a guia criar e d um click no cone Design de
Formulrio

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:42

Atravs do formulrio acima iremos acessar os campos do banco de dados. Note que o
ambiente de programao um pouco diferente dos estudados at agora.

Crie o formulrio a seguir:


Na figura abaixo exibida a janela Propriedades, o Formulrio e os controles que voc
pode colocar em seu formulrio.
Se a janela Propriedades no estiver visvel, d um click com o boto direito do mouse no
formulrio e, no menu popup que abrir, selecione o item Propriedades.

Na caixa de listagem da janela de propriedades, selecione Formulrio e na guia Formato


selecione o item Legenda.
Digite o texto para a barra de ttulo do formulrio: Formulrio de Veculos.
Em seguida, coloque duas caixas de texto no formulrio e formate-as como abaixo:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:43

Execute o formulrio, pressionando a tecla F5. Seu formulrio, em execuo, dever ficar
parecido com a figura a seguir:
Obs.:
1) Se o formulrio estiver maximizado, no ser exibida a barra de ttulo;
2) Se na guia "Todas", a propriedade do formulrio estilo da borda estiver Nenhum,
no ser exibida a barra de ttulo.
3) Para que o formulrio no fique maximizado, na guia "Todas", configure para "Sim",
a propriedade "PopUp" do formulrio.

Para voltar ao modo de design, click no formulrio com o boto direito do mouse e
selecione Modo Design.
Vamos colocar nomes coerentes nos componentes do formulrio. Os nomes devero
representar o tipo do componente e o que iro conter. Para representar o tipo de
componente, usaremos a seguinte padronizao:
- Nomes de caixa de texto devem iniciaro pelas letras txt exemplo: txtModelo, txtCor
etc.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:44


- Nome de Label iniciar pelas letras lbl exemplo: lblModelo, lblCor etc.
- Boto de comando iniciar pelas letras btn exemplo: btnOk, btnCancela etc.
- Boto de opo dever iniciar pelas letras opt exemplo: optopcao1, optopcao2 etc.
Outros tipos de nomes de componentes sero vistos oportunamente.
A padronizao de nomes para componentes muito importante para documentao e
tem por objetivo facilitar o desenvolvimento e manuteno de programas.
Vamos atribuir nomes s caixas de texto de nosso formulrio. Clique na caixa de texto
que conter o Modelo do veculo para selecion-la, selecione a guia Outra e altere o
Nome para txtModelo. Faa o mesmo para a caixa que conter a cor do veculo.

Vamos incluir em nosso formulrio, a tabela de onde viro os dados que iro aparecer nas
caixas de texto. Para isso, selecione o item Formulrio na caixa de listagem da janela de
propriedades, e selecione a guia "Dados.
Selecione o item Fonte de registros e d um click no cone .... Selecione a tabela
veculos, d um click em Adicionar, em seguida d um click no item Fechar.
Na escolha do campo, d um duplo click em *. Isso ir incluir em seu formulrio, a tabela
inteira.
Feche a janela Formulrio1 construtor de consulta e salve-a. Veja a figura a seguir:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:45

O Access solicitar confirmao de alterao de propriedade de consulta. Click em Sim.

Vamos agora incluir os campos do banco de dados nos componentes do formulrio:


-Selecione a caixa de texto txtModelo e na guia Dados, abra o cone
da Fonte de
controle. Note que todos os campos do banco de dados esto disponveis. Selecione o
campo modelo.
Note que o NoAssociado que era informado pela caixa txtModelo agora foi substitudo
por Modelo, informando que agora esse componente est vinculado ao campo Modelo
do banco de dados.
-Faa o mesmo para o campo cor.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:46

Ponha o foco no formulrio e pressione a tecla F5 para ver o formulrio em execuo:

Obs.
1-Se usarmos o assistente para criao de formulrio, esses passos sero feitos
automaticamente. Optamos por fazer manualmente visando a aquisio de habilidades
que usaremos posteriormente.
2-Alinhe adequadamente os campos do formulrio. Isso pode ser feito com mais preciso,
selecione o controle que quer alinhar, segure pressionada a tecla <Ctrl> e movimente o
componente com uma das teclas seta ().

Exerccios para aula 1 com Access:


1 - Inclua os campos ano e valor no formulrio, com nomes txtAno e txtValor. O
campo ano deve ser no formato nmero geral com zero decimais e o campo valor
deve ser no formato moeda com 2 decimais. As especificaes do tipo do campo so
definidas na guia Formato.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:47


2 - Fazer programao para que ao ser inserido um novo registro, o que for digitado no
campo modelo, fique em maisculo.

Procedimento:
a) Selecione a caixa de texto txtModelo e na janela Folha de Propriedades
escolha a guia Evento.
b) Escolha o item Ao pressionar tecla e d um click nos ... da direita da linha.
c) Na janela Escolher construtor, selecione Construtor de cdigoe d um click
no boto Ok.

Ser oferecido para programao, o nosso velho conhecido, o tratador do evento


KeyPress, que dever ser programado da seguinte forma:
Private Sub txtModelo_KeyPress( KeyAscii As Integer )
KeyAscii = Asc ( UCase ( Chr$ ( KeyAscii ) ) ) ' Deixa os caracteres em maisculo.
End Sub

Obs: Para alternar entre a janela do VBA e do banco de dados,


pressione Alt + F11.
3 - Fazer programao para que o ano de um novo veculo a ser digitado seja validado.
Ou seja, o ano s vlido se estiver entre 1900 e o ano atual + 1.
Para isso, selecione a caixa de texto txtAno e programe o evento Antes de atualizar,
como abaixo:
Private Sub txtAno_BeforeUpdate(Cancel As Integer)
If Val(txtAno.text) < 1900 Or Val(txtAno.text) > Year(Date) + 1 Then
MsgBox " Ano invlido... Digite o ano correto!", vbCritical, "A T E N O"
Cancel = True 'Cancela a atualizao
End If
End Sub
4 O campo valor deve aceitar apenas valores numricos e a vrgula decimal. A
programao a seguinte:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:48


Private Sub txtValor_KeyPress(KeyAscii As Integer)
Dim TECLA As String
TECLA = Chr$(KeyAscii)
If (TECLA < "0" Or TECLA > "9") And TECLA <> "," Then
Beep
KeyAscii = 0
End If
End Sub
5 O campo valor deve aceitar apenas nmeros e apenas uma nica vrgula decimal.
Obs.: a funo InStr( txtValor.Text,,) retorna 0 se no achou a , ou retorna a posio
onde encontrou a ,. Verifique o Help on line.

6 O campo ano deve aceitar apenas nmeros e no mximo 4 caracteres. Se for digitado
mais de 4 caracteres, exibir mensagem de alerta. Utilize a funo LEN que retorna o
comprimento de um string use o help para verificar.
7 No campo cor todos os caracteres digitados devem estar em maisculo.
8 Os campos ano e valor devem aceitar a tecla BackSpace. O cdigo ASCII dessa
tecla 8. Portanto, se keyAscii for igual a 8, a tecla ser vlida.
9 Se uma tecla invlida for digitada, o programa dever exibir mensagem de alerta.
10 Inclua no formulrio, os campos Estado e Placa. Todos os caracteres devem ficar em
maisculo.
11 Insira no banco de dados, atravs dos botes de navegao do formulrio, os
registros abaixo:
MODELO
1
2
3
4

CORSA
CORSA
CORSA
CORSA

COR

ESTADO

BEGE
VERDE
BRANCO
PRETO

RJ
SP
BA
SP

PLACA

ANO

CAU3254
BBJ2429
EBF9553
GTH8865

VALOR

1998
2000
2002
1998

8000,00
12000,00
15000,00
7500,00

12 Todos os campos devem aceitar a tecla Tab. O valor ascii em decimal da tecla Tab
9. Pressionando-se a tecla Tab, a ordem de tabulao deve ser adequada ao
usurio (de cima p/ baixo) verifique.
Salvar o arquivo Revenda, copi-lo para continuar na prxima aula e preparar para
apresentar o formulrio ao professor.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:49


Aula 2 de Access.
Abrir o arquivo Revenda utilizado na aula anterior. O formulrio deve estar com a seguinte
aparncia:

Vamos personalizar um pouco nosso formulrio e depois iremos remover o componente


padro de navegao de registros. Para isso, vamos selecionar o cone do componente
boto de comando na guia Design, e vamos inclu-lo no formulrio. Note que o VBA abre
uma janela para escolhermos qual a categoria de boto ns queremos. Vamos selecionar
a categoria Navegao de registro.
Incluso de botes no formulrio do Access:
Vamos inserir em nosso formulrio, todos os botes dessa categoria, exceto o boto
localizar prximo.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:50

Para cada boto que voc inserir, click no boto Avanar e configure as propriedades do
boto a seu gosto. muito importante atribuir um nome de acordo com nossa
padronizao, como por exemplo, para o boto Ir para primeiro registro, o nome
btnPrimeiroRegistro, btnProximo etc..
Faa isso para todos os botes.
Exerccio: Coloque mais dois botes da categoria Operaes de registro: Adicionar novo
registro e Excluir registro. Mude seus nomes para btnAdicionaNovo e btnExcluir, por
exemplo.
Nosso formulrio ficar mais ou menos assim:

Agora que j temos nossos prprios botes de controle dos registros, no precisamos
mais do controle fornecido automaticamente com o relatrio. Para elimin-lo, no modo de
design do formulrio, coloque No no item Formulrio / Formato / Botes de navegao.
Execute o formulrio para verificar e teste todos os botes que voc colocou.
Pare a execuo!
Selecione o boto que insere um novo registro e verifique que na guia Evento, indica que
a ao desse boto ( e de todos os demais ) executada atravs de uma Macro
Incorporada.
Note que para cada boto que voc incluiu, o editor de VBA do Access providenciou uma
"Macro Incorporada" que faz o trabalho de acordo com as funes do boto.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:51

Se for essa a nica ao esperada quando ocorrer o click no boto, ento est tudo
pronto para uso desse boto pois essa macro faz apenas isso. Veja as instrues da
macro, dando um click nos (...), apontado na figura acima.

A est a macro incorporada! Ela feita com instrues especiais diferentes de VBA.

Suponha que aps pressionarmos o boto btnNovo, queremos que o foco v para a caixa
de texto txtModelo ou queremos realizar algumas outras aes. Nesse caso no devemos
usar o recurso de macro incorporada e sim o procedimento do evento.
Para isso, d um click no boto apontado na figura abaixo, selecione o "Procedimento do
evento" e click no boto com os (...).

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:52

E l est nosso velho conhecido, tratador do evento Click do boto btnNovo.

Digite nele o cdigo abaixo e teste-o.


Obs.: Digite apenas o cdigo que est entre o Private Sub... e o End Sub.
Private Sub btnNovo_Click()
On Error GoTo Err_btnNovo_Click
DoCmd.GoToRecord, ,acNewRec
Exit_btnNovo_Click:
Exit Sub
Err_btnNovo_Click:
MsgBox Err.Description
Resume Exit_btnNovo_Click
End Sub

O cdigo ficar como na figura abaixo:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:53

Verifique que o cdigo para inserir um novo registro no banco de dados funciona do mesmo
modo que quando havia a macro incorporada. Porm, agora podemos incluir a codificao
que quisermos, como por exemplo, aps o novo registro ser criado, mandamos o foco para
a caixa de texto txtNome. A instruo que faz isso :
txtNome.setfocus.
Onde voc ir inclu-la? Faa isso e teste novamente o uso do boto.
Uso de DoCmd:
Note a palavra DoCmd no cdigo acima. Dizemos que DoCmd um objeto do modelo
de objetos do Access. O objeto DoCmd suporta vrios mtodos que provocam vrias
aes na programao em VBA para o Acess.
Veja a seguir, a programao em VBA associada ao evento click no boto btnProximo,
onde o objeto DoCmd executa o mtodo GoToRecord, com o argumento acNext:
Private Sub btnProximo_Click()
On Error GoTo Err_btnProximo_Click
DoCmd.GoToRecord , , acNext
Exit_btnProximo_Click:
Exit Sub
Err_btnProximo_Click:
MsgBox Err.Description
Resume Exit_btnProximo_Click
End Sub

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:54


Na figura abaixo vemos um trecho de cdigo associado ao boto que ao receber o click,
exibe no formulrio o primeiro registro.

Outros exemplos de uso de DoCmd:


DoCmd.Maximize ' maximiza o formulrio onde est inserido.
DoCmd.Close ' fecha o formulrio.
DoCmd.Quit ' fecha o Access.
DoCmd.OpenForm "frmMenu" 'exibe o formulrio de nome frmMenu.

Exerccios Access Aula 2:


Se um veculo do banco de dados for vendido, o vendedor dever informar a venda, a fim
de receber sua comisso.
Para que o vendedor possa fazer isso, inclua no formulrio, o boto Vender, que ao ser
pressionado solicita o cdigo do vendedor. Esse cdigo dever ser inserido no campo
codvendedor do banco de dados Veculos. A digitao do cdigo do vendedor poder
ser feita por uma InputBox.

Incluir no formulrio o boto para o vendedor efetuar a venda de um veculo.

O formulrio ficar com a seguinte aparncia:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:55

Incluso de um boto comum no formulrio (sem programao automtica):


Para incluir um boto comum no formulrio proceda da seguinte maneira: Inclua um boto
no formulrio e na janela apresentada, onde aparecem as categorias de boto oferecidas,
pressione a tecla Cancelar.
Na janela de propriedades, selecione a guia Outra e mude o nome para btnVender.
Na guia Formato, mude a legenda para &Vender Veculo. Com a legenda dessa maneira,
voc poder executar o programa associado ao boto, pressionando Alt + V.
O cdigo do vendedor a ser digitado dever possuir dgito de controle que ser verificado
atravs de clculo pelo mdulo 11.
O dgito verificador (dv), ou dgito de controle (dc) calculado pelo mdulo 11 bastante
seguro, e usado para validao de CPF, RG, CGC e vrios outros cdigos oficiais.
Um dgito de controle calculado pelo mdulo 11 da seguinte maneira : Por exemplo,
supondo-se o cdigo de vendedor 200506003, fazem-se os clculos.
3x2=6
0x3=0
0x4=0
6 x 5 = 30
0x6=0
5 x 7 = 35
0x8=0
0x9=0
2 x 10= 20

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:56


+

-------91

Pega-se o resultado da soma ( 91), divide-se por 11 e pega-se o resto, que neste caso
3.
91 / 11 = 88

Resto = 3

Da, faz-se 11 3 = 8. Pronto. O dgito calculado 8, e o cdigo do vendedor, com dgito,


ficar: 200506003-8
Se o resto da diviso por 11 for 0 ou 1, o dgito o prprio resto.
Na programao usamos a funo Mod do VBA, que retorna o resto da diviso de um
nmero inteiro por outro. Exemplo DigitoLido=CodigoLido mod 10
Nas divises, para truncar o nmero em sua ltima casa, usamos a funo Int para que o
VBA no cause arredondamento no resultado da diviso. Por exemplo, codigo =
Int(codigo / 10)

Acompanhe o programa a seguir:


Private Sub btnVender_Click()
Dim codigolido As Long
Dim digitolido As Integer
Dim codigo As Long
Dim digito As Integer
Dim soma As Integer
Dim mult As Integer
mult = 2
soma = 0
codigolido = Val(InputBox(" Digite o cdigo do vendedor: ", " V e n d a d e V e c u l o"))
digitolido = codigolido Mod 10
codigo = Int(codigolido / 10)
While codigo > 0
soma = soma + (codigo Mod 10) * mult
mult = mult + 1
codigo = Int(codigo / 10)
Wend
digito = soma Mod 11
If digito > 1 Then digito = 11 - digito
End Sub

O programa acima recebe um cdigo numrico de vendedor com dgito, separa esse
dgito e calcula, com o restante do nmero lido, um outro dgito com a finalidade de
verificar se o dgito calculado confere com o digito lido.

Exerccios:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:57


1 Verificar se o usurio digitou apenas nmeros. Caso tenha sido digitado algum
caractere no numrico, exibir mensagem de erro e abandonar o procedimento.
Utilize a funo IsNumeric. A programao ficar assim:
Dim codigostr As String
codigostr = InputBox(" Digite o cdigo do vendedor: ", " V e n d a d e V e c u l o")
' verifica se foram digitados s numeros.
If Not IsNumeric(codigostr) Then
MsgBox "Nmero invlido! Digite apenas nmeros...", vbCritical, "ATENO"
Exit Sub
End If

2 - Verificar se o dgito calculado igual ao dgito lido. Se for igual, aceitar o cdigo do
vendedor e inclu-lo na tabela Veiculos, no campo codvendedor, e exibir mensagem
Venda efetuada com sucesso!
3 - Se o dgito no bater, exibir mensagem de erro ao usurio e abandonar o
procedimento.
O cdigo ser mais ou menos como abaixo:
If digitolido = digito Then
codvendedor = codigolido ' codvendedor campo do Banco de Dados.
' A instruo abaixo salva o registro corrente - grava o codigo do vendedor.
DoCmd.RunCommand acCmdRefresh
MsgBox "Venda efetuada com sucesso!"
Else
MsgBox "Digito no bate. Tente novamente....", vbExclamation, "A T E N O"
Exit Sub
End If

4 Se a venda for concretizada e aps ser inserido com sucesso o cdigo do vendedor, o
boto btnVender dever ficar desabilitado, com caption Vendido. Usar a instruo
btnVender.enabled = false.
5 Ao navegar pelo banco de dados, se o veculo estiver venda, ou seja, se o campo
de cdigo de vendedor ainda estiver em branco, o boto btnVender dever ficar
habilitado, e com caption = &Vender. Caso contrrio, ou seja, se o veculo j foi
vendido, consequentemente o campo codvendedor estar preenchido. Nesse caso, o
boto btnVender dever estar desabilitado, com caption Vendido.
A programao ser mais ou menos como a seguir:

Obs.: No Access, para verificar se um campo do banco de dados


contm o carter nulo, usamos a funo IsNull. Veja o exemplo
abaixo:
If IsNull(codvendedor) Then
btnVender.Caption = "&Vender"
btnVender.Enabled = True
Else

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:58


btnVender.Caption = "Vendido"
btnVender.Enabled = False
End If
A programao acima dever ser codificada em todos os botes de navegao.
SALVE O PROJETO E PREPARE-SE P/ APRESENT-LO AO PROFESSOR.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:59


AULA 3 DE ACCESS:
Abra o arquivo de Access Revenda da aula anterior e teste-o p/ verificar se tudo funciona
de acordo com as especificaes anteriormente fornecidas.

Exerccios:
1 Com objetivo de deixar o cdigo do evento Click do boto btnVender mais enxuto e
mais elegante, criar a funo CalculaDC que recebe o cdigo do vendedor, sem dgito
de controle, calcula e retorna o dgito calculado com base no cdigo recebido.
Utilize essa funo no evento click do boto btnVender, ao invs daquele cdigo enorme.
2 Ao pressionar o boto Inserir Registro o foco deve ir para a caixa de texto txtModelo.
Verifique se a ordem de tabulao est correta. Se no estiver, corrija-a. A propriedade
que especifica a ordem de tabulao ndice de tabulao. Esta inicia por zero e vai
seqencialmente de acordo com a tabulao desejada.
Caso voc tenha dvidas quanto a partes do cdigo, veja exemplos nas prximas
pginas.

Lembre-se que a programao final do evento Click do boto btnVender estava mais ou
menos assim (sem uso da funo CalculaDC):

Private Sub btnVender_Click()


Dim codigostr As String
Dim codigolido As Long
Dim digitolido As Integer
Dim codigo As Long
Dim digito As Integer
Dim soma As Integer
Dim mult As Integer
mult = 2
soma = 0
codigostr = InputBox(" Digite o cdigo do vendedor: ", "

V e n d a d e V e c u l o")

' verifica se foram digitados s numeros.


If Not IsNumeric(codigostr) Then
MsgBox "Nmero invlido! Digite apenas nmeros...", vbCritical, "ATENO"
Exit Sub
End If
codigolido = Val(codigostr)
digitolido = codigolido Mod 10
codigo = Int(codigolido / 10)
While codigo > 0
soma = soma + (codigo Mod 10) * mult
mult = mult + 1
codigo = Int(codigo / 10)
Wend
digito = soma Mod 11

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:60


If digito > 1 Then digito = 11 - digito
If digitolido = digito Then
codvendedor = codigolido ' codvendedor campo do BD
' A instruo abaixo salva o registro corrente - grava o codigo do vendedor.
DoCmd.RunCommand acCmdRefresh
MsgBox "Venda efetuada com sucesso!"
Else
MsgBox "Digito no bate. Tente novamente....", vbExclamation, "A T E N O"
Exit Sub
End If
End Sub

Quando voc fizer e utilizar a funo CalculaDC, o programa deve ficar mais ou
menos assim:
Function CalculaDC(novocodigo As Long) As Integer
Dim codigo As Long
Dim digito As Integer
Dim soma As Integer
Dim mult As Integer
codigo = novocodigo
mult = 2
soma = 0
While codigo > 0
soma = soma + (codigo Mod 10) * mult
mult = mult + 1
codigo = Int(codigo / 10)
Wend
digito = soma Mod 11
If digito > 1 Then digito = 11 - digito
CalculaDC = digito 'Retorna o valor do digito calculado
End Function
Private Sub btnVender_Click()
Dim codigostr As String
Dim codigolido As Long
Dim codigo As Long
Dim digitolido As Integer
On Error GoTo ExibeErro:
codigostr = InputBox(" Digite o cdigo do vendedor: ", "
' verifica se foram digitados s numeros.
If Len(codigostr) > 10 Then
MsgBox "Cdigo com mais de 10 dgitos - redigite!"
Exit Sub
End If

V e n d a d e V e c u l o")

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:61


If Not IsNumeric(codigostr) Then
MsgBox "Nmero invlido! Digite apenas nmeros...", vbCritical, "ATENO"
Exit Sub
End If
codigolido = Val(codigostr) 'converte o codigo p/ numero
digitolido = codigolido Mod 10 'separa o digito lido
codigolido = Int(codigolido / 10) 'tira o digito do codigo - trunca
If digitolido = CalculaDC(codigolido) Then 'Chamada da funo VerificaDC
'o digito bateu...
codvendedor = Val(codigostr) ' codvendedor campo do BD
'A instruo abaixo salva o registro corrente - grava o codigo do vendedor.
DoCmd.RunCommand acCmdRefresh 'Grava registro corrente
MsgBox "Venda efetuada com sucesso!"
btnVender.Caption = "Vendido"
btnProximo.SetFocus
btnVender.Enabled = False
Else
' No else, o digito no bateu...
MsgBox "Dgito no bate - redigite!", vbCritical, "A T E N O"
Exit Sub
End If
Exit Sub
ExibeErro:
MsgBox Error(Err)
End Sub

Alguns problemas podero ocorrer, que devero ser solucionados:


Verifique os aspectos da esttica do formulrio: alinhamento e tamanho dos
componentes, bom balanceamento de cores (no deve ser um carnaval e nem totalmente
cinza), etc.
A seguir algumas dicas sobre problemas observados em projetos anteriores:
1) Ao inserir um novo registro o foco deve ir para txtModelo (txtModelo.SetFocus).
2) Verifique que ao inserir um novo registro, se o campo de cdigo do vendedor
estiver com o valor zero, mesmo assim o boto btnVender dever estar habilitado.
3) Se o campo do banco de dados de cdigo de vendedor estiver preenchido,
significa que aquele veculo j foi vendido. Portanto o boto btnVender dever estar
desabilitado com o caption Vendido.
4) Efetue a venda do primeiro veculo da tabela, notando que o boto btnVender
torna-se desabilitado, com caption Vendido. Feche o Access e abra-o
novamente, acessando o formulrio de vendas. O boto btnVender est
desabilitado e com caption Vendido? Para resolver esse problema, programe
adequadamente o tratador de evento FormLoad. Ele executado quando o

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:62


formulrio carregado na memria e tem por objetivo atribuir condies iniciais a
objetos, inicializar variveis, etc.
Faa uma reviso geral at este ponto do projeto. O formulrio deve estar minimamente
com a seguinte aparncia:

Continuao: Dando continuidade a nosso projeto, faa os exerccios a seguir:


1 - Incluir no projeto um formulrio de nome frmVendedor, contendo todos os campos da
tabela vendedor. Mude os nomes das caixas de texto desse formulrio, para nomes
compatveis com caixas de texto, de acordo com o padro adotado por ns:
txtCodVendedor, txtNome, txtEndereco, txtEstadoCivil, txtSalarioFixo.
2 - Incluir botes para navegao no banco de dados e um boto do grupo Operaes de
registro com ao Adicionar registro, para podermos incluir novos vendedores em
nosso banco de dados.
3 Eliminar o componente padro de navegao do relatrio.
4 A caixa de texto Salrio Fixo deve aceitar somente nmeros e uma nica vrgula
decimal.
Esse formulrio dever ficar minimamente com a seguinte aparncia:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:63

4 - Para que o usurio no possa alterar os registros j existentes no banco de dados,


programar o evento Form_load() para desabilitar as caixas de texto do formulrio:
Private Sub Form_Load()
txtcodvendedor.Enabled = False
txtNome.Enabled = False
txtEndereco.Enabled = False
txtEstadoCivil.Enabled = False
txtSalarioFixo.Enabled = False
End Sub
5 Programar o evento click do boto btnAdicionaVendedor para que:
- Desabilite todos os botes, inclusive ele prprio (exceto o boto Ok).
- Solicite o cdigo do novo vendedor (via InputBox)
- Verifique se o cdigo digitado composto s de nmeros (funo IsNumeric)
- Solicite que o cdigo seja digitado novamente, para verificar se igual ao anterior.
- Utilize a funo CalculaDC para calcular o dgito de controle do cdigo do novo
vendedor.
- Inclua esse dgito no cdigo do novo vendedor, coloque-o no campo codvendedor do
banco de dados de um registro novo.
- Libere as demais caixas de texto para digitao (propriedade enabled = true) e exiba
mensagem para o usurio digitar os dados do novo vendedor e em seguida
pressionar o boto Ok.
- Ponha o foco na caixa de texto txtNome, para o usurio comear a digitao.
- Aps o boto Ok ser pressionado (evento click), os contedos das caixas de texto:
cdigo, nome, endereo etc., devero ser gravados no banco de dados e este deve
ser atualizado (DoCmd.RunCommand acCmdRefresh).
- Os botes devero ser novamente habilitados e as caixas de texto devero ser
novamente desabilitadas.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:64

- A caixa de texto SalarioFixo deve aceitar apenas nmeros e um nico ponto decimal.

Obs.: Para que uma funo ou procedimento possam ser utilizados por todos os
formulrios do banco de dados, necessitam estar dentro de um Mdulo. Portanto,
inclua um mdulo em seu projeto e copie a funo CalculaDC para dentro dele.

6- Inclua na tabela Vendedor os registros abaixo, atravs do formulrio frmVendedor que


voc acabou de criar. Note que o cdigo de vendedor da tabela abaixo j est com dgito
de controle. Voc deve fornec-lo sem o dgito. O sistema ir calcular o dgito de
controle pelo mdulo 11 e o incluir no cdigo do vendedor:

Aps verificar se tudo funciona, faa os acertos finais nas tabelas Veiculos e
Vendedor, do banco de dados Revenda:
Verifique que na tabela Veiculos no deve haver registros de veculos usados para teste,
ou seja, com nomes do tipo ABC. Se um veculo foi vendido o contedo do campo
codvendedor deve ser um cdigo vlido, constante na tabela de vendedores.
Efetue a venda de alguns veculos, verifique se as tabelas Veiculos e Vendedor esto
com os dados corretos.
SALVE O PROJETO E PREPARE-SE PARA APRESENT-LO..

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:65


Aula 4 de Access.
Abra o arquivo Revenda, teste-o e verifique se tudo funciona a contento de acordo com o
que foi especificado.
At agora, temos dois formulrios: Formulrio de Veculos e Cadastro de Vendedor.
Nesta aula criaremos um relatrio de vendas efetuadas e um relatrio de veculos com
totais e quebras. Para exibio desses dois relatrios, criaremos um formulrio.
Uso de relatrios com Access: Execute os procedimentos a seguir:
Criao do primeiro relatrio.
Nosso prximo passo ser criar um RELATRIO que listar os vendedores e seus
salrios, que sero compostos pelo salrio fixo (da tabela Vendedor), somados com a
comisso de 10% do valor de cada veculo (da tabela Veculos) vendido pelo vendedor.
Para iniciar, acione a guia Ferramentas de Banco de Dados e d um click no cone
Relaes.
Na janela de Relaes do Access crie um relacionamento entre os campos codvendedor
entre a tabelas Veiculos e Vendedor.
Para fazer isso, d um click em CodVendedor da tabela Veiculos e, segurando
pressionada a tecla do mouse, mova o cursor at CodVendedor da tabela Vendedor.
No imponha integridade referencial.
D um click no boto Tipo de Juno... e em Propriedades da Juno, escolha o item
Incluir TODOS os registros de `vendedor` e somente.... Click no boto Ok para
fechar essa janela e click no boto Criar.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:66


Agora estamos prontos para criar nosso relatrio. Volte janela de objetos, selecione a
guie Criar e d um click no cone Assistente de Relatrio. Vamos criar nosso relatrio
usando o assistente e posteriormente iremos personaliz-lo.
Crie o relatrio de nome Relat_Salrio, usando o assistente. Selecione a tabela
vendedor e inclua os campos codvendedor, nome e salrio fixo.
Selecione agora a tabela veiculos e inclua os campos modelo e valor.

D um Click no boto Avanar e na prxima tela escolha o agrupamento por


codvendedor. Click novamente em Avanar.

Na prxima tela escolha o campo valor como ordem de classificao.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:67

Em Opes de resumo escolha Soma dos campos valor.

Click novamente no boto Avanar, e na prxima janela escolha o estilo que gostar mais,
por exemplo, layout Bloco.
Na prxima janela Na ltima janela escolha um ttulo sugestivo para o relatrio, como por
exemplo Relat_Salario.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:68

D um click no boto Concluir para ver o relatrio criado:

Examine o relatrio e verifique que l esto todos os campos que voc incluiu. Perceba
que so listados todos os vendedores com seu respectivo salrio fixo e que esto
agrupados os veculos que cada vendedor vendeu.
Note tambm que o relatrio possui campos com estouro, mal dimensionados ou com
esttica prejudicada. Isso pode ser melhorado editando-se o relatrio.

Edio do relatrio:
Em seguida entraremos no modo de edio do relatrio para adequ-lo a nossas
necessidades. Para isso, d um click no relatrio com o boto direito do mouse e escolha
Modo Design

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:69


Melhore a parte visual do relatrio. Use seu bom senso.
Estando no modo de edio do relatrio, inclua uma caixa de texto, onde exibiremos o
valor do salrio do vendedor. Para isso, incluiremos a caixa de texto txtSalario na seo
Rodap codvendedor.
Para isso, selecione a caixa de texto, exiba a janela de propriedades, mude o nome da
caixa de texto para txtSalario, e o formato para Moeda.
Pegue a guia Dados e configure o contedo dessa caixa de texto (Fonte de Controle [...])
de acordo com o seguinte:
Note que quando voc comear a digitar o assistente lhe oferece opes, basta voc
aceitar.

Visualize o relatrio, que dever exibir o salrio fixo de cada vendedor, acrescido com a
comisso pela venda dos veculos, por ele vendidos. Se quiser format-lo de maneira
melhor, faa-o a seu gosto.

Obs.: Note que o relatrio est numa forma um tanto bagunada e no muito lgica para
consulta por um usurio. Deixe-o de uma forma mais fcil para consulta. Use seu bom
senso.
Obs.: No caso de um vendedor no vender nenhum veculo, note que no impresso o
campo salrio. Est errado, pois o vendedor deveria receber o salrio fixo. Isso ocorre
porque o Access no faz a converso automtica de nulo para zero em soma de valor.
Para corrigir isso, use a funo NZ, que faz a converso de nulo p/ zero. Ficar assim:
=[salario_fixo]+nz([Soma De valor];0)*0,1

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:70

Criao do segundo relatrio.


Ainda atravs do assistente, crie agora o relatrio de nome Relat_Veiculos para exibio
dos dados da tabela Veiculos. Os registros devero ser exibidos em ordem alfabtica
de modelo de veculo, com os agrupamentos (quebras com totais): A cada quebra de
modelo dever haver um subtotal de valor por modelo. Dentro de cada modelo dever
haver um sob total por ano de veculo, daquele modelo. Vide exemplo de relatrio abaixo:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:71


Obs.: Se o relatrio no estiver adequado ao ser criado pelo assistente, d-lhe um click
com o boto direito do mouse e escolha Modo Design. A voc pode configur-lo como
quiser.
Em seguida, crie um novo formulrio contendo dois botes para apresentar os relatrios.
Ao receber o click do mouse, cada boto exibe o relatrio correspondente criado no item
anterior. Utilize o Assistente de boto de comando, com o grupo de Operaes de
relatrio e a ao Visualizar relatrio. Veja o figura a seguir:

Escolha o relatrio correspondente, coloque o nome adequado no boto,


conclua a configurao e teste o boto.
Usando a Guia Todas, elimine os botes padro de navegao, coloque Pop-up=sim e
configure a propriedade Legenda.
O formulrio deve ficar mais ou menos com a seguinte aparncia:

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:72


Faa um teste geral em seu sistema, que ser finalizado na prxima aula.
Apresente-o ao professor.
**********************************************************************************************

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:73


Aula 5 de Access.
Abra o arquivo Revenda para fazer os acertos finais. Iremos implementar algumas
melhorias no projeto, tais como no permitir o cadastramento de veculos em duplicidade.
Para exemplificar isso, criaremos uma funo baseada no livro Programando em
Microsoft Access com VBA, de Flvio Morgado, em conjunto com o formulrio abaixo. A
funo que utilizaremos consulta uma tabela de um banco de dados para verificar se um
registro est ou no presente.

Inclua mais um formulrio em seu projeto e vamos utiliz-lo inicialmente para testar a
funo achaReg, explicada adiante. Esse formulrio vai ter apenas um boto, que quando
receber o click do mouse chama a funo, que procura um determinado veculo no banco
de dados.
Posteriormente, esse mesmo formulrio poder ser alterado para ser utilizado como
formulrio de inicializao do sistema.

Option Compare Database


Option Explicit
' Programao do boto de nome btnTeste:
Private Sub btnTeste_Click()
If achaReg Then
MsgBox "Registro encontrado"
Else
MsgBox "Registro no encontrado"
End If
End Sub

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:74


Funo achaReg - procura um veculo cujo modelo fornecido por uma inputbox e retorna true
ou false caso encontre ou no o veculo no banco de dados:
Option Compare Database
Option Explicit
Function achaReg() As Boolean
Dim db As Database
Dim rs As Recordset
Dim strcriterio As String
Dim procurado As String
Set db = CurrentDb()
Set rs = db.OpenRecordset("veiculos", dbOpenDynaset)
procurado = InputBox("Digite o veculo desejado...")
strcriterio = "modelo like '" + procurado + "'"
rs.FindFirst strcriterio 'procura o primeiro registro desejado.
If rs.NoMatch Then
MsgBox "Registro Nao Encontrado - " + procurado, vbInformation, "Fim Do Arquivo"
achaReg = False
Else
MsgBox "Modelo = " + rs!modelo + " encontrado...", vbInformation, "S U C E S S O !"
achaReg = True
End If
rs.Close
End Function

EXERCCIOS:
1-Faa a adequao da funo acima e use-a para que no seja possvel a incluso na
tabela Veiculos, de registros de veculos de mesma placa. Como voc j digitou a
placa do veculo a cadastrar e esta j foi verificada pelo programa, coloque-a na caixa
de texto txtPlaca e a desabilite para que a placa no possa mais ser alterada.
2-Inclua mais um formulrio de nome frmPrincipal, que ser o formulrio pelo qual a
aplicao ir iniciar, quando abrirmos o arquivo Revenda.
Esse formulrio dever ter 4 botes, sendo:
- o primeiro boto exibe em Janela Restrita (na forma Modal), o formulrio frmVeiculos
(nome=btnExibeFrmVeiculos).
- o segundo boto exibe em Janela Restrita, o formulrio frmVendedor
(nome=btnExibeFrmVendedor) - o terceiro boto exibe em Janela Restrita o formulrio
frmExibeRelatorio.
- o quarto boto encerra o processamento (nome=btnFim - instruo: DoCmd.Quit).
Obs.:
I)
II)

Para exibir um formulrio na forma modal (janela restrita), voc deve configurar
suas propriedades como: guia Outra / Janela restrita / Sim
Se voc precisar de uma varivel global a todos os locais do projeto, declare-a
dentro de um mdulo, de acordo com a especificao a seguir:
Public var1 as integer Varivel global ao projeto
Dim var2 as integer Varivel local ao mdulo

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:75


3-Inclua nesse formulrio (propriedades: Formulrio / formato / Imagem) a figura
Carrinho.jpg, que dever ficar mais ou menos como a prxima figura.
4-Inclua uma "hint" (dica) em cada boto desse formulrio, informando a funo de cada
um. A propriedade "Texto das dicas sobre controles".
Aparncia do formulrio de inicio do Access:

6- Finalizando, vamos configurar as condies de inicializao de nosso sistema.


a) Para que o usurio no tenha acesso aos controles de formulrio, selecione o
formulrio e configure a propriedade Estilo da borda para Nenhum. Configure
tambm a propriedade Seletores de registro para No
b) Programar o evento Form_Load() do formulrio, para que ao ser carregado, o mesmo
fique maximizado:
Form_Load()
DoCmd.Maximize
End Sub

c) Para a imagem tomar a tela inteira, escolha: Formulrio/Formato/Modo de Tamanho da


imagem/Alongar.
d) Para que os relatrios fiquem visveis (na frente do formulrio que os chama),
configurar suas propriedades PopUp Sim e Janela restrita Sim.
e) Configure o Access para que o usurio no possa acessar seus recursos. Para isso, d
um click no boto Arquivo / Opes / Banco de Dados Atual, e configurar a janela
apresentada de acordo com a figura a seguir.
f) Atribuir um nome ao aplicativo, incluir um cone no aplicativo, desligar todas as caixas
de seleo, selecionar o formulrio a iniciar a execuo (frmPrincipal), dar um click no

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:76


boto Ok e salvar o arquivo Revenda. Veja a janela a seguir - Note que a imagem
mostra apenas uma parte das configuraes, ao descer a tela, h outras opes que
devem ser desligadas.
g) Para no aparecer a barra do Access, configurar o formulrio como pop up = sim e
janela restrita=sim.

Obs.: Descendo a tela, h vrias opes ligadas...Desligue todas! Veja a figura:

Feche todas as janelas, salve o arquivo e feche o Access. Abra o arquivo Revenda e note
que s possvel o acesso aos formulrios e aos relatrios que voc criou. O usurio no
tem acesso direto s tabelas e aos outros componentes do projeto.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:77


Se voc quiser acessar as tabelas ou outros recursos do Access, ao abrir o arquivo,
pressione a tecla Shift e a mantenha pressionada at o arquivo abrir.

Faa um teste geral em seu sistema e verifique se tudo funciona a


contento, antes de chamar o professor para avaliao.
Salve tudo e prepare-se para a apresentao final do projeto.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:78


AUTOMATIZAO DE TAREFAS
O VBA tambm utilizado em arquivos de script, ou seja, um arquivo texto com extenso
".vbs", contendo instrues que so interpretadas e executadas linha a linha, pelo
programa "wscript.exe" do Windows. A execuo ocorre ao darmos um duplo click no
arquivo com extenso ".vbs".
Exemplo:
1) Clique com o boto direito do mouse na rea de trabalho selecione Novo/Documento
de Texto.
2) No novo documento, clique com o boto direito do mouse e selecione Editar.
3) Ao abrir o Bloco de Notas, digite o cdigo abaixo (note que so instrues VBA).
dim variavel ' todas as variveis em arquivos VBS so do tipo variant
variavel=0
do while variavel<4
msgbox "Teste de uso do VBS",3,"Voc clicou :" & variavel
variavel=variavel + 1
loop
4) Salve o arquivo: Arquivo/Salvar como.../Tipo/Todos os arquivos/teste1.VBS/Salvar
5) Execute o arquivo dando-lhe um duplo click e confira o resultado com a figura abaixo:

Note durante a execuo, o cone do programa wscript.exe na barra de tarefas do


Windows.

Vamos estragar esse programa, pois somos programadores inexperientes e ainda


fazemos muitas bobagens...
Altere a instruo variavel=variavel + 1 para variave1=variavel + 1
Se voc no prestar bastante ateno, no vai achar o erro, pois o programa no acusa
nada, s que no faz o que se espera dele. Salve-o e teste novamente.
Esse tipo de problema resolvido com o uso da clusula Option Explicit, que obriga o
programador a declarar todas as variveis. Nosso programa agora ficar assim:
Option Explicit
dim variavel ' todas as variveis em arquivos VBS so do tipo variant
variavel=0
do while variavel<4
msgbox "Teste de uso do VBS",3,"Voc clicou :" & variavel
variave1=variavel + 1
loop
Salve o programa e teste-o

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:79

Exerccio1: Modifique o programa para ficar com a seguinte codificao:


option explicit ' Obriga o programador a declarar todas as variveis
dim variavel ' todas as variveis em arquivos VBS so do tipo variant
dim testeTecla
variavel=0
do while variavel<4
testeTecla=msgbox ("Teste de uso do VBS",3,"Voc clicou :" & variavel)
variavel=variavel + 1
msgbox testeTecla
loop
Note que no programa acima, a varivel testeTecla recebe o valor retornado pela funo
msgbox, quando esta recebe o click do mouse em um de seus trs botes.
Execute o script e verifique que ao ocorrer o click em um dos botes Sim, No ou
Cancelar, a funo msgbox retorna um dos valores 6,7 ou2, respectivamente

Exerccio 2:
Modifique o programa para que ele continue contando os clicks apenas se receb-los no
boto "Sim". Se o click for no boto "No", o programa deve informar que o click foi
nesse boto e encerrar. Se o click for no boto "Cancelar", o programa encerra sem
nenhum aviso.

Obs.
1-A instruo que encerra o processamento de um script, wscript.quit.
2-Tente fazer os exerccios. Se tiver dvidas, h exerccios resolvidos no final da apostila.

Na figura abaixo vemos um exemplo de um script que executa o programa btn.exe (abre o
ambiente do ms-dos). O argumento 2 o deixa minimizado, e o argumento true significa
que a execuo do script interrompida at que o programa que est sendo executado
seja encerrado. Digite e teste o script abaixo.

Utilize o script que voc testou acima para executar outro programa qualquer de sua
preferncia.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:80

Exerccio3:
Digitar e testar o script abaixo, que executa o Access e abre o arquivo "revenda.accdb" de
seu projeto das aulas anteriores.
Obs.:Para executar o Access e abrir um arquivo ".accdb", use as instrues abaixo. O
argumento "5" no final da instruo "varShell.run" significa que o programa ser
exibido em janela normal e o argumento "true" significa que, as instrues do
script que vierem aps a instruo que executou o Access, sero processadas
somente aps o Access ser encerrado. Se quisermos que o programa a ser
executado fique maximizado, o argumento o nmero "3".
option explicit
dim varShell
'Cria varivel
Set varShell =wscript.CreateObject("WScript.Shell") 'Cria uma instncia de
objeto
varShell.run
("""msaccess.exe""C:\Users\Hamilton\Desktop\revenda.accdb"),5,true
Obs.:
1-Os nomes das pastas no podem conter espao. Por exemplo, se o
caminho for d:\meus documentos\... utilizar: d:\meusdo~1\... O nome
abreviado da pasta com o "~" deve ter 8 caracteres, incluindo o "~".
2- Para maiores informaes sobre ".run", consulte o site:
http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspx

Complemento: Mude o argumento para "3" (p/ maximizar o Access na execuo) e


inclua algumas instrues aps a chamada do Access. Verifique que com o argumento
"true" essas instrues somente sero executadas quando encerrarmos o
processamento do Access. Aps esse teste, mude o argumento para "false" e verifique o
resultado.

Exerccio4:
Vamos testar mais um script visando avaliar algumas caractersticas especiais do wscript.
Crie um novo arquivo de script de nome looping, contendo o cdigo abaixo, analise e
entenda cada linha de cdigo. A seguir, execute o arquivo dando-lhe um duplo click:.
option explicit 'Obriga a declarar todas as variveis
on error resume next 'Se ocorrer algum erro, pula p/ prxima instruo
dim varShell
wscript.Echo "O B AAAA! VAMOS BAGUNAR TUUUUDOOO..." & chr(13) &
"pressione OK para zoar..."
Set varShell =wscript.CreateObject("WScript.Shell")
do
wscript.sleep 200 'dorme por 200 milissegundos
varShell.sendkeys "{NUMLOCK}"
wscript.sleep 100
varShell.sendkeys "{CAPSLOCK}"

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:81


wscript.sleep 100
varShell.sendkeys "{sCROLLLOCK}"
wscript.sleep 200
varShell.sendkeys "{sCROLLLOCK}"
wscript.sleep 100
varShell.sendkeys "{CAPSLOCK}"
wscript.sleep 100
varShell.sendkeys "{NUMLOCK}"
loop ' looping infinito...
wscript.Echo "testando!... vamos ver se sai do looping..."
Note o que acontece com as luzes de NumLock, CapsLock e ScrolLock e tente digitar
algo aproveitvel.
Tente parar a execuo do script pelos mtodos tradicionais: Alt f4, Ctrl Break, etc.
Obs.: Caso seu programa entre em looping, necessrio ativar o gerenciador de tarefas
(Ctl+Alt+Del), acionar a guia "processos", selecionar o processo "wscript.exe" e clicar no
boto "finalizar processo".

Exerccio 5:
Criar o arquivo de script de nome backUpBd que faa uma cpia backup de um banco de
dados. Esse procedimento costuma ser usado e pode ser muito til para preservar suas
informaes em uma cpia anterior do banco de dados, antes que esse arquivo sofra
alteraes.
Se houver algum problema com o banco de dados a ser atualizado, como por exemplo
ficar corrompido, voc tem uma cpia dele antes da atualizao.
Como exemplo, o cdigo abaixo usa o arquivo "testebd.accdb"que se encontra no
diretrio raiz do drive "d" e faz uma cpia no diretrio " c:\backup " com nome
"anterior.accdb":
option explicit
dim objFSO, Wshs
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set Wshs = WScript.CreateObject("WScript.Shell")
objFSO.CopyFile "d:\testebd.accdb" , "c:\backup\anterior.accdb"
Adapte o script acima para o seu ambiente e teste-o.

Obs.:
1-Note que o script acima no cria novas pastas, apenas copia o arquivo em pastas
existentes. Para criar pastas, faremos outro exerccio.
2-Se o arquivo a gravar j existir, este ser sobrescrito.
Para complementar este exerccio:
a) Transforme o arquivo script em somente leitura

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:82


b) Crie um atalho para execut-lo, com cone significativo.

Exerccio 6:
Criar um script que ir automatizar algumas tarefas para acionar o banco de dados
"revenda.accdb" de seu projeto das aulas anteriores. Esse script dever fazer o seguinte:
a) Ao iniciar deve exibir uma caixa de mensagem com trs botes: Sim, No, Cancela.
Nessa caixa, alm de dar boas vindas ao usurio dever constar as informaes a seguir.
b) Dever informar ao usurio que caso ele v fazer atualizaes no banco de dados,
dever clicar no boto "Sim", que o backup ser feito automaticamente.
c) Se for fazer apenas consultas, clicar no boto "No", que no ser feito backup.
d) Se o usurio quer simplesmente sair, dever clicar em "Cancela".
e) Aps o click em um dos botes "Sim" ou "No", o script deve executar o Access com
o arquivo revenda.accdb, no modo maximizado.
f) Ao encerrar a execuo do Access, o script deve verificar se houve a criao do backup
e alertar o usurio para tomar as providncias necessrias p/ a preservao desse
backup.
g) Em seguida, o script deve exibir mensagem do sucesso ou no da operao.
h) Gravar o arquivo de script no modo "Somente Leitura", criar um atalho para sua
execuo e colocar nesse atalho, um cone representativo das operaes das tarefas a
realizar.

Complemento:
Analise e teste o script abaixo - Ele cria uma pasta de nome "copia" no drive "d" e uma
subpasta de nome composto pelo ano, ms, dia, hora, minuto e segundo.
Teste o script e o inclua no programa do exerccio 6, para que o arquivo backup do banco
de dados no seja sobrescrito.
Com esse complemento, cada vez que for gerado um novo backup, uma nova pasta ser
criada p/ gravar o banco de dados anterior, que ser preservado.
option explicit
dim varShell,varData, frase
Set varShell =wscript.CreateObject("WScript.Shell")
varData=year(now) & month(now) & day(now) & hour(now) & minute(now) &
second(now)
msgbox varData
frase="cmd /k CD D:\& mkdir d:\copia\" & vardata
msgbox frase
varShell.run frase,1,true ' Cria no drive "d" uma pasta de nome "copia" e sub pasta
"yyyymmddhhmmss"
msgbox "operao realizada com sucesso!",0,"EXECUO DE PROGRAMA"

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:83


A partir do script acima alterar o exerccio 6 para que o backup do banco de dados
Revenda seja sempre gravado em uma nova pasta. Dessa maneira, todos os backups
estaro identificados pela data de gravao e no mais ocorrer o problema de
sobreposio.
Obs.: Se quiser fechar a tela do DOS, basta incluir a instruo " & exit" no string
frase, ou seja, o contedo da varivel frase ficar assim:
frase="cmd /k CD D:\& mkdir d:\copia\" & vardata & " & exit"

Apresentar o script ao professor para avaliao.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:84


PROJETO FINAL DA DISCIPLINA

O projeto constitui-se na confeco de um sistema em Access para


controlar as notas e faltas dos alunos da disciplina "Programao em
Microinformtica".
O sistema deve ser encabeado por um formulrio principal cujo acesso se d atravs de
uma senha, que o usurio pode tentar acertar por at trs vezes.
O sistema dever ter os mdulos ALUNOS e RELATRIOS.
O mdulo ALUNOS dever ter as seguintes funcionalidades: Incluso, Alterao e
Excluso.
O mdulo RELATRIOS dever exibir dois tipos de relatrios: de notas e de faltas.
Deve haver duas possibilidades de relatrio de nota: por ordem alfabtica de aluno e por
ordem decrescente de nota.

Descrio sucinta sobre os itens solicitados acima:


INCLUSO: Solicita o nmero de matrcula do aluno, verifica o dgito de controle e verifica se o
aluno j existe no cadastro. Se no existir e se o dgito for correto, o aluno cadastrado.
ALTERAO: Solicita o nmero de matrcula, verifica o dgito e verifica se o aluno est no banco
de dados. Abre campos para modificao.
Obs.: deve haver dois tipos distintos de modificao: Dados Cadastrais e de notas. Quando
houver modificaes em notas deve gravar a data (do sistema) em que as notas foram
modificadas.
EXCLUSO: Idem anterior, mais solicitao de confirmao da excluso;

RELATRIOS:
NOTAS Exibe todas as notas e o conceito de cada aluno, de acordo com o critrio de avaliao.
Deve exibir a nota numrica e o conceito em forma de letra, de acordo com o critrio de
avaliao especificado no Plano de Ensino. O Conceito deve ser calculado atravs de
uma funo.
FALTAS Informa o total de faltas e se o aluno est reprovado por faltas.
Capriche nas funcionalidades e no visual!!!.

Obs.: Aqui voc o analista que projeta e implementa o sistema e deve, ao mesmo tempo,
colocar-se no lugar do usurio. Faa um sistema intuitivo e amigvel, e que no possibilite ao
usurio cometer erros. Por exemplo, se um componente tal como um boto ou uma caixa de texto
no tiverem funo em determinada fase de funcionamento do sistema, ento eles no deveriam
estar l. Pense na possibilidade de desabilit-los ou torn-los invisveis, at que se precise deles.
Outro exemplo seria o usurio estar alterando os dados cadastrais de um aluno e ter disposio
o boto excluir. Seria um contra-senso.
A previso de confeco deste projeto de quatro semanas a e vale de 0 a 40 pontos.

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:85


Ao final desse tempo, o projeto dever ser apresentado ao professor e ser entregue em
CD ou DVD para avaliao.

Importante:

A execuo do programa inicial do projeto deve ser feita atravs de um


script que automatize tarefas importantes visando a preservao do
sistema, o auxlio ao usurio ou outras que voc julgue importantes ou
interessantes.
*** Na apostila "Scripts Interessantes" voc pode encontrar exemplos de scripts elaborados e
utilizados por alunos de turmas anteriores.

SUGESTES INICIAIS QUE PODERO AJUDAR NA CONFECO DO TRABALHO:


1) Importar atravs do Access o arquivo fornecido pelo professor
Sua_Turma_PrgMicro.xls e trabalhar esse arquivo.
Obs.: A importao pode ser feita abrindo o Access e criando um novo banco
de dados (Banco de Dados em Branco). Em seguida, selecione a guia
"Dados Externos" e d um click no cone Excel. Localize a planilha que
quer importar e d um click em OK. Siga o assistente para a importao e
aps o arquivo ser importado, configure a estrutura do banco de dados a
seu gosto.
2) Segundo informaes do CEI (Centro de Informtica do CEETEPS), o clculo de
dgito de controle pelo mdulo 11 realizada de acordo com o cdigo abaixo. A
rotina do CEI faz o processamento do nmero de matrcula em forma de texto e no
numrica, como fizemos em nossos exemplos anteriores. Isso til quando usamos
nmeros grandes, com mais de 10 dgitos.
Rotina para clculo do dgito de verificao do nmero de matrcula dos alunos da FATEC-SP:
Public Function Checa_Matricula(txtMatricula)
Dim Ix As Integer, Soma As Integer, Dgito As Integer
For Ix = 1 To 7
If Not IsNumeric(Mid(txtMatricula, Ix, 1)) Then
MsgBox "Matrcula contm caracter no numrico", VB_Question
Ix = 8
Exit Function
End If
Next Ix
Soma = 0
'************************************************************
' Soma com pesos 7,6,5,4,3,2,1 para cada algarismo da Matrcula
'************************************************************
For Ix = 1 To 7
Soma = Soma + (Val(Mid(txtMatricula, Ix, 1)) * (8 - Ix))
Next Ix
'***********************************************
' Obtem resto da diviso de Soma por 11
'***********************************************
Dgito = Soma Mod 11
If Dgito > 1 Then

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:86


Dgito = 11 - Dgito
End If
If Dgito <> Right(txtMatricula, 1) Then
MsgBox "Dgito de verificao diferente do informado.", VB_Question
End If
End Function

Obs.: Note que o processo de clculo o mesmo do mdulo 11 porm, no clculo de dgito do
nmero de matrcula do aluno da FATEC SP, o nmero de menor ordem multiplicado por 1 e no
por 2 , como no mtodo usual.
Exemplo: 0810698-2
0 8
x x
7 6

1 0 6 9 8
x x x x x
5 4 3 2 1

0 + 48 + 5 + 0 + 18 + 18 + 8 = 97
97 / 11 = 8 resto 9 Neste caso dgito ser 11 - 9 = 2

3) Para confeco do projeto, o cdigo abaixo poder ser til na codificao do tratador
do evento click do boto Localizar Registro. Ao localizar o registro procurado, uma
cpia de seus campos ser exibida no formulrio.

Private Sub btnLocalizar_Click()


Dim codMatr As Variant
Dim codigolido As Long
codMatr = InputBox(" Digite a Matricula!", "
If codMatr <> Null Or codMatr <> "" Then

I n f o r m a r M a t r i c u l a ")

codigolido = Val(codMatr)
If Checa_Matricula(codigolido) Then
If achaMatricula(codMatr) Then
'Encontrar o registro que coincide com o controle
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[Matrcula]='" & codMatr & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
Else
' Nao encontrou a matricula no BD
MsgBox "Matrcula no encontrada..."
End If
End If
End If
End Sub

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:87


Function achaMatricula(codMatr) As Boolean
Dim db As Database
Dim rs As Recordset
Dim strcriterio As String
Dim procurado As String
Set db = CurrentDb()
Set rs = db.OpenRecordset("Alunos", dbOpenDynaset)
strcriterio = "Matrcula like '" + codMatr + "'"
rs.FindFirst strcriterio
Do While Not rs.NoMatch
rs.FindNext strcriterio
achaMatricula = True
rs.Close
Exit Function
Loop
If rs.NoMatch Then
achaMatricula = False
End If
rs.Close
End Function
4) Voc deve ter percebido que quando se faz referncia a uma caixa de texto via
programao para acessar seu contedo, por exemplo: x=txtNota1.text, o Access
exige que a caixa de texto txtNota1 tenha o foco.
Isso pode ficar invivel em uma instruo como esta: media=( Val(txtNota1.text) +
Val(txtNota2.text))/2
Uma soluo simples para esse problema utilizar a propriedade Value que no
exige o foco para que se acesse seu valor. Assim, a soluo para a expresso acima
seria: media=( Val(txtNota1.Value) + Val(txtNota2.Value))/2

Porm!!!
Surge outro problema: Caso uma caixa de texto (e seu campo correspondente no
banco de dados) contenha o carcter nulo, o uso da propriedade Value resulta em
erro, pois a converso de nulo para zero no feita. Nesse caso podemos usar a
funo Isnull, j vista antes.
Exemplo:
Private Sub btnCalcula_Click()
Dim media As Single
If IsNull(txt01.Value) Then txt01.Value = "0"
If IsNull(txt02.Value) Then txt02.Value = "0"

' Se for nulo, troca por zero.

media = (Val(txt01.Value) + Val(txt02.Value)) / 2


MsgBox media
End Sub

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:88


5) COMPLEMENTO Alguns programas do projeto Access das aulas e dos exerccios
de script:
Programa associado ao evento click do boto btnVender, do frmVeiculos (c/ funo)
Private Sub btnVender_Click()
Dim codigostr As String
Dim codigolido As Long
Dim codigo As Long
Dim digitolido As Integer
On Error GoTo ExibeErro:
codigostr = InputBox(" Digite o cdigo do vendedor: ", "

V e n d a d e V e c u l o")

' verifica se foram digitados s numeros.


If Len(codigostr) > 10 Then
MsgBox "Cdigo com mais de 10 dgitos - redigite!"
Exit Sub
End If
If Not IsNumeric(codigostr) Then
MsgBox "Nmero invlido! Digite apenas nmeros...", vbCritical, "ATENO"
Exit Sub
End If

codigolido = Val(codigostr) 'converte o codigo p/ numero


digitolido = codigolido Mod 10 'separa o digito lido
codigolido = Int(codigolido / 10) 'tira o digito do codigo - trunca
If digitolido = CalculaDC(codigolido) Then 'Chamada da funo VerificaDC
'o digito bateu...
codvendedor = Val(codigostr) ' codvendedor campo do BD
'A instruo abaixo salva o registro corrente - grava o codigo do vendedor.
DoCmd.RunCommand acCmdRefresh 'Grava registro corrente
MsgBox "Venda efetuada com sucesso!"
btnVender.Caption = "Vendido"
btnProximo.SetFocus
btnVender.Enabled = False
Else
' No else, o digito no bateu...
MsgBox "Dgito no bate - redigite!", vbCritical, "A T E N O"
Exit Sub
End If
Exit Sub
ExibeErro:
MsgBox Error(Err)
End Sub

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:89


Programas Principais do formulrio frmVendedor:
Private Sub btnOk_Click()
DoCmd.RunCommand acCmdRefresh 'atualiza o banco de dados
txtcodvendedor.Enabled = False
txtNome.Enabled = False
'desabilita as caixas de texto
txtEndereco.Enabled = False
txtEstadoCivil.Enabled = False
txtSalarioFixo.Enabled = False
btnInsereVendedor.Enabled = True 'habilita os botes
btnProximo.Enabled = True
btnAnterior.Enabled = True
End Sub

Private Sub Form_Load()


txtcodvendedor.Enabled = False
txtNome.Enabled = False
txtEndereco.Enabled = False
txtEstadoCivil.Enabled = False
txtSalarioFixo.Enabled = False
End Sub

Private Sub btnInsereVendedor_Click()


'On Error GoTo Err_btnInsereVendedor_Click
Dim novocodstr1 As String
Dim novocodstr2 As String
Dim novocodigo As Long
Dim digitocalc As Integer
novocodstr1 = InputBox("Digite o cdigo do vendedor:")
If Len(novocodstr1) > 9 Then 'Verifica se o codigo tem at 9 dgitos
MsgBox "O cdigo deve ter no mximo 9 nmeros", vbCritical, "A T E N O"
Exit Sub
End If
If Not IsNumeric(novocodstr1) Then 'Verifica se s tem nmeros
MsgBox "Nmero invlido! Digite apenas nmeros...", vbCritical, "ATENO"
Exit Sub
End If
novocodstr2 = InputBox("R E D I G I T E o cdigo do vendedor para verificao...")
If novocodstr1 <> novocodstr2 Then
MsgBox "Codigo invlido... tente novamente!", vbCritical, "A T E N O"
Exit Sub
End If
novocodigo = Val(novocodstr1)

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:90


digitocalc = CalculaDC(novocodigo) 'calculo do dgito de controle p/ o novo cdigo
novocodigo = novocodigo * 10 + digitocalc 'incorpora o dc ao cdigo
DoCmd.GoToRecord , , acNewRec 'insere um registro novo
codvendedor = novocodigo
MsgBox "Digite os campos para cadastramento do vendedor e pressione o boto Ok!"
txtNome.Enabled = True
txtEndereco.Enabled = True
txtEstadoCivil.Enabled = True
txtSalarioFixo.Enabled = True
txtNome.SetFocus
btnInsereVendedor.Enabled = False
btnProximo.Enabled = False
btnAnterior.Enabled = False
Exit Sub
Exit_btnInsereVendedor_Click:
Exit Sub
Err_btnInsereVendedor_Click:
MsgBox Err.Description
Resume Exit_btnInsereVendedor_Click
End Sub

Funo CalculaDC
Function CalculaDC(novocodigo As Long) As Integer
Dim codigo As Long
Dim digito As Integer
Dim soma As Integer
Dim mult As Integer
codigo = novocodigo
mult = 2
soma = 0

While codigo > 0


soma = soma + (codigo Mod 10) * mult
mult = mult + 1
codigo = Int(codigo / 10)
Wend
digito = soma Mod 11
If digito > 1 Then digito = 11 - digito
CalculaDC = digito 'Retorna o valor do digito calculado
End Function

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:91

SCRIPTS
Programas solicitados nos exerccios:
Exerccio 2:
option explicit
dim variavel ' todas as variveis em arquivos VBS so do tipo variant
dim testetecla
variavel=0
do while variavel<4
testetecla=msgbox ("Teste de uso do VBS - Continua o teste???",3,"Voc clicou
:" & variavel)
variavel=variavel + 1
if testetecla = 7 then
msgbox "voc clicou No..."
wscript.quit
end if
if testetecla =2 then wscript.quit
loop
Exerccio 6:
option explicit
dim testetecla ,objFSO, Wshs, usrProfile, varShell
testetecla=msgbox ("Sr. usurio: bem vindo ao acesso a banco de dados. Clique em Sim
para gravar um arquivo de backup.",3,"BOAS VINDAS AO SISTEMA REVENDA")
if testetecla=2 then wscript.quit
if testetecla = 6 then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set Wshs = WScript.CreateObject("WScript.Shell")
usrProfile = Wshs.ExpandEnvironmentStrings("%UserProfile%")
objFSO.CopyFile "d:\testebd.accdb" , "c:\backup\anterior.accdb"
msgbox "Arquivo de backup gravado..."
end if
Set varShell =wscript.CreateObject("WScript.Shell") 'Cria uma instncia de objeto
varShell.run ("""msaccess.exe""C:\Users\Hamilton\Desktop\revenda.accdb"),3,true
if testetecla=6 then wscript.Echo "Sr. Usurio... foi gravado o arquivo backup ... favor
providenciar!"
msgbox "operao realizada com sucesso!",0,"Sistema banco de Dados"

Exerccio 6 com complemento


option explicit
dim testetecla ,objFSO, Wshs, usrProfile, varShell, vardata, frase, novaSubPasta
testetecla=msgbox ("Sr. usurio: bem vindo ao acesso a banco de dados. Clique em
Sim para gravar um arquivo de backup.",3,"BOAS VINDAS AO SISTEMA REVENDA")
Set varShell =wscript.CreateObject("WScript.Shell") 'Cria uma instncia de objeto

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:92

if testetecla=2 then wscript.quit


if testetecla = 6 then ' o arquivo backup ser criado...
varData=year(now) & month(now) & day(now) & hour(now) & minute(now) &
second(now)
msgbox varData
frase="cmd /k CD D:\& mkdir d:\copia\" & vardata ' monta string criao nova
pasta
msgbox frase
varShell.run frase,1,true ' Cria no drive "d" uma pasta de nome "copia" e sub
pasta "yyyymmddhhmmss"
' Far backup do arquivo
novaSubPasta="d:\copia\" & varData & "\anterior.accdb"
msgbox novaSubPasta
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set Wshs = WScript.CreateObject("WScript.Shell")
usrProfile = Wshs.ExpandEnvironmentStrings("%UserProfile%")
objFSO.CopyFile "d:\testebd.accdb" , novaSubPasta
msgbox "Arquivo de backup gravado..."
end if
'execuo do Access
varShell.run ("""msaccess.exe""C:\Users\Hamilton\Desktop\revenda.accdb"),3,true
if testetecla=6 then wscript.Echo "Sr. Usurio... foi gravado o arquivo backup ... favor
providenciar armazenamento em local seguro!!!"
msgbox "operao realizada com sucesso!",0,"Sistema banco de Dados"

Disciplina: Programao em microinformtica - VBA com Word / Excel / Access pg.:93

Bibliografia
MORGADO, Flvio. Programando em Microsoft Access com VBA, Rio de Janeiro, Cincia
Moderna, 2008.

No desenvolvimento dos scripts da aula "AUTOMATIZAO DE TAREFAS", foram


consultados os seguintes endereos web:

http://msdn.microsoft.com/library/default.asp?url=/library/enus/script56/html/wsconWSHBasics.asp
http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspx
http://www.macoratti.net/wsh_1.htm