Escolar Documentos
Profissional Documentos
Cultura Documentos
(ILM001)
VBA com Word / Excel / Access
Office 2013
(Verso 1.1)
http://sites.google.com/site/hamiltonmv
Pgina Assunto
03
07
O ambiente VBA
08
12
15
Exerccio 2
17
Complementao
20
22
23
27
30
30
36
37
40
41
46
49
Aula 2 de Access
49
53
Uso de DoCmd
54
59
Aula 3 de Access
65
Aula 4 de Access
65
73
Aula 5 de Access
78
Automatizao de tarefas
84
87
93
Bibliografia
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:
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.
Obs: D um click com o boto direito do mouse na Barra de Acesso Rpido e veja
as opes.
O ambiente VBA.
Note que as frases em cor verde so comentrios (iniciam por apstrofe) sendo utilizados
apenas para documentao.
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:
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.
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:
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:
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.
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:
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).
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.
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.
A partir deste momento, tudo que voc fizer estar sendo gravado na macro, at que voc
d um click no boto .Parar gravao.
Quando parar a gravao, a macro ser gravada na forma de comandos VBA, com o
nome que voc escolheu.
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).
Atravs dessa janela voc ir elaborar e programar a interface com a qual o usurio ir
manipular dados na planilha.
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:
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.
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.
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.
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:
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)
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)
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.
Esse formulrio ser acionado quando o boto BtnEstoque, do formulrio FrmLivraria, for
clicado.
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:
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.
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
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.
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.
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:
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 ().
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.
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.
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.
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 (...).
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
-------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
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:
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:
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):
V e n d a d e V e c u l o")
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")
- 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.
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..
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.
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
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
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.
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
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.
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.
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
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}"
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
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"
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.
Importante:
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.
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
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"
V e n d a d e V e c u l o")
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
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"
Bibliografia
MORGADO, Flvio. Programando em Microsoft Access com VBA, Rio de Janeiro, Cincia
Moderna, 2008.
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