Formatação Condicional em Formulários Access

Uma dica rápida pedida por um dos nossos visitantes é como formatar condicionalmente um determinado campo em um formulário access.

Tinha resolvido não postar mais tanta coisa sobre formatação, mas como foi pedido, aí vai!

Esse exemplo que citarei serve para muitas utilidades. Por exemplo, suponha que você queira que um campo do formulário que mostra números de registro exiba uma cor de fundo diferente para números que forem par e para números que forem ímpar.

Primeiro, com o formulário no modo de edição, clique no campo (botão) que você quer aplicar a formatação condicional (saliento que quase nenhum botão do Access aceita o tipo de formatação condicional que este post ensina, apenas os campos do tipo Caixa de Texto aceitam esse tipo de formatação condicional nativa do Access, mas caso você deseje algo diferente ou usar formatação em outro tipo de botão, comente aí o que deseja que tentarei ajudar.).

Com o botão selecionado, clique na guia "Design". Procure pelo botão denominado "Condicional", que fica no grupo de "Fonte", como mostra a imagem:



Clique nesse botão chamado "Condicional". Vai aparecer uma janela muito semelhante a janela de formatação condional do Excel. Quem usa o Excel, a partir desse passo, não terá dificuldades em explorar todos os recursos de formatação condicional que podem ser usados através dessa janela.

Para aqueles menos experientes, o exemplo continua.

Caso você deseje que a formatação ocorra quando o valor do campo for igual a alguma coisa, por exemplo, se o valor do campo for "Feminino", basta deixar a opção "O valor do campo" como ativa e usar as regras e formatações que desejar.

Para o nosso exemplo, clique na primeira combobox e selecione "A expressão". A janela vai mudar um pouco, aparecendo uma caixa de texto para digitar alguma coisa. Lembrando que queremos formatar o plano de fundo do campo com cor diferente para números pares e ímpares, ok?

Digite no campo disponível para regra o seguinte: "[Nome do Campo] MOD 2=0" (sem as aspas) e formate como da forma que você deseja que o campo fique caso seu valor seja par. Depois de formatar como deseja, clique em OK e pronto! Toda vez que o valor for par naquele campo, ele vai formatar da forma como você determinou.

Explicando o que a expressão acima faz é o seguinte: ela divide o valor presente no seu campo por dois e retorna o módulo dessa divisão. Lógico que a divisão de qualquer número par por 2 tem como resto o valor 0, portanto, se o número for par, o módulo retornará 0 e sua formatação condicional será ativada. Quase igual ao Excel, não?

Esse tipo de formatação condicional aceita até 3 regras diferentes, fora a formatação já presente no seu campo. Falando nisso... E quando os números forem ímpar? Como formatá-los?

Simples. Depois de ter inserido a regra de formatação acima citada para o seu campo, clique nele e o formate do jeito que você quer que ele fique quando o seu valor for ímpar. Resolvido o problema! O campo está com uma determinada formatação que vai mudar apenas quando ela for par, pois você criou uma regra de formatação condicional para tal coisa!

Agora é com você. Use a imaginação e divirta-se!

23 comentários:

  1. Boa tarde Flavio

    Gostaria de pedir uma grande ajuda para facilitar a vida.

    Pois tenho um banco de dados feito no access e tenho uma pasta com a figura de cada um dos produtos cadastrados, gostaria de saber se tem jeito de eu fazer um relatorio usando essas imagens sem anexar elas a um campo do access, ou seja, ao mandar gerar este relatorio ele ir buscar em uma pasta externa, a figura correspondente a do dados do relatorio.

    ResponderExcluir
  2. Certo, sua solução é a seguinte:

    Primeiro, você vai ter que ter a pasta com as fotos no mesmo local onde está o seu banco, ok?

    No seu relatório, insira um do tipo imagem. Não coloque nada na fonte de controle.

    Na propriedade "Ao formatar" do "Detalhe" do seu relatório, coloque o seguinte código:

    [NomeDoCampoDeImagem].Picture = CurrentProject.Path & "Nome da pasta onde estão seus arquivos" & [CampoComNomeDosProdutos].value & ".jpg"

    No código acima, [NomeDoCampoDeImagem] é o nome do seu campo de imagem, que por padrão, no Access, ao criar um campo de imagem, seu nome será "Imagem01" ou "Imagem02" e por aí vai. [CampoComNomeDosProdutos] é o nome do campo onde estão armazenados os nomes dos seus produtos. Para que esta dica funcione, é necessário que suas imagens tenham o mesmo nome que os nomes dos produtos armazenados em seu banco.

    A última parte do código ".jpg" deve ser substituída pela extensão das suas imagens. Se forem imagens .bmp, essa parte do código deve ficar ".bmp" e assim por diante.

    Espero ter sido claro, do contrário, continue a perguntar que continuarei a tentar ajudar você.

    ResponderExcluir
  3. Olá Flavio
    Muito boa a explicaçõa me ajudou bastante,
    e aproveitando gostaria de saber se você pode me ajudar em dois pontos.
    1. Na minha tabela tem um campo chamado OBS. gostaria de alterar a formatação quando o campo tiver algo nele, visando chamar a atenção para os dados.
    .
    2. no meu bd, as tabelas tinham campos em comum, assim criei tambem as tabelas endereço, bairro, tipo etc. o objetivo é quando carregar o codigo do cliente por ex, ele já traga os compos como nome, endereço, bairro etc, ja procurei mas n consegui fazer certo, sempre da um problema, ele n esta carregando, assim tenho que entrar campo por campo.
    .
    Obrigado e abraços.

    ResponderExcluir
  4. Certo, entendi o que você quer. Partirei do presuposto que você conhece VBA, ok?

    No seu formulário, na propriedade "No Atual" dele, crie um novo "Procedimento Evento".

    Dentro desse procedimento, coloque o código:

    if [NomeDoSeuCampo].value <> "" then
    [NomeDoSeuCampo].forecolor = RGB(255,0,0)
    Else
    [NomeDoSeuCampo].forecolor = RGB(255,255,255)
    end if

    Pronto! Toda vez que seu campo OBS tiver valores ele vai formatar de uma cor e toda vez que não tiver, vai formatar com branco. Saliento que as cores podem ser quaisquer uma, basta você inserir o RGB dela. Espero que tenha sido claro, caso não tenha entendido, basta dizer que tento ajudar.

    Quanto a sua segunda pergunta, você vai precisar criar uma consulta. Nessa consulta, você coloca para ela retornar todos os dados que você deseja no seu formulário. Mas só isso não basta, concorda? Então, para que esta consulta retorne apenas os dados referentes ao código "carregado", basta no campo COD (imagino que sua tabela passua um campo de código) da consulta você colocar como critério o campo COD do seu formulário, ou seja, suponha que seu campo se chame [codEndereco] no seu formulario, entao voce colocará como critério na sua consulta, no campo COD, o seguinte: [forms]![NomeDoSeuFormulario]![codEndereco]

    Feito isso, basta você colocar essa consulta criada como fonte de dados para os seus campos, menos o COD, e a cada COD diferente no registro, os dados serão atualizados para aquele COD.

    Mais uma vez espero ter sido claro, senão, continue a perguntar que continuo a tentar ajudar. Abraços

    Att., Flávio Santos

    ResponderExcluir
  5. Olá Flávio! veja se vc pode me ajudar!
    tenho um bd do access e gostaria um campo no relatório dele ficasse em negrito se contiver um valor específico.EX.: Campo endereço, se contiver a palavra "servidão", ficar em negrito!
    Obrigado.Tiago

    ResponderExcluir
  6. Certo Tiago, a dica desse post serve para campos de relatório também. Basta você seguir os mesmos passos e o resultado será o mesmo.

    Caso você não tenha entendido o que está no post ou não esteja conseguindo aplicar à sua necessidade, continue a perguntar que eu só paro de responder quando tiver realmente ajudado-o.

    Abraços.

    ResponderExcluir
  7. Olá Flavio,

    Preciso ocultar um campo de um formulário continuo conforme condição.
    Coloquei no evento No Atual o seguinte código:
    If Me.TP_CAMPO = "D" Then
    '--
    Me.VLR_NUMERICO.visible = False
    Me!VLR_DATA.visible = True
    '--
    Else Me.TP_CAMPO = "N" Then
    '--
    Me.VLR_NUMERICO.visible = False
    Me.VLR_DATA.visible = False
    end if

    Porém desta forma altera em todas as linhas do formulário continuo, não apenas na atual.
    Você teria alguma dica para resolver este problema usando a formatação condicional, ou de outra forma?

    Atenciosamente.
    Otávio Davi Sparrenberger

    ResponderExcluir
  8. Otávio, formulários contínuos têm desses problemas. O Access faz a leitura de tudo e coloca os resultados, ou seja, ele faz toda a análise de uma vez, a analise de todos os campos. Por isso que ele altera todas as linhas.

    Experimente usar a propriedade "Ao Receber Foco". Se não funcionar trabalhe com as propriedades da parte do formulário chamada "Detalhe".

    Se você não conseguir de maneira nenhuma, coloque seu email aqui que entro em contato com você e lhe ajudo melhor, mas diante mão garanto que sua dúvida tem solução.

    Se não for estritamente necessário que o formulário seja continuo, use o tipo "Simples". Sua solução funciona com o tipo simples.

    Abraços.

    ResponderExcluir
  9. Bom dia

    Gostaria de saber com desativar um campo no formulário vinculado a outro. Ex. Em um campo eu coloco a opção sim e ele libera outros campos, se colocar não ele desativa estes campos. Isto é possivel

    ResponderExcluir
  10. Sim, é possível. Você terá que usar VBA para facilitar seu trabalho.

    Uma solução de VBA seria:

    Private Sub [seu campo com a opçao]_AfterUpdate()
    If [Seu campo com a opção].Value = "Sim" Then
    [campo que voce quer ativar].Enabled = True
    Else
    [campo que voce quer desativar].Enabled = False
    End If
    End Sub

    Caso ainda não consiga, continue a perguntar que continuo a ajudar.

    Abraços

    ResponderExcluir
  11. Olá. Suas dicas são execelentes e estou procurando acompanhá-las sempre que posso. Será que poderia preparar um tutorial sobre como criar contas a pagar e receber no Access, onde eu pudesse digitar o número de parcelas e, o access criasse as parcelas e seus respectivos pagamentos/recebimentos com espaço de 30 dias ou dias a escolher entre as parcelas?
    Exemplo:
    Numa compra de R$ 200,00 (Total)
    Número de parcelas = 4
    Então o resultado criado pelo access, ficaria parecido:

    Data Parcela valor
    01/02.. 1/4 R$ 50,00
    01/03.. 2/4 R$ 50,00
    01/04.. 3/4 R$ 50,00
    01/05.. 4/4 R$ 50,00

    Se puder ajudar, agradeço imensamente.
    Parabéns pelas dicas

    ResponderExcluir
  12. Então companheiro, na parte de colaboradores você pode encontrar meus contatos. Entre em contato comigo que posso tentar ajudá-lo com seu "Problema".

    Abraços e muito obrigado por nos visitar e estar gostando do nosso trabalho.

    ResponderExcluir
  13. Flávio Santos,

    Você ajudou o Otávio Sarrenberg 13/01/2011
    sobre formulários continuo, estou com o mesmo problema !
    Será que você pode me ajudar?
    Ficaria muito grato, pois empacou todo o meu trabalho.

    Edgar Haidar
    edyturco@hotmail.com

    ResponderExcluir
  14. Então Edgar, adicionei você ao Messenger para poder ajudar você melhor.

    ResponderExcluir
  15. Ok?

    Tô aguardando seu contato....Obrigado!


    Edgar

    ResponderExcluir
  16. Flávio,
    Olá bom dia, tenho um relatório onde no cabeçalho "x"
    me traz algumas informações, gostaria de fazer esse mesmo relat. mostrar detalhes das informações acima
    na seção detalhe, sendo que fica oculto e mostraria
    segundo o click de um botão ao lado da informação.
    Pergunto é possível? Como eu faria...!

    Edgar - edyturco@hotmail.com

    ResponderExcluir
  17. Edgar,

    Conforme dito acima, já adicionei você aos contatos do msn, mas você ainda não fez contato comigo por lá.

    Faça o seguinte, na página de colaboradores que fica no topo do site tem meus emails (ao menos alguns). Mande-me um email com sua necessidade e entramos em linha direta. Dessa forma, poderei ajudá-lo. Abraços.

    ResponderExcluir
  18. Flavio, Bom dia
    Tenho um formulário o qual um dos campos é o dastro de CPF.
    Preciso que ao sair do campo o mesmo verifique se o nº cadastrado já existe na referida tabela de registros, e caso afirmativo apareça a mensagem. O mesmo pode ser cadastrado em duplicidade sem problemas mas caso isso ocorra, cada vez que o mesmo for consultado ficará colorido no formulario e seus respectivos relatorios.

    Vc pode me ajudar por favor?

    Manga

    ResponderExcluir
  19. Oi Flávio. Estou com um pequeno problema. Na formatação condicional de um relatório gostaria que ele selecionasse os campos nulos. Já tentei "nulo" tentei colocar "", e em "branco", "vazio" mas não retorna. Você poderia me ajudar? Obrigada

    ResponderExcluir
  20. Olá Flávio
    Eu tenho o meu banco de dados bem formado mais não consigo transformar ela em um aplicativo,os formulários já se encontram em aplicativo no macro autoexec. Quero que ele abre como um programa pronto a utilizar que não haja necessidade de abrir a base de dados para começar as operações.
    Espero a sua ajuda.
    Grande abraços.
    Vango Alberto

    ResponderExcluir
  21. Olá Flávio,

    Tenho uma consulta no meu banco de dados que retorna a quantidade em vermelho quando o estoque de um produto fica zerado ou negativo, consegui formatar apenas o campo onde está a quantidade, quando visualizo. Mas estou tentando fazer com que a linha toda fique em vermelho, ou seja, todas as informações daquele item. Será possível? Lembrando que, inseri um sub formulário no menu principal onde posso ver o item que está negativo naquele momento, consigo ver a quantidade "0" ou "-1" (Exemplo).

    ResponderExcluir
  22. Olá Flávio,
    Gostaria de saber se existe uma maneira de visualizar campos de diferentes tipos em uma mesma coluna de um formulário contínuo no access,
    exemplo: campo tipo data e outro numérico.

    ResponderExcluir
  23. Boa noite Flávio,
    Teria condições de auxiliar-me com um BD Access 2007: tenho um subformulário, cujo campo é [Cod_LTI]...gostaria que na coluna deste campo os registros que forem duplicados fossem coloridos numa cor verde por exemplo. Tem como dar uma solução através da formatação condicional ou mesmo por um construtor de código. Agradeço. Abraço.

    ResponderExcluir