Office 2! "Verso 2#$% Profs# &aria 'la(dia )a*iani +amilton &artins Viana Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:2 Pgina Assunto 03 Word Criao de macros 07 O ambiente VBA 08 Exerccio sobre macros 13 Uso de formulrios com Word 17 Segunda parte - Excel Aula 1 19 Criao de macros no Excel sem uso do gravador de macros 20 Uso de formulrios em Excel 24 Uso de tratadores de evento em VBA com Excel 26 Aula 2 de programao com Excel 26 Criao de funo SaldoEstoque 31 Aula 3 de programao com Excel 32 Exerccios VBA Excel 33 Terceira parte - Access Aula 1 35 Uso de formulrios com Access 38 Exerccios para aula 1 com Acess 41 Aula 2 de Access 42 Exerccios Access Aula 2 47 Aula 3 de Access 52 Aula 4 de Access 52 Uso de relatrios com Access 59 Aula 5 de Access 63 Projeto final da disciplina. 65 Complemento - Alguns programas do projeto Access. 68 Bibliografia Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:3 Disciplina Programao em Microinformtica (Prg Micro) Segundo a Microsoft, de 2002 a 2008 foram vendidas mais de 60 milhes de licenas do "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). 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 clicando-se no boto "Office e em seguida no boto "Opes do Word. Veja as janelas abaixo:
Em seguida d um click em "Mais Usados e ative a caixa "Mostrar guia Desenvolvedor na Faixa de Opes. Veja a janela a seguir: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:4 Click em Ok p/ fechar as janelas e note que agora est disponvel a guia "Desenvolvedor, que utilizaremos em nossos trabalhos. Uma macro contm um conjunto de instrues que sero processadas passo a passo, quando a macro for executada. Obs.: Para a criao de macros usando o Gravador de Macros, se voc estiver usando a apostila com o Word aberto, abra uma nova instncia do Word para no interferir no documento em uso. Para criar uma nova macro, d um click na guia Desenvolvedor e um click no item "Gravar Macro:
Na janela que abrir, escolha o nome da nova macro (pode ser por exemplo, "MinhaMacro) e 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 Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:5 micro. Faremos isso e ao final desta lio, ns a apagaremos. A janela para gravao da macro, ficar como o exemplo abaixo:
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, dando um click no item retangular da janela "Parar gravao
Antes de parar a gravao vamos realizar algumas aes que ficaro gravadas em nossa macro. Digite por exemplo seu nome, como por exemplo: "Ricardo, o Bo!!!, formate-o com tamanho 16, tachado e cor vermelha. Pare a gravao da macro. Obs: Como est sendo utiliado o !ravador de macros, a seleo com o mouse no " poss#vel. $ara selecionar o te%to, use a tecla &'ift ( 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: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:6 - Apague o texto impresso pela macro 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.
ncluso de uma macro na Barra de Ferramentas de Acesso Rpido. Vamos automatizar um pouco mais esse processo. Podemos atribuir nossa nova macro "Barra de Ferramentas de Acesso Rpido para podermos execut-la com mais comodidade. Para isso, d um click no boto Office e em Opes do Word. Na janela que abrir, na caixa da esquerda, click em "Personalizar No item "Escolher comandos em: selecione "Macros e em seguida escolha a macro desejada (neste caso "MinhaMacro). Click em "Adicionar. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:7 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 do Word com os itens a serem configurados:
Obs: ) um clic* com o boto direito do mouse na +arra de ,cesso -pido e ve.a as op/es. 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. O ambiente VBA. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:8 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. EE!C"C#O$ nclua manualmente na macro, as instrues abaixo: Selection.MoveRight Selection.Font.Color = wdColorBlack Selection.TypeParagraph Selection.TypeParagraph Selection.Font.Size = 12 Salve as modificaes efetuadas: Arquivo / Salvar normal Nossa macro agora ficar com a seguinte aparncia: -(* &in.a&acro"% / / &in.a&acro &acro / &acro gra0ada p/ a(la Prog# &icro# / -election#12pe1ext 1ext:345icardo o Bo6664 -election#&o0e7eft 8nit:39d'.aracter: 'o(nt:32: Extend:39dExtend -election#)ont#-i;e 3 $< -election#)ont#8nderline'olor 3 9d'olorA(tomatic Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:9 -election#)ont#8nderline 3 9d8nderline-ingle -election#)ont#'olor 3 9d'olor5ed
/=ncl(s>es man(ais: sem (so do gra0ador de macros#
-election#&o0e5ig.t -election#)ont#'olor 3 9d'olorBlac? -election#12peParagrap. -election#12peParagrap. -election#)ont#-i;e 3 $2 End -(* Execute-a, verifique como funciona, analise as instrues da macro e explique o funcionamento. Obs.: Estando no ambiente do VBA %oc& pode obter a'uda sobre (uais(uer instru)es ou ob'etos (ue dese'ar. Para isso* selecione a instruo ou ob'eto e pressione a tecla +,. Por e-emplo* selecione a pala%ra Move-i!'t e pressione +,. Obs.: Para alternar entre a 'anela do VB e a 'anela do .ord* pressione Alt / +,,. E-erc0cio: Altere manualmente a macro para (ue* ap1s e-ibir o te-to anterior* escre%a seu nome em taman2o 34* em negrito* it5lico e sublin2ado. Ap1s isso* o te-to de%e %oltar ao normal e com taman2o do fonte ,3. 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. Veja abaixo:
Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:10 Obs.: 6ote (ue as macros so para o VB* apenas P!OCE7#8E69O$* dentro da pasta :81dulos; Aps a cpia e adequao das instrues de MinhaMacro, esta dever estar mais ou menos assim:
E-erc0cio : $upon2amos (ue dese'amos acionar a calculadora do .indo<s. Crie 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. Passos: - Guia Desenvolvedor / Gravar Macro - Nome da macro = Calculadora - Armazenar nova macro em = Todos os Documentos - Descrio : Chama a calculadora do Windows - Boto / OK configurar o boto. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:11 - Parar gravao Em seguida* %amos editar manualmente a macro Calculadora: tens: - Guia Desenvolvedor / Macros / Editar Digitar na Sub Calculadora(): Shell ("C:\Windows\System32\calc.exe ") Obs.: a) A instruo $2ell(: camin2o = programa ;) e-ecuta programas e-ternos b) A instruo acima e-ecuta o programa calc.e-e (ue est5 na pasta c:><indo<s. Nossa Procedure ficar assim:
Obs.: Caso a Calculadora no este'a na pasta indicada acima* locali?e@a e corri'a o programa. - Voltar ao ambiente do Word (alt + F11). - Testar a macro. E-erc0cios: Obs. 9odos os e-erc0cios sero apresentados ao professor* para a%aliao. 1-Fazer uma macro de nome "TestenputOutput 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: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:12
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. c) Aps a exibio, o tamanho deve ser 12, preto, no itlico no negrito. 2-Fazer uma macro que quando executada, exibe uma "nputBox 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) aparea no texto, como no exemplo: "Valor calculado pela calculadora = 9999. Obs. O fato de a macro ter e-ibido a calculadora no significa (ue a e-ecuo da macro parou nesse ponto e (ue este'a aguardando alguma ao do usu5rio. As instru)es ap1s a e-ibio da calculadora foram todas e-ecutadas e o processamento da macro foi encerrado. $e ap1s (ou antes) de e-ibir a calculadora %oc& escre%eu instru)es para pegar dados da Area de 9ransfer&ncia e :Colar; no documento* essas instru)es so e-ecutadas imediatamente sem interrup)es atB o fim da macro. $e %oc& (uiser (ue o processamento d& uma pausa en(uanto %oc& fa? os c5lculos com a calculadora e :Copie; o resultado para depois :Colar; no documento* utili?e uma :inputbo-; ou uma :msgbo-; (ue interrompem o processamento atB (ue ocorra o clicC no boto OC. 4-Fazer uma macro diretamente no Mdulo (sem usar o gravador) que exiba um formulrio com layout e programao mais ou menos como a seguir. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:13
Layout do formulrio:
Programao associada ao formulrio: A instruo "End encerra o processamento do VBA. 5-Fazer diretamente no Mdulo (sem usar o gravador de macros), uma macro de nome "CalculaNota que exibe um formul5rio de acordo com o laDout 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:
Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:14 Layout do formulrio:
Exemplo de programao associada ao formulrio acima:
Complementao: A e-ibio no documento do .ord de%er5 ser: @ $e o aluno esti%er apro%ado* o te-to ser5 na cor a?ul. @ $e repro%ado* na cor %ermel2a. Ap1s a impresso* o te-to %oltar5 a ser preto. Exerccios: a) As caixas de texto txtNota1 e txtNota2 devem aceitar apenas valores numricos e a vrgula decimal. A programao a seguinte: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:15 Private Sub txtNota1_KeyPress(KeyAscii As nteger) Dim tecla As String tecla = Chr$(KeyAscii) f (tecla < "0" Or tecla > "9") And tecla <> "," Then Beep KeyAscii = 0 End f End Sub b) As caixas de texto txtNota1 e txtNota2 devem aceitar apenas nmeros e apenas uma Enica %0rgula decimal. Obs.: a funo nStr( txtNota1.Text,,) retorna 0 se no achou a ", ou retorna a posio onde encontrou a ",. Verifique o Help on line. c) Se uma tecla invlida for digitada, o programa dever exibir mensagem de alerta.O d) As caixas de texto txtNota1 e txtNota2 devem aceitar no mximo 4 caracteres. e) nclua no formulrio do VBA, 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 ) ) ) O nome do aluno dever aparecer no documento do Word, em cor preta, negrito, tamanho 14. Ap1s efetuar seus testes* %amos eliminar as nossas macros do .ord. Para isso* d& um clicC com o boto direito do mouse no 0cone da Barra de +erramentas e os remo%a. Em seguida* d& um clicC no item 8acros* selecione cada macro e d& um clicC no boto E-cluir. Alguns programas deste projeto: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:16 Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:17 $egunda Parte F E-cel F Aula , Para iniciarmos, abra o Excel, para comearmos a criao de nossa macro, que ir acrescentar um cabealho em qualquer planilha na qual for chamada. 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 " Cabealho; - No item "Armazenar macro em, escolha "Esta pasta de trabalho. Obs.:Se voc escolher "Pasta de tra*al.o 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.
Quando parar a gravao, a macro ser gravada na forma de comandos VBA, com o nome que voc escolheu. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:18 A macro que iremos criar far o seguinte: - nsere 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: . Selecione a primeira linha e insira uma nova linha: . Posicione o cursor na clula A1 e formate-a com tamanho 14; . Na clula A1 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 macroCabealho 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 Cabealho... Obs. Comentrios: Em VB iniciam com apstrofo, ficam na cor verde e servem apenas para a documentao do programa. A macro "Cabealho est gravada em nossa planilha do Excel. Vamos execut-la. Para voltar ao Excel ou vice-versa, use a combinao de teclas Alt + F11. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:19 Apague o contedo da clula A1 (Editar / Limpar / Tudo) 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 = "Prog. Micro", 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.
Criando macros sem o uso de gra%ador: 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: $ub 9esteGCabecal2oGComG7ata() !ange(HA,H).$elect Acti%eCell.+ormula!,C, I #nputBo-(H7igite o Cabecal2o : H* HA 9 E 6 J K OH) / $tr(7ate) End $ub
Obs. : A expresso Str ( Date) concatenada string que ser digitada na nputBox. Ela composta por duas funes do VBA: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:20 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 9esteGCabecal2oGComG7ata 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 "#nputbo-; da macro acima. Lso de formul5rios: 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 respondes a eventos provocados pelo usurio. Para testar isso, feche o Excel, e atravs do "Windows Explorer copie para sua pasta ou seu pen dri%e, o arquivo "Livros. Abra o arquivo "Livros de sua pasta ou pen drive, contendo a planilha "Estoque, igual abaixo:
Obs.: 6o Office 344M* o n0%el de segurana aumentou. Ao sal%ar uma planil2a (ue conten2a macros* no item de menu :$al%ar Como; escol2a uma pasta :Pasta com 8acros E-cel;. $e isso no for feito* a planil2a ser5 sal%a sem as macros e %oc& perder5 todo o seu trabal2o. Crie uma macro de nome TstForm, sem nenhuma programao (click no boto "Gravar Macro ). Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:21
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. nclua um formulrio associado sua planilha. v ao ambiente do VBA e d click nos itens nserir / 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. Obs.: 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 Range("A2:A6).Select deixa selecionadas as celulas A2 at A6. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:22 Variveis a maneira pela qual manipulamos valores em programao. Exemplo de criao de variveis em VBA : Private Sub UserForm_Click() Dim x As String x = "Bem vindos ao VBA..." FrmVendaLivros.Caption = x End Sub Selecione o formulrio e na janela "Propriedades digite, na propriedade Caption, o texto "Venda de Livros. nclua 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 - nicia com Cxc exemplo CxcLivro Label nicia com Lbl exemplos LblValorUnit, LblValortotal Caixa de Texto nicia com Txt exemplo TxtQuantidade Boto de comando inicia com Cmd exemplo CmdCalcula 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: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:23 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 o tratamento a seguir. 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.
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 CxcLivro. 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. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:24 b) Se digitarmos a quantidade de livros e pressionarmos o boto "Calcula, o programa dever exibir o valor Total da compra, no label LblValorTotal. Programao dos :9ratadores de E%entos; 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:
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. sso 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) nclua 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. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:25 6) nclua um label p/ exibir separadamente o valor do desconto.em moeda. 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 sin!le. 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: 0bl1alor2otal.Caption34ormat 5 valor2otal, 6-78,888.996:
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. &alve a planil'a, 2este o pro!rama e prepare;se para apresent;lo. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:26 Aula 3 de programao com E-cel 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 fun)es: 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 esto(ue estar5 bai-o. - se estiver entre 4 e 14 unidades, estar5 bom (normal). - com 15 unidades ou mais, estar5 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: Function SaldoEstoque(estoque As nteger) As String f estoque <= 3 Then SaldoEstoque = "Estoque Baixo" f estoque > 3 And estoque <= 15 Then SaldoEstoque = "Estoque Normal" f 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#:27
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. Vamos alter-lo para que o usurio possa cancelar a operao. 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: Private Sub CmdCalcula_Click() Dim ValTotal As Single Dim ValDesconto As Single Dim ValComDesconto As Single f Val(txtDesconto.Text) > 20 Then f MsgBox(" Ateno: Desconto maior que 20%...", vbYesNo) = vbNo Then Exit Sub End f End f ValTotal = Val(TxtQuantidade) * Val(LblValorUnit.Caption) ValDesconto = Val(txtDesconto.Text) / 100 * ValTotal ValComDesconto = ValTotal - ValDesconto LblDesconto.Caption = Format(ValDesconto, "#,###.00") LblValorTotal.Caption = Format(ValComDesconto, "#,###.00") End Sub 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) Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:28 Essa parte do programa ficar mais ou menos assim: f Val(TxtDesconto.Text) > 20 Then f MsgBox(" Ateno: Desconto maior que 20%...", vbYesNo) = vbNo Then LblDesconto.Caption = "" LblValorTotal.Caption = ""
TxtDesconto.SetFocus
TxtDesconto.SelStart = 0 TxtDesconto.SelLength = Len(TxtDesconto.Text) Exit Sub End f End f Continuando nosso projeto, inclua um novo formulrio (nserir UserForm) e configure-o como abaixo:
Os nome dos componentes sero: Name do formulrio: FrmLivraria, Name dos botes: cmdVendas, cmdEstoque, CmdFim. Os bot)es cmdVendas e cmdEsto(ue de%ero iniciar com a propriedade :Visible; false. Ou se'a* no estaro %is0%eis. +icaro dispon0%eis* ou se'a* %is0%eis* somente (uando o usu5rio acertar a sen2a. Name das caixas de texto: txtNome, txtSenha. nsira na propriedade Picture do formulrio FrmLivraria, uma das fotos da pasta ...Server2000 / Prg_Micro. Obs.: Podemos adequar o tamanho da figura ao formulrio, atravs da propriedade PictureSizemode. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:29 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: f KeyAscii = 32 Then txtSenha.SetFocus Obs.: Para digitao e %erificao da sen2a* o pro'eto de%e obedecer Ns especifica)es 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 ou se ocorrerem mais de 3 tentativas, o programa deve encerrar a execuo. f) nclua o boto "cmdFim com a propriedade Caption Fim e com a propriedade "Accelerator = "F, que ao receber o click do mouse encerra o programa. A instruo "End. g) nclua os botes "cmdVendas com caption "Vendas e o boto "cmdEstoque 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 cmdVendas, exibido na forma modal, o formulrio FrmVendaLivros. Dever ter a forma: Private Sub CmdVendas_Click() FrmVendaLivros.Show 1 End Sub Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:30 Ao ser dado o clique no boto CmdEstoque, exibido o formulrio FrmEstoque que desenvolveremos posteriormente. Ao ser dado o clique no boto CmdFim, o programa encerrado. Veja o exemplo abaixo: Private Sub CmdFim_Click() Unload FrmLivraria End Sub Crie no Mdulo1, a procedure "Livraria, que ao ser executada, exibe o formulrio FrmLivraria. Veja a figura:
&alve a planil'a, 2este o pro!rama e prepare;se para apresent;lo. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:31 Aula O de programao com E-cel nclua 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 pg 5 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:
Exerccio: nclua no formulrio FrmVendaLivros, o boto "Volta, que ao receber o click do mouse, fechado e o controle volta ao formulrio FrmLivraria. Crie o formulrio FrmEstoque, com a seguinte aparncia:
Esse formulrio ser acionado quando o boto CmdEstoque, do formulrio FrmLivraria, for clicado. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:32 E-erc0cios: 1) Os campos Cdigo e Quant. s devem aceitar nmeros. 2) O campo Preo deve aceitar apenas nmeros e uma nica vrgula decimal. 3) Nos campos Nome Autor e Editora todos os caracteres devem ficar em maisculo. 4) ncluir 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. Programao inicial associada a esse formulrio: Private Sub CmdCancela_Click() Unload FrmEstoque End Sub Private Sub CmdOk_Click() Dim endereco As String
End Sub 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. $al%e a planil2a Pi%ros* teste todo o pro'eto e prepare@se para apresent5@lo ao professor. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:33 9erceira Parte F Access FAula , Aula , 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 boto Office, pressione o boto "Opes do Access e selecione as janelas: Central de Confiabilidade/Configuraes da Central de Confiabilidade/Configuraes de Macro. Em seguida, habilite todas as macros e fec2e o Access. Confira a figura abaixo:
Copie o arquivo do Access !e%enda344O.mdb do diretrio "server2000\Prg Micro para seu pendrive 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#:34
Selecione a tabela "veculos, selecione a guia "criar e d um click no cone "Design de Formulrio
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. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:35
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:
Execute o formulrio, pressionando a tecla F5. Seu formulrio, em execuo, dever ficar parecido com a figura a seguir: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:36
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. - Nome de Label iniciar pelas letras lbl exemplo: lblModelo, lblCor etc. - Boto de comando iniciar pelas letras cmd exemplo: cmdOk, cmdCancela 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.
Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:37 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, selecione o item "veiculos.*. sso ir incluir em seu formulrio, a tabela inteira. Feche a janela "Formulrio1 construtor de consulta e salve-a. Veja a figura a seguir:
Vamos agora incluir os campos do banco de dados nos componentes do formulrio: -Selecione a caixa de texto txtModelo, clicando nela com o boto direito do mouse. -Escolha o item propriedades. -Na guia Dados, abra o cone da "Fonte de controlee selecione o campo modelo, -Faa o mesmo para o campo cor. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:38 Ponha o foco no formulrio e pressione a tecla F5 para ver o formulrio em execuo:
Obs. 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. E-erc0cios para aula , com Access: 1 - nclua os campos ano e valor no formulrio, com nomes t-tAno e t-tValor. 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. 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. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:39
Ser oferecido para programao, o tratador do evento Keypress, que dever ser programado da seguinte forma: Private Sub txtModelo_KeyPress( KeyAscii As nteger ) KeyAscii = Asc ( UCase ( Chr ( KeyAscii ) ) ) ' Deixa os caracteres em maisculo. End Sub Obs: Para alternar entre a 'anela do VBA e do banco de dados* pressione Alt / +,,. 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 nteger) f 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 f End Sub 4 O campo "valor deve aceitar apenas valores numricos e a vrgula decimal. A programao a seguinte: Private Sub txtValor_KeyPress(KeyAscii As nteger) Dim TECLA As String TECLA = Chr$(KeyAscii) f (TECLA < "0" Or TECLA > "9") And TECLA <> "," Then Beep KeyAscii = 0 End f End Sub Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:40 5 O campo valor deve aceitar apenas nmeros e apenas uma Enica %0rgula decimal. Obs.: a funo nStr( 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. Utlize a funo LEN que retorna o comprimento de um string use o help para verificar. 7 No campo "cor todos os caracteres digitados dever estar em maisculo. 8 Os campos "ano e "valor devem aceitar a tecla BackSpace. O cdigo ASC 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 nclua no formulrio, os campos Estado e Placa. Todos os caracteres devem ficar em maisculo. 11 nsira no banco de dados, atravs do formulrio, os registros abaixo: MODELO COR ESTADO PLACA ANO VALOR 1 CORSA BEGE RJ CAU3254 1998 8000,00 2 CORSA VERDE SP BBJ2429 2000 12000,00 3 CORSA BRANCO BA EBF9553 2002 15000,00 4 CORSA PRETO SP GTH8865 1998 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. $al%ar o ar(ui%o :!e%enda; e preparar para apresentar o formul5rio ao professor. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:41 Aula 3 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 Caixa de ferramentas 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. Vamos inserir em nosso formulrio, todos os bot)es dessa categoria, exceto o boto "localizar prximo.
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 Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:42 padronizao, como por exemplo, para o boto "r para primeiro registro, o nome cmdPrimeiroRegistro, cmdProximo etc.. Faa isso para todos os botes. E-erc0cio: Coloque mais dois botes da categoria Operaes de registro: Adicionar novo registro e Excluir registro. Mude seus nomes para cmdAdicionaNovo e cmdExcluir, 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. Note que o editor de VBA do Access providenciou toda a programao p/ voc. Abra a janela de cdigo e verifique:
Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:43 Note a palavra "DoCmd na figura 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 automtica gerada pelo VBA ao evento click no boto cmdProximo, onde o objeto DoCmd executa o mtodo GoToRecord, com o argumento acNext: Private Sub cmdProximo_Click() On Error GoTo Err_cmdProximo_Click DoCmd.GoToRecord , , acNext
Exit_cmdProximo_Click: Exit Sub Err_cmdProximo_Click: MsgBox Err.Description Resume Exit_cmdProximo_Click
End Sub E-erc0cios: 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 poder ser feita por uma nputBox. #ncluso de um boto comum no formul5rio (sem programao autom5tica): Para incluir um boto comum no formulrio proceda da seguinte maneira: nclua 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 cmdVender. Na guia Formato, mude a legenda para &Vender. 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. 3 x 2 = 6 Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:44 0 x 3 = 0 0 x 4 = 0 6 x 5 = 30 0 x 6 = 0 5 x 7 = 35 0 x 8 = 0 0 x 9 = 0 2 x 10= 20 + -------- 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 seu ltima casa, usamos a funo nt para que o VBA no cause arredondamento no resultado da diviso. Por exemplo, codigo = nt(codigo / 10) Acompan2e o programa a seguir: Private Sub cmdVender_Click() Dim codigolido As Long Dim digitolido As nteger Dim codigo As Long Dim digito As nteger Dim soma As nteger Dim mult As nteger mult = 2 soma = 0
codigolido = Val(nputBox(" Digite o cdigo do vendedor: ", " V e n d a d e V e c u l o")) digitolido = codigolido Mod 10 codigo = nt(codigolido / 10)
While codigo > 0 soma = soma + (codigo Mod 10) * mult mult = mult + 1 codigo = nt(codigo / 10) Wend
digito = soma Mod 11 f digito > 1 Then digito = 11 - digito
Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:45 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. E-erc0cios: 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 sNumeric. A programao ficar assim: Dim codigostr As String codigostr = nputBox(" Digite o cdigo do vendedor: ", " V e n d a d e V e c u l o") ' verifica se foram digitados s numeros. f Not sNumeric(codigostr) Then MsgBox "Nmero invlido! Digite apenas nmeros...", vbCritical, "ATENO" Exit Sub End f 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: f 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 f 4 Se a venda for concretizada e aps ser inserido com sucesso o cdigo do vendedor, o boto cmdVender dever ficar desabilitado, com caption "Vendido. Usar a instruo cmdVender.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 cmdVender dever ficar 2abilitado, e com caption = &Vender. Caso contrrio, ou seja, se o veculo j foi vendido, consequentemente o campo "codvendedor estar preenchido. Nesse caso, o boto cmdVender dever estar desabilitado, com caption "Vendido. A programao ser mais ou menos como a abaixo: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:46 f sNull(codvendedor) Then cmdVender.Caption = "&Vender" cmdVender.Enabled = True Else cmdVender.Caption = "Vendido" cmdVender.Enabled = False End f A programao acima dever ser codificada em todos os botes de navegao. 6 Com objetivo de deixar o cdigo do evento Click do boto cmdVender 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 cmdVender, ao invs daquele cdigo enorme. Caso voc tenha dvidas quanto a partes do cdigo, veja exemplos nas prximas pginas. $APVE O P!OQE9O E P!EPA!E@$E P= AP!E$E69A@PO AO P!O+E$$O!. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:47 ALPA O 7E ACCE$$: Abra o arquivo de Access Revenda da aula anterior e teste-o p/ verificar se tudo funciona de acordo com as especificaes anteriormente fornecidas. Lembre-se que a programao final do evento Click do boto cmdVender estava mais ou menos assim (sem uso da funo CalculaDC): Private Sub cmdVender_Click() Dim codigostr As String Dim codigolido As Long Dim digitolido As nteger Dim codigo As Long Dim digito As nteger Dim soma As nteger Dim mult As nteger mult = 2 soma = 0
codigostr = nputBox(" Digite o cdigo do vendedor: ", " V e n d a d e V e c u l o")
' verifica se foram digitados s numeros. f Not sNumeric(codigostr) Then MsgBox "Nmero invlido! Digite apenas nmeros...", vbCritical, "ATENO" Exit Sub End f
While codigo > 0 soma = soma + (codigo Mod 10) * mult mult = mult + 1 codigo = nt(codigo / 10) Wend
digito = soma Mod 11 f digito > 1 Then digito = 11 - digito
f 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 f
End Sub 6a aula anterior (uando %oc& e-ecutou o e-erc0cio nEmero R* desen%ol%eu e usou a funo Calcula7C* o programa de%e ter ficado mais ou menos assim: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:48 +unction Calcula7C(no%ocodigo As Pong) As #nteger Dim codigo As Long Dim digito As nteger Dim soma As nteger Dim mult As nteger
codigo = novocodigo mult = 2 soma = 0
While codigo > 0 soma = soma + (codigo Mod 10) * mult mult = mult + 1 codigo = nt(codigo / 10) Wend
digito = soma Mod 11 f digito > 1 Then digito = 11 - digito
CalculaDC = digito 'Retorna o valor do digito calculado
End +unction Pri%ate $ub cmdVenderGClicC() Dim codigostr As String Dim codigolido As Long Dim codigo As Long Dim digitolido As nteger
On Error GoTo ExibeErro: codigostr = nputBox(" Digite o cdigo do vendedor: ", " V e n d a d e V e c u l o")
' verifica se foram digitados s numeros.
f Len(codigostr) > 10 Then MsgBox "Cdigo com mais de 10 dgitos - redigite!" Exit Sub End f
f Not sNumeric(codigostr) Then MsgBox "Nmero invlido! Digite apenas nmeros...", vbCritical, "ATENO" Exit Sub End f
codigolido = Val(codigostr) 'converte o codigo p/ numero digitolido = codigolido Mod 10 'separa o digito lido codigolido = nt(codigolido / 10) 'tira o digito do codigo - trunca
f 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
Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:49 MsgBox "Venda efetuada com sucesso!" cmdVender.Caption = "Vendido" cmdProximo.SetFocus cmdVender.Enabled = False Else ' No else, o digito no bateu... MsgBox "Dgito no bate - redigite!", vbCritical, "A T E N O" Exit Sub End f Exit Sub ExibeErro: MsgBox Error(Err) End $ub Alguns problemas podero ocorrer* (ue de%ero 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 obser%ados em pro'etos 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 cmdVender 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 cmdVender dever estar desabilitado com o caption "Vendido. Faa uma reviso geral at este ponto do projeto. O formulrio deve estar minimamente com a seguinte aparncia:
Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:50 Continuao: 7ando continuidade a nosso pro'eto* faa os e-erc0cios a seguir: 1 - ncluir 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 - ncluir 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. Esse formulrio dever ficar minimamente com a se!uinte aparncia:
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 cmdAdicionaVendedor para que: - Desabilite todos os botes, inclusive ele prprio (exceto o boto Ok). - Solicite o cdigo do novo vendedor (via nputBox) - Verifique se o cdigo digitado composto s de nmeros (funo nsNumeric) - Solicite que o cdigo seja digitado novamente, para verificar se igual ao anterior. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:51 - Utilize a funo CalculaDC para calcular o dgito de controle do cdigo do novo vendedor. - nclua 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 (DoCmd.RunCommand acCmdRefresh). - Osbotes devero ser novamente habilitados e as caixas de texto devero ser novamente desabilitadas. Obs.: Para (ue uma funo ou procedimento possam ser utili?ados por todos os formul5rios do banco de dados* necessitam estar dentro de um :81dulo;. Portanto* inclua um m1dulo em seu pro'eto e copie a funo Calcula7C para dentro dele. 6- nclua 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& de%e fornec&@lo sem o d0gito. O sistema ir calcular o dgito de controle pelo mdulo 11 e o incluir no cdigo do vendedor:
Ap1s %erificar se tudo funciona* faa os acertos finais nas tabelas Veiculos e Vendedor* do banco de dados !e%enda: 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. $APVE O P!OQE9O E P!EPA!E@$E PA!A AP!E$E69A@PO.. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:52 Aula S 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: Relatrio 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. E-erc0cios: E-ecute os procedimentos a seguir: Criao do primeiro relat1rio. Nosso prximo passo ser criar um !EPA9T!#O 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 Ralaes do Access crie um relacionamento entre os campos codvendedor entre a tabelas Veiculos e Vendedor. No imponha integridade referencial.
D um click no boto "Tipo de associao... e em "Propriedades de associao, escolha o item "#ncluir 9O7O$ os registros de U%endedorU e somente.... Click nos botes Ok para fechar essas janelas. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:53 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. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:54
Na prxima tela escolha o campo "valor como ordem de classificao e em "Opes de resumo escolha Soma dos campos "valor.
Click novamente no boto Avanar, e na prxima janela escolha layout Bloco. Na prxima janela escolha o estilo que gostar mais. 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#:55
D um click no boto "Concluir para ver o relatrio criado: 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 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. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:56 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 Unidade monetria. Pegue a guia Dados e configure o contedo dessa caixa de texto (Fonte de Controle [...]) de acordo com o seguinte:
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. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:57 Criao do segundo relat1rio. 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 sobtotal por ano de veculo, daquele modelo. Vide exemplo de relatrio abaixo:
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 quizer. 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: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:58
Escolha o relatrio correspondente, coloque o nome adequado no boto, conclua a configurao e teste o boto. O formulrio deve ficar mais ou menos com a seguinte aparncia:
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#:59 Aula V de Access. Abra o arquivo Revenda para fazer os acertos finais. remos implementar algumas melhorias no projeto, tais como no permitir o cadastramento de veculos em duplicidade ou de vendedores com mesmo cdigo. 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.
Option Compare Database Option Explicit Function achaReg() As Boolean Dim db As Database Dim rs As Recordset Dim strcriterio As String Dim strmsg As String Dim strtitle As String Dim procurado As String Set db = CurrentDb() Set rs = db.OpenRecordset("veiculos", dbOpenDynaset) procurado = nputBox("Digite o veculo desejado...") strcriterio = "modelo like '" + procurado + "'" rs.FindFirst strcriterio Do While Not rs.NoMatch strmsg = "modelo = " + rs!modelo strtitle = "sucesso" MsgBox strmsg, vbnformation, strtitle rs.FindNext strcriterio achaReg = True rs.Close Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:60 Exit Function Loop f rs.NoMatch Then strmsg = "registro nao encontrado" strtitle = "fim do arquivo" MsgBox strmsg, vbnformation, strtitle achaReg = False End f rs.Close End Function Private Sub cmdTeste_Click() f achaReg Then MsgBox "Registro encontrado" Else MsgBox "Registro no encontrado" End f End Sub EXERCCOS: 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. 2-Faa a mesma coisa para a tabela "Vendedores, para que no seja permitida a incluso de vendedores com mesmo cdigo. 3-nclua 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 na forma modal, o formulrio frmVeiculos (nome=cmdExibeFrmVeiculos). - o segundo boto exibe modal, o formulrio frmVendedor (nome=cmdExibeFrmVendedor) - o terceiro boto exibe na forma modal o formulrio frmExibeRelatorio. - o quarto boto encerra o processamento (nome=cmdFim). Obs.: Para exibir um formulrio na forma modal, voc deve configurar suas propriedades como: guia Outra / Janela restrita / Sim
nclua nesse formulrio (propriedades: Formulrio / formato / magem) a figura "Carrinho.jpg, que dever ficar mais ou menos assim: Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:61
4-Para finalizar, vamos configurar as condies de inicializao de nosso sistema. Para isso, d um click no boto Access / Opes do Access / Banco de Dados Atual, e configurar a janela apresentada de acordo com a figura a seguir. Atribuir um nome ao aplicativo, incluir um cone no aplicativo, desligar todas as cai-as de seleo, selecionar o formulrio a iniciar a execuo (frmPrincipal), dar um click no boto Ok e salvar o arquivo Revenda. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:62
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 ao relatrio que voc criou. O usurio no tem acesso direto s tabelas e aos outros componentes do projeto. Se voc quiser acessar as tabelas ou outros recursos do Access, ao abrir o arquivo, pressione a tecla Shift e a mantenha pressionada enquanto o arquivo estiver abrindo. 4aa um teste !eral em seu sistema e verifi<ue se tudo funciona a contento, antes de c'amar o professor para avaliao. $al%e tudo e prepare@se para a apresentao final do pro'eto. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:63 P!OQE9O +#6AP 7A 7#$C#PP#6A O pro.eto constitui;se na confeco de um sistema em ,ccess para controlar as notas e faltas dos alunos da disciplina $r! Micro. O sistema de%e ser encabeado por um formul5rio principal cu'o acesso se d5 atra%Bs de uma sen2a* (ue o usu5rio pode tentar acertar por atB tr&s %e?es. O sistema de%er5 ter os m1dulos APL6O e !EPA9T!#O$. O m1dulo APL6O de%er5 ter as seguintes funcionalidades: #ncluso* Alterao e E-cluso. O m1dulo !EPA9T!#O de%er5 e-ibir dois tipos de relat1rios: de notas e de faltas. 7e%e 2a%er duas possibilidades de relat1rio de nota: por ordem alfabBtica de aluno e por ordem decrescente de nota. 7escrio sucinta sobre os itens solicitados acima: NCLUSO: 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: dem anterior, mais solicitao de confirmao da excluso; RELATROS: 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. O Conceito deve ser calculado atravs de uma funo. FALTAS nforma o total de faltas e se o aluno est reprovado por faltas. Capric2e nas funcionalidades e no %isualWWW. 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 pre%iso de confeco deste pro'eto B de tr&s a (uatro semanas a e %ale de 4 a S4 pontos. SUGESTO: mportar o arquivo "Turma PrgMicro Noite.xls pelo Access e trabalhar esse arquivo. Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:64 $egundo informa)es do CE# (Centro de #nform5tica do CEE9EP$)* o c5lculo de d0gito de controle B de acordo com o abai-o: Rotina para clculo do dgito de verificao do nmero de matrcula dos alunos da FATEC-SP:
Public Function Checa_Matricula(txtMatricula) Dim x As nteger, Soma As nteger, Dgito As nteger For x = 1 To 7 f Not sNumeric(Mid(txtMatricula, x, 1)) Then MsgBox "Matrcula contm caracter no numrico", VB_Question x = 8 Exit Function End f Next x Soma = 0 '************************************************************ ' Soma com pesos 7,6,5,4,3,2,1 para cada algarismo da Matrcula '************************************************************ For x = 1 To 6 Soma = Soma + (Val(Mid(txtMatricula, x, 1)) * (8 - x)) Next x '*********************************************** ' Obtem resto da diviso de Soma por 11 '*********************************************** Dgito = Soma Mod 11
f Dgito > 1 Then Dgito = 11 - Dgito End f f Dgito <> Right(txtMatricula, 1) Then MsgBox "Dgito de verificao diferente do informado.", VB_Question End f End Function
Obs.: =ote <ue o processo de clculo " o mesmo do m>dulo ?? por"m o n@mero de menor ordem " multiplicado por ? e no por A , como no m"todo usual. Exemplo: 0810698-2
0 8 1 0 6 9 8 x x x x x x x 7 6 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 Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:65 CO8PPE8E69O F Alguns programas do pro'eto Access das aulas: Programa associado ao e%ento clicC do boto cmdVender* do frmVeiculos (c= funo) Private Sub cmdVender_Click() Dim codigostr As String Dim codigolido As Long Dim codigo As Long Dim digitolido As nteger
On Error GoTo ExibeErro: codigostr = nputBox(" Digite o cdigo do vendedor: ", " V e n d a d e V e c u l o")
' verifica se foram digitados s numeros.
f Len(codigostr) > 10 Then MsgBox "Cdigo com mais de 10 dgitos - redigite!" Exit Sub End f
f Not sNumeric(codigostr) Then MsgBox "Nmero invlido! Digite apenas nmeros...", vbCritical, "ATENO" Exit Sub End f
codigolido = Val(codigostr) 'converte o codigo p/ numero digitolido = codigolido Mod 10 'separa o digito lido codigolido = nt(codigolido / 10) 'tira o digito do codigo - trunca
f 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!" cmdVender.Caption = "Vendido" cmdProximo.SetFocus cmdVender.Enabled = False Else ' No else, o digito no bateu... MsgBox "Dgito no bate - redigite!", vbCritical, "A T E N O" Exit Sub End f Exit Sub ExibeErro: MsgBox Error(Err) End Sub Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:66 Programas Principais do formul5rio :frmVendedor;: Private Sub cmdOk_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
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 cmdnsereVendedor_Click() 'On Error GoTo Err_cmdnsereVendedor_Click Dim novocodstr1 As String Dim novocodstr2 As String Dim novocodigo As Long Dim digitocalc As nteger
novocodstr1 = nputBox("Digite o cdigo do vendedor:")
f 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 f
f Not sNumeric(novocodstr1) Then 'Verifica se s tem nmeros MsgBox "Nmero invlido! Digite apenas nmeros...", vbCritical, "ATENO" Exit Sub End f novocodstr2 = nputBox("R E D G T E o cdigo do vendedor para verificao...") f novocodstr1 <> novocodstr2 Then MsgBox "Codigo invlido... tente novamente!", vbCritical, "A T E N O" Exit Sub End f novocodigo = Val(novocodstr1) Disciplina: Programao em microinformtica , VBA com Word / Excel / Access pg#:67 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
Exit Sub Exit_cmdnsereVendedor_Click: Exit Sub Err_cmdnsereVendedor_Click: MsgBox Err.Description Resume Exit_cmdnsereVendedor_Click
End Sub +uno Calcula7C Function CalculaDC(novocodigo As Long) As nteger Dim codigo As Long Dim digito As nteger Dim soma As nteger Dim mult As nteger
codigo = novocodigo mult = 2 soma = 0
While codigo > 0 soma = soma + (codigo Mod 10) * mult mult = mult + 1 codigo = nt(codigo / 10) Wend
digito = soma Mod 11 f 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#:68 Bibliografia MORGADO, Flvio. Programando em Microsoft Access com VBA, Rio de Janeiro, Cincia Moderna, 2003.