AS EMPRESAS ESTÃO "DESESPERADAS" POR ESTE TIPO DE PROFISSIONAL... - VOCÊ É UM DELES?
MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI - O Conhecimento que Vira Dinheiro - CLIQUE AQUI
| « Anterior | Δ Página principal | ¤ Índice | Próxima » |
| Curso Grátis - Access 2007 Avançado, Macros e Programação VBA Autor: Júlio Battisti |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Lição 09 - Capítulo 01 - Utiliza��o de Macros para Automa��o de Tarefas - Parte 3 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6.6 - Associando Macros a EventosNeste item veremos alguns exemplos de macros e a associação das mesmas com eventos de formulários e relatórios. Utilizaremos algumas das ações apresentadas na tabela do ítem anterior. Através da utilização de exemplos práticos, poderemos perceber melhor a utilização das Macros. Exemplo 1: Vamos começar com um exemplo bem simples. Vamos criar uma macro chamada Maximiza, com uma única ação "Maximizar". Vamos associar esta macro a propriedade de evento "Ao Abrir", dos formulário "Clientes", no qual já foi fornecido junto com o banco de dados curso_av. Para criar uma macro com uma ação Maximizar:
Para associar a macro Maximiza com o evento "Ao abrir" do formulário Clientes:
Este foi um exemplo simples, com o objetivo da salientar a associação de uma macro com um evento de formulário. Agora veremos alguns exemplos mais elaborados.
Com a utilização de macros podemos facilitar um pouco este processo. As duas consultas não tem jeito, precisamos criá-las. Após criadas as consultas, iremos utilizar uma macro para executá-las e exportar o resultado para as planilhas respectivas: vendas.xls e pedidos.xls. Esta macro deverá ser executada no final do expediente do último dia útil do mês. Para criar as consultas:
Iremos pedir que a macro crie os arquivos de Excel, na pasta C:\Meus Documentos. Também poderíamos pedir para que fosse salvo diretamente em um drive de rede, no qual o chefe tem acesso, por exemplo, X:\relatorios\chefe. Para criar a macro "Gera planilhas para o chefe":
Ação 1:
Ação 2:
Ação 3:
Exercício: Crie uma consulta do tipo Criação de Tabela, que selecione somente os pedidos para o ano da Data do Pedido igual a 2010 e cujo valor do frete seja superior a R$10,00. Incluir os campos NúmeroDoPedido, DataPedido, CidadeDestino e Frete. Essa consulta deve criar uma tabela chamada "Pedidos para 2010". Salve esta consulta com o nome de "Gera Pedidos para 2010". Crie uma segunda consulta do tipo Atualização, a qual aumenta em 20 % o valor do campo Frete na tabela "Gera Pedidos para 2010". Criar uma macro que executa estas duas consultas em seqüência e depois exporta os dados da tabela "Pedidos para 2010" para um documento do Word na pasta C:\. O nome do arquivo será pedidos.doc. Após exportar para o documento do Word, a macro deverá excluir a tabela "Pedidos para 2010" e emitir uma Mensagem:" Macro concluída com sucesso !!!!". 6.7 - Grupos de Macros e Macros com CondiçõesGrupos de Macros e Macros com Condições, são algumas das opções avançadas que podemos utilizar na criação de nossas macros. Neste ítem iremos aprender a utilizar estas duas opções para refinar mais a maneira com que nossas macros são executadas. Veremos a aplicação destes conceitos, através de exemplos práticos passo-a-passo. Grupos de Macros: A utilização de Grupos de Macros é uma maneira de organizar o nosso trabalho. Na prática utilizamos um grande número de macros para automatizar uma série de tarefas nos formulários e relatórios. Se formos gravar cada uma como uma macro separadamente, acabaremos com um número excessivo de macros, e com uma dificuldade de identificar qual macro é responsável por qual ação. Podemos utilizar Grupos de Macros para melhorar esta situação. Por exemplo, ao automatizar um formulários, ao invés de criar cada macro separadamente, gravo todas elas em uma única macro com o mesmo nome do formulários. Com isso tenho somente uma macro para a automatização do formulário. Porém diferentes eventos no formulário estão associados a diferentes ações e não a todas as ações da macro. Ai é que entra o conceito de grupo de Macros. Dentro da macro principal, temos Grupos de uma ou mais ações, sendo que estes grupos são nomeados e cada grupo responde a um ou mais evento. Posso criar uma macro chamado Pedidos, onde estarão todos os grupos de macros que irão automatizar o formulário Pedidos. Dentro crio um grupo com uma ação única de Maximizar e chamo este grupo de Maximiza. Na hora de associar com o evento Ao abrir do formulário, não vou associar toda a macro Pedidos, mas somente o grupo Maximiza. O Microsoft Office Access 2007 utiliza a representação de grupos de macros da seguinte forma: Primeiro o nome da macro, depois um ponto e finalmente o nome do grupo. Por exemplo o grupo maximiza, dentro da macro Pedidos seria representado da seguinte forma: Pedidos.maximiza Para criar uma macro com Grupos de macros, você precisa exibir a coluna "Nome da macro", para isso basta dar um clique no botão "nomes de macro"
Vamos a um exemplo: Vamos criar uma macro chamada Clientes, a qual conterá algumas macros associadas a eventos no formulário Clientes. Nesta macro teremos três grupos de macros:
Bem, vamos passo-a-passo, na construção deste grupo de macros. Para criar o grupo de macros Clientes:
Macro Abertura, Ação CaixaDeMensagem:
Macro Abertura, Ação Maximizar :
Observe que quando temos mais de uma ação em uma macro dentro de um grupo de macros, o nome da macro somente vai na primeira ação. As ações subsequentes onde a coluna Nome da macro estiver em branco fazem parte da macro recém nomeado. Quando colocamos outro nome na coluna Nome da macro, estamos iniciando uma nova macro dentro do grupo. Sua tela deve estar conforme indicado na figura a seguir:
Para criar a macro Busca_Pedidos no Grupo de macros Clientes:
[Formulários]![Clientes]![CódigoDoCliente]
Macro Busca_Pedidos, ação AbrirFormulário:
Macro Busca_Pedidos, ação Restaurar:
OBS: Utilizamos a ação Restaurar, pois caso contrário a ação seguinte MoverDimensionar, não teria efeito. Macro Busca_Pedidos, ação MoverDimensionar:
Para criar a macro Encerra no Grupo de macros Clientes:
Macro Encerra, ação CaixaDeMensagem:
Macro Encerra, ação Sair:
6.8 - Macros com CondiçõesPodemos fazer com que as macros sejam executadas, somente se uma determinada condição for satisfeita. Por exemplo podemos criar uma macro que executa uma consulta de atualização, somente se o dia do mês for maior ou igual a 25. Para adicionar condições as macros, devemos exibir a coluna condição, para isto basta dar um clique no botão condições, conforme indicado na figura a seguir:
Ao clicar neste botão, passa a ser exibida a coluna condição, na qual podemos colocar os testes para a execução da macro. Caso uma macro tenha diversas ações e você queira que a mesma condição de execução seja aplicada a todas as ações, basta digitar a condição na primeira linha e nas linhas seguintes digite apenas três pontinhos ( ... ). Caso você não digite os três pontos nas demais ações, o Microsoft Office Access 2007 executa estas ações independentemente da condição colocada na primeira linha. Você também pode colocar diferentes condições para cada uma das ações de macro dentro de uma macro com diversas ações. Exemplo: Vamos criar uma consulta de atualização que reajusta em 20% o valor do campo Frete na tabela Pedidos. Vamos criar uma macro para executar esta consulta, a qual somente será executada se o dia do mês for maior do que 25. Para criar uma macro com condições faça o seguinte:
Vamos exercitar um pouco. Exercícios:
6.8.1 - Referenciando nome de controles em expressõesQuando trabalhamos com macros, é muito comum a necessidade de nos referirmos a controles de formulários ou relatórios . Devemos usar a seguinte sintaxe para nos referirmos a controles em expressões Formulários![NomedoFormulário]![nomedocontrole] Relatórios![NomedoRelatório]![nomedocontrole] Sempre devemos colocar os nomes dos objetos entre colchetes, embora os colchetes somente sejam obrigatórios quando o nome do campo, formulário ou relatório, possuir espaços em branco. Considere os exemplos: Formulários![Fornecedores]![Identificação do Fornecedor] se refere ao controle Identificação do Fornecedor do formulário Fornecedores aberto . Obs.: Para referenciarmos um controle ,o respectivo Formulário ou Relatório deve estar aberto, caso contrário, ao executar a Macro, será gerada uma mensagem de erro . O Microsoft Access 2007 proporciona um atalho que você pode usar quando o controle ao qual você está se referindo estiver no formulário ou relatório a partir do qual a macro foi executado. Nesse caso , você pode usar esta sintaxe : [nomedocontrole] Por exemplo ,[Identificação do Fornecedor] refere-se ao controle Identificação do Fornecedor no formulário ou relatório a partir do qual a macro foi executada . Obs.: Se você não estiver certo a partir de onde uma macro será executada ou se ela será executada de vários formulários, relatórios ou eventos diferentes , use a sintaxe completa ao se referir a um controle . Você também pode se referir ao valor de um campo de uma tabela na qual um formulário aberto esteja baseado e aos valores da maioria das propriedades de controles, relatórios e formulários . Se você se referir ao valor de um campo de uma tabela em que um formulário aberto esteja baseado, deverá haver no formulário um controle vinculado a esse campo ou o campo terá que estar referido em um controle calculado do formulário. Dica: Você pode usar o construtor de expressões para ajudá-lo a inserir referências a controles de formulários e relatórios . 6.8.2 - Usando condições em macros com referência a controles:Em alguns casos , você pode querer executar uma ação ou uma série de ações em uma macro somente se uma determinada condição for verdadeira. Por exemplo, se você está usando uma macro para validar dados em um formulário, você pode querer exibir uma mensagem em resposta a um conjunto de valores inseridos em um registro e uma outra mensagem em resposta a um conjunto diferente da valores . Em casos como esses , você pode usar condições para controlar o fluxo da macro. A seguir temos alguns exemplos de condições que podem ser colocada nessa coluna : Formulários![Pedido]![NumeroDoPedido] < 4000 A macro somente será executada se no controle NumeroDoPedido do formulário Pedido, o valor for menor do que 4000. Se o valor do controle Cidade do formulário a partir do qual a macro foi chamado for igual a Castanhal, então a macro é executada . Formulários![Clientes]![Cidade]=”Castanhal” Se o valor no controle Cidade do formulário Clientes for Castanhal e o valor do controle CódigodoCliente do formulário Clientes for menor do que 31 , então a macro é executada. Você insere condições na coluna Condição na janela Macro . Se uma condição for verdadeira, o Microsoft Access 2007 executa a ação naquela linha . Você pode fazer com que o Microsoft Access 2007 execute uma série da ações se a condição for verdadeira digitando três pontos (...) na coluna Condição das ações que seguem imediatamente a condição . Observe a Figura a seguir:
Quando você executa a macro, o Microsoft Access 2007 avalia cada expressão na coluna Condição. Se a expressão for falsa, o Microsoft Access 2007 ignora a ação e move para a próxima linha de ação que não tenha os três pontos. Se a expressão for verdadeira, o Microsoft Access executa 2007 a ação ao lado da expressão e todas as ações seguintes que tenha os três pontos (...) na coluna condição . Se o Microsoft Access 2007 atingir uma célula vazia na coluna condição, ele executará a ação daquela coluna sem se preocupar com a expressão condicional. Se o Microsoft Access 2007 atingir uma outra expressão condicional , ele avaliará a nova expressão para determinar se executa ou não a ação ao lado. EXEMPLO: Vamos ver um exemplo em que utilizamos uma macro para interceptar uma mensagem de erro do Microsoft Access e colocar uma mensagem programada por nos em substituição a mensagem padrão do Microsoft Access. A macro que iremos analisar é acionada pelo evento Ao clicar do botão Revisar produtos do formulário Fornecedores do Banco de Dados Nwind.mdb que está disponível na pasta Semana2 .Esse botão deve abrir o formulário Lista de Produtos ,que exibe os produtos disponíveis para o fornecedor do registro que está sendo exibido. 6.9 - Usando macros para otimizar o trabalho com formuláriosQuanto mais automação e personalização você puder colocar em seus formulários para fazê-los trabalhar em conjunto de uma maneira inteligente, mais fáceis de usar eles ficarão. Com macros, você pode dar a seus formulários características personalizadas que vão além das que você obtém definindo propriedades do formulário e dos seus controles. Você pode associar uma macro a um formulário ou controle e fazer com que a macro seja executada quando um determinado evento ocorrer, quando você pressionar um botão de comando no formulário, por exemplo, ou quando alguém usar o formulário para atualizar um registro. 6.9.1 - Respondendo a eventos em formulários - Mais alguns exemplos:Já havíamos visto anteriormente que os formulários, relatórios e seus controles podem ser programados para responder a determinados Eventos. Por exemplo, ao movermos de um registro para o outro em um formulário estamos gerando um evento (No Atual); bem como clicar duas vezes em um controle gera o evento Ao duplo clique. Podemos usar uma macro para responder a um evento. Para uma lista completa de eventos, consultar o Ajuda do Microsoft Access 2007.
Figura 88 – Macro em resposta ao evento. 6.9.2 - O processo de associar uma macro a um evento é bastante simples: Abra a lista de propriedades de eventos do controle ou formulário desejado . Para isto basta dar um clique duplo no controle ou em uma área em branco do formulário, ou marcar o controle e escolher Propriedades do menu Exibir, isto tudo no modo Estrutura do Formulário. Para selecionar um formulário, clique no fundo do formulário (fora de quaisquer seções do formulário, na área cinza) ou escolha Selecionar Formulário no menu Editar. Clique na propriedade de evento a qual você deseja associar a macro, depois no botão com os três pontos, escolha Construtor de Macros. Feito isso será aberta a Janela Macro a qual já conhecemos, é só escolher as ações desejadas e salvar a macro com um determinado nome. Após a macro ser salva ela pode ser usada por qualquer outro evento do formulário ou de um de seus controles. Para associar uma macro já gravada a um evento, basta abrir a lista que aparece na propriedade e clicar sobre o nome da macro previamente gravada. Feito isso, quando o evento for disparado no Formulário ou controle em questão, o Microsoft Access 2007 executará a macro. A partir de agora passaremos a ver um série de exemplos de use de macros associadas a eventos de formulários. Veremos situações comuns que ocorrem com bastante freqüência nos aplicativos do dia a dia . 6.9.3 - Usando Macros para fazer os formulários trabalharem em conjuntoSe você tem um formulário com um subformulário em seu Banco de Dados, essa é uma das maneiras de fazer o com que dois formulários trabalhem juntos com o Microsoft Access. Um subformulário é na realidade um formulário separado inserido em um formulário principal, conforme vimos na primeira semana do curso. Na maioria dos casos, você usa subformulários para mostrar registros relacionados a um registro do formulário principal. Por exemplo, um subformulário poderia conter uma lista de todas as partes integrantes de um produto montado a partir de peças individuais e o formulário principal poderia conter informações sobre o próprio produto. Quando você movesse para um novo registro no formulário principal, o subformulário passaria a mostrar os registros relacionados ao do formulário principal. Usando macros você pode mostrar registros relacionados de uma outra maneira. Você pode mostrar registros relacionados em dois formulários ao mesmo tempo, cada um em sua própria janela (Nos vimos um exemplo disso no formulário Fornecedores em que havia um botão Revisar Produtos). Isso nos dá a conveniência de podermos redimensionar, mover e fechar qualquer um dos formulários independentemente um do outro. Exibir dados relacionados não é a única maneira de usar as macros para fazer seus formulários trabalharem juntos. Você pode responder a um evento ocorrido em um formulário fazendo com que algo ocorra em outro formulário. Por exemplo, pode-se abrir um formulário, redimensioná-lo ou movê-lo, exibir ou ocultar controles e atualizar seus dados, entre outras coisas. É possível também abrir uma caixa de diálogo personalizada para coletar informações necessárias para completar uma tarefa. Por exemplo, você poderia usar uma caixa de diálogo para perguntar qual dos vários relatórios diários imprimir . 6.9.4 - Sincronizando FormuláriosSuponha que você esteja observando registros relacionados em dois formulários ao mesmo tempo. Enquanto observa um cliente em um formulário Clientes, por exemplo , você também deseja ver um formulário Pedidos que mostre os pedidos do cliente selecionado no formulário Clientes.Para fazer isso, você usa uma macro que sincroniza os dois formulários. Quando a macro abre o formulário Pedidos, este mostra pedidos relacionados ao registro atual do formulário Clientes. Antes de escrever a macro você precisa decidir qual formulário controla a sincronização. Nesse caso, o formulário Clientes é o formulário controlador, porque o cliente atual determina quais pedidos serão exibidos. Então você anexa a macro ao formulário controlador. A macro abre o formulário relacionado, o formulário Pedidos, e determina quais pedidos exibir. A ação AbrirFormulário tem dois argumentos importantes, conforme indicado na Figura a seguir, argumentos estes que você pode usar para dizer ao Microsoft Access 2007 quais registros exibir no formulário relacionado: Nome do Filtro, que usa consultas e Condição Onde, que usa expressões. Cada argumento funciona como um filtro nos registros do formulário relacionado.
Para usar uma consulta a fim de filtrar os registros , você define o argumento Nome do Filtro como o nome da consulta. A consulta que você especifica não substitui a tabela ou consulta que o formulário se baseia; ela simplesmente atua como um filtro sobre os registros. Você estabelece critérios, os quais irão determinar exatamente quais registros serão exibidos. Se você usar o argumento condição onde, o critério será definido na própria macro. Você insere uma expressão no argumento Condição Onde que diz ao Microsoft Access 2007 quais registros deseja exibir. Um bom exemplo de sincronização de formulários é o formulário Fornecedores, do Banco de Dados Northwind.mdb. Nesse formulário a macro associada ao evento Ao Clicar do botão Revisar produtos, aciona a macro indicada na Figura a seguir. Nessa macro, na ação Abrir Formulário ,nos temos a seguinte expressão na condição Onde:
A parte esquerda da expressão identifica o campo [Identificação do Fornecedor] na tabela Produtos, que é a origem do formulário Lista de Produtos. A parte da direita indica a Identificação do Fornecedor atual do formulário Fornecedores. A ação Abrir Formulário encontre o registro ou registros do Formulário Lista de Produtos com a mesma Identificação do Fornecedor. Por exemplo, suponha que você esteja vendo o registro da Stuart Glasson no formulário Fornecedores. A Identificação do Fornecedor da Stuart Glasson é 7. Quando você executa a macro o Microsoft Access 2010 avalia o argumento Condição Onde, sendo que a expressão fica da seguinte maneira: [Identificação do Fornecedor] = 7 A ação AbrirFormulário exibe os registros do formulário Lista de Produtos onde a Identificação do Fornecedor seja 7. A parte esquerda da expressão Condição Onde identifica um campo na tabela ou consulta de origem do formulário que está sendo aberto cujo valor se iguala à parte direita da expressão, no nosso exemplo , todos os registros do formulário Lista de Produtos onde o campo Identificação do Fornecedor tiver o valor 7. Esse campo não necessita obrigatoriamente ser exibido no formulário que está sendo aberto, (embora nesse exemplo esteja sendo exibido). Quando você passar para um registro de fornecedor diferente, no formulário Fornecedores, você pode clicar de novo no botão Revisar Produtos para ver os produtos do fornecedor. Se o formulário Lista de Produtos já estiver aberto , a ação AbrirFormulário da macro Revisar Produtos o tornará a janela ativa e exibirá os registros relacionados com a nova Identificação do Fornecedor. Existem mais alguns detalhes que devemos observar no nosso exemplo, para garantir a perfeita sintonia entre os dois formulários em questão. O botão de comando Revisar Produtos abre o formulário Lista de Produtos e mostra os produtos do fornecedor atualmente exibido no formulário Fornecedores. É possível também fazer com que o formulário Lista de Produtos fique automaticamente sincronizado com o registro do fornecedor atual a medida que você move de registro para registro no formulário Fornecedores. Para que possamos solucionar o problema proposto , vamos utilizar a propriedade de evento No atual do formulário fornecedores. Esse evento ocorre sempre que o foco é movido para um registro, tornando-o o registro atual do formulário ou quando os dados de origem do formulário são reconsultados . Esse evento ocorre quando um formulário é aberto pela primeira vez e sempre que o foco deixa um registro e move-se para outro. Esse é exatamente o evento que precisamos para sincronizar os dois formulários, pois o que nos desejamos, é que sempre que o registro de fornecedor mude no formulário Fornecedores, os dados exibidos pelo formulário Lista de Produtos mude para exibir os produtos relacionados com o novo fornecedor. Sabendo qual evento devemos utilizar , só nos resta construir uma macro , a qual associaremos com esse evento , sendo que está macro será a responsável por atualizar a exibição do formulário Lista de Produtos. Essa macro terá somente duas ações, sendo que ambas possuem um teste de condição. A primeira ação testa se o campo Identificação do Fornecedor é nulo - (É nulo [Identificação do Fornecedor])), e em caso afirmativo executa uma ação PararMacro e a execução da macro é suspensa. A segunda ação testa se o formulário Lista de Produtos já esta carregado (EstáCarregado (“Lista de Produtos”)), e se o formulário Lista de Produtos estiver carregado, traz ele para frente e mostra o produto atual. Para garantir que o formulário Lista de Produtos exiba os produtos relacionados com o Fornecedor exibido no formulário Fornecedores, utilizamos a condição Onde com a expressão: [Identificação do fornecedor] = [Formulários]![Fornecedores]![Identificação do Fornecedor] A definição da macro "Mostrar Produtos Relacionados" , pode ser vista na Figura a seguir. Nos podemos notar que para o teste da primeira ação, usamos a função interna do Microsoft Access 2007 Énulo( ). Toda função no Microsoft Access 2007 possui um ou mais parâmetros, colocados entre parênteses (conforme descrito na primeira semana do treinamento). No caso da função Énulo(), ela exige um único parâmetro, que é exatamente o campo a ser testado. Para a segunda ação de macro, temos a função EstáCarregado(), que recebe como único parâmetro o nome do formulário ou relatório a ser testados se está ou não carregado. Observe que o nome do formulário vem entre aspas. Nota: A Macro "Mostrar Produtos Relacionados" está disponível no banco de dados Northwind.mdb. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| « Anterior | Δ Página principal | ¤ Índice | Próxima » |
Universidade do Access - Curso Completo de Access
com tudo para você dominar o Access - do Básico ao
Avançado - até a Criação de Sistemas Profissionais
Completos - Passo a Passo - Tela a Tela
Aplica-se ao Access 2019, 2016, 2013 e 2010!
Para todos os detalhes, acesse:
|
MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI (Online, Vitalício, Prático e Atualizado)! |
|
|
NÃO PROCURE VAGAS, SEJA PROCURADO! |
|
Para Todos os Detalhes, Acesse:
https://juliobattisti.com.br/curso-infra-ti.asp
|
Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434
Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208
Todos os direitos reservados, Júlio Battisti 2001-2026 ®
LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO
DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI