... Pague apenas R$67,00 uma nica vez e tenha acesso por 1 ano aos vdeos e arquivos exemplos do site ...

Clique aqui e obtenha mais detalhes.


Formulários e relatórios "zebrados"

Programar para dar uma aparência "zebrada" a  um relatório é relativamente fácil, mas manipular essa aparência em formulário é complicado.  Você utiliza uma API ou uma "Formatação Condicional".    Isso no Access 2007 foi resolvido e sem nenhuma linha de programação, bastando alterar duas linhas na lista de propriedades.  veja na figura abaixo:

Aviso Segurança

No exemplo, mantive a cor do fundo branca e selecionei cinza para a cor de fundo alternativa.  Veja como ficou:

Aviso Segurança

 

Você pode manipular essa configuração através de um novo evento, chamado "Ao pintar", incorporado na seção detalhe de formulários e de relatórios. Aviso Segurança

Com o evento "Ao Pintar", podemos ir muito além do que "zebrar" formulários ou relatórios.  Veja, neste meu exemplo, quero destacar valores maiores do que 1 mil reais, pintando a faixa de azul.  Observe o código:

 

Private Sub Detalhe_Paint()

'----------------------------------
'Alterando cor da faixa
'----------------------------------

If Me!ValorVerba > 1000 Then
   '---------------------------------------------------
   'Pinta tanto a faixa alternativa como a faixa normal
   '---------------------------------------------------
   Me.Detalhe.AlternateBackColor = RGB(132, 161, 198) ' azul
   Me.Detalhe.BackColor = RGB(132, 161, 198) 'azul
Else
   '----------------------------------------------------------
   'Se for menor do que 1000, pinta nos padrões estabelecidos,
   'ou seja, branco para faixa normal e cinza para a
   'faixa alternativa
   '----------------------------------------------------------
   Me.Detalhe.BackColor = RGB(255, 255, 255) 'Branco
   Me.Detalhe.AlternateBackColor = RGB(236, 236, 236) 'cinza claro
End If

End Sub

Como resultado do código aplicado, temos:Aviso Segurança

 

Podemos aproveitar para manipular a cor da fonte.  Neste exemplo, o valor que tiver superior a 1 mil reais ficará em vermelho.  Veja como ficou a alteração do código:
 

Private Sub Detalhe_Paint()

'-------------------------------
'Alterando cor do texto
'-------------------------------

If Me!ValorVerba > 1000 Then
   Me!ValorVerba.ForeColor = 255 'vermelho
Else
   Me!ValorVerba.ForeColor = 0 'preto
End If

'----------------------------------
'Alterando cor da faixa
'----------------------------------

If Me!ValorVerba > 1000 Then
   '---------------------------------------------------
   'Pinta tanto a faixa alternativa como a faixa normal
   '---------------------------------------------------
   Me.Detalhe.AlternateBackColor = RGB(132, 161, 198) ' azul
   Me.Detalhe.BackColor = RGB(132, 161, 198) 'azul
Else
   '---------------------------------------------------------
   'Se for menor do que 1000, pinta nos padrões estabelecidos,
   'ou seja, branco para faixa normal e cinza para a
   'faixa alternativa
   '---------------------------------------------------------
   Me.Detalhe.BackColor = RGB(255, 255, 255) 'Branco
   Me.Detalhe.AlternateBackColor = RGB(236, 236, 236) 'cinza claro
End If

End Sub

Como resultado temos:Aviso Segurança

 

Nos relatórios funciona da mesma maneira.   Agora é só usar a sua criatividade!

Bom estudo!


 

 


27 comentário(s)

Mauro Fuzetto   03/05/2009 02:54:46

Muito valiosos as capturas de tela para quem está começando como eu. Já havia visto o recurso de zebrar as linhas de formulários mas nunca usei, de modo que agora tenho uma idéia mais precisa de como implementar. Além disso, para mim foi novidade a possibilidade de determinar a cor de uma linha baseado ou de mudar a formatação do texto baseado em certo valor.

Gostei também da alternância entre captura de tela e código. Quando já se está familiarizado com certas funções e maneiras de se fazer algo via VBA talvez a captura não seja tão importante; mas daí é ensinar para quem já sabe. Para quem está começando ou num nível intermediário (meu caso) poder visualizar o efeito do que se estpa dizendo é valiosíssimo. Sem contar que economiza a escrita de um bom número de parágrafos meramente descritivos.

Obrigado por compartilhar o que você sabe.

Antonio João    09/07/2009 17:25:47

Caro Sampaio,

Antes de mais nada, obrigado por compartihar sempre seu conhecimento com todos nos mortais, voce e mesmo uma pessoa abençoada, sou seu fã a muitos anos, sonho um dia ter pelo menos uns 30% por cento do seu conhecimento e esforço, eu nao tenho a mesma capacidade de apreendizado tal qual voce pois ja estou perto dos 60 anos e nem sempre a cabeça ajuda, mas sou fussão, tento apreender de todas a maneiras e graças a pessoas como voce acabo sobrevivendo um pouco nesta vida tao concorrida, te escrevi tudo isto para voce sentir o quanto e importante a sua ajuda no sentido de nos orientar, entao deixo aqui meus agradecimentos e minha sincera admiração pelo seu trabalho prestado a todos que usam e recorrem do seu conhecimento, um abraço.

Avelino Sampaio   10/07/2009 14:19:35

Fico muito lisonjeado. O jeito de retribuir é caprichando ainda mais.

Grato

João Ricardo   29/08/2009 23:26:31

Muito obrigado Avelino. Estou pesquisando aqui depois de ter acessado sua ajuda no Fórum do Orkut.
Valeu mesmo. É mais simples do que eu pensava e mais util do que podia imaginar.

Abraços

ilton   24/02/2011 15:05:13

muito bom

Márcio Melo - RJ   03/12/2011 22:11:11

Realmente mas possibilidades de monitorar um formulário continuo, em meus controles utilizo muito desses padrões para me orientar em cores, formatação condicional nos dar até 4 possibilidades individuais por campo, essa novas mudanças veio bem.... qual seria a melhor maneira de deixar toda linha que esta em foco com a mesma cor se usar a formatação condicional por campo...

Forte abraço a todos...

Cristian Ribeiro Etchebest   10/01/2012 15:07:25

ola Avelino! Gostaria de saber se você ja teve que passar colunas para linhas e linhas para coluna,como os dados são preenchidos por colunas, não consegui achar uma forma de exibi-los por linha, pois o Access sempre preenche de cima para baixo.

Como tenho dados preenchidos por data, as informações aparecem assim:

DATA | DADOS1 |DADOS2 |DADOSN
01/01/2012 | informação 1 |informação 2 |etc...
02/01/2012 | informação 1 | informação 2 | etc...
03/01/2012 | informação 1 | informação 2 | etc...

Gostaria de apresentar esses dados em linha, por exemplo:

DATA | 01/01/2012 |02/01/2012 |03/01/2012
DADOS1 | informação 1 |informação 1 |etc...
DADOS2 | informação 2 | informação 2 | etc...
DADOSN | informação 3 | informação 3 | etc...

Tem alguma configuração no Access onde eu possa realizar essa modificação?
Obrigado.

Avelino Sampaio   10/01/2012 15:31:44

Cristian,

estude sobre "consulta de referência cruzada". O Access tem um assistente que auxilia na montagem desse tipo de consulta. Clique na Ribbon "criar" > Clique no botão "assistente de consulta"

Bons estudos!

Luis Antonio de Oliveira   16/08/2012 11:39:35

No meu não dá certo. Qd vou passando e um form para outro a cada 3 ou quatro forms ele dá erro

Erro em tempo de execução '2424':

A expressão que você inseriu possui um nome de campo, controle ou propriedade que o Microsoft office Access não pode localizar.

Edson Junho   23/08/2012 14:04:49

Avelino,

Tu é demais. Parabéns pela iniciativa.

Filipe Bacelar   19/02/2013 00:37:43

Avelino essas propriedades apenas estão disponíveis a partir do 2007. Você tem alguma solução para simular tal efeito em versões anteriores?

Wagner Marins   09/04/2013 09:54:13

Bom dia Avelino!

Gostaria de saber se tem como mudar a cor automatica de um campo hora.
exemplo: no caxo o campo vai estar 08:00 e se a hora abaixo disso ela ficasse vermelha...

agradeço desde já..

Avelino Sampaio   09/04/2013 10:11:31

Wagner,

vc pode utilizar a Formatação Condicional. Aqui mesmo na seção DICAS, veja o artigo "Formulário modo folha de dados "zebrado" e campos totais", que mostra como configurar.

Ao selciona a opção "menor que" , use no campo #08:00# ou cdbl(#8:00#).

Sucesso!

Alessandro Pereira Cunha   15/08/2013 18:17:50

boa noite!
Não estou conseguindo fazer.

tenho um subformulário com o campo chamado Situaçãosub onde tenho algumas opções e quero pintar as que estiverem compradas.


Private Sub Detalhe_Paint()


'----------------------------------
'Alterando cor da faixa
'----------------------------------

If Me!Situaçãosub = Comprado Then

Me.Detalhe.AlternateBackColor = RGB(132, 161, 198) ' azul
Me.Detalhe.BackColor = RGB(132, 161, 198) 'azul
Else
Me.Detalhe.BackColor = RGB(255, 255, 255) 'Branco
Me.Detalhe.AlternateBackColor = RGB(236, 236, 236) 'cinza claro
End If

End Sub

onde posso estar errando?

Avelino Sampaio   15/08/2013 18:20:48

Alessandro,

Seu errro pode estar nesta linha:

If Me!Situaçãosub = Comprado Then

Use com as aspas:

If Me!Situaçãosub = "Comprado" Then


Sucesso!

Alessandro Pereira Cunha   16/08/2013 16:29:05

obrigado pela ajuda mas também não deu?
preciso de algum "ajuste" no access (biblioteca, dll)?

tentei o código abaixo em um banco novo e também não deu certo

Private Sub Detalhe_Paint()


'-------------------------------
'Alterando cor do texto
'-------------------------------

If Me!Quantidade > 10 Then
Me!Quantidade.ForeColor = 255 'vermelho
Else
Me!Quantidade.ForeColor = 0 'preto
End If

'----------------------------------
'Alterando cor da faixa
'----------------------------------

If Me!Quantidade = 1 Then
'---------------------------------------------------
'Pinta tanto a faixa alternativa como a faixa normal
'---------------------------------------------------
Me.Quantidade.AlternateBackColor = RGB(132, 161, 198) ' azul
Me.Quantidade.BackColor = RGB(132, 161, 198) 'azul
Else
'---------------------------------------------------------
'Se for menor do que 1000, pinta nos padrões estabelecidos,
'ou seja, branco para faixa normal e cinza para a
'faixa alternativa
'---------------------------------------------------------
Me.Detalhe.BackColor = RGB(255, 255, 255) 'Branco
Me.Detalhe.AlternateBackColor = RGB(236, 236, 236) 'cinza claro
End If

End Sub


teria algum exemplo pronto que eu possa baixar e testar?

desde já agradeço vossa ajuda!

Rui   02/01/2014 09:23:08

Muito bom este tópico, parabéns.
Tem como pintar de cor diferente só a linha do registo selecionado?

Wagner Cattani   12/01/2014 12:04:58

Avelino quando eu abro o form ele parece colocar em azul e logo em seguida já volta pro padrão, como se o access deixasse eu formatar as linhas e logo em seguida tirasse a formatação, creio que possa ser o mesmo problema do Alessandro Pereira Cunha.

Tem alguma propriedade que influenciaria nisso?

Obrigado!

A.S.S   13/01/2014 14:04:04

O problema é nos textbox, eles tem que estar com o fundo transparente!


Adilson   02/05/2014 15:35:34

Só funciona no modo formulário contínuo.

Diego Silva   22/09/2014 14:54:30

Muito bom seu tutorial.
Estou inciando meu curso de access pelo adv informática, www.cursoadv.com.br
Acho muito bom poder contar com material complementar e achei o site muito completo.
Continuem o bom trabalho

José Cruz   17/08/2015 11:33:03

Tenho a funcionar quer num formulário quer num relatório.
Na impressão ou pré visualização da impressão todos os registos ficam com a cor que estiver no último registo.

Avelino Sampaio   18/08/2015 05:27:20

José,

fica difícil saber o que está acontecendo sem ter mais detalhes sobre suas configurações e programação.

Utilize o meu fórum http://www.redeaccess.com.br

Lá vc pode inserir um arquivo exemplo para entendermos as suas configurações.

No aguardo


Rui   21/11/2015 21:12:54

Tem como mudar de cor o registo selecionado?

Paes Leme Webmaster   05/04/2016 02:46:36

bom pessoal, só posso ajudar deixando um link para bons cursos.
http://www.escolatecnicarj.com.br
abraços!

Turian   05/04/2016 12:38:49

VOCÊ É "O CARA!"


Muito Obrigado pelo exemplo, depois de mais de duas horas de busca você resolveu meu problema.

Jamisson   19/12/2016 10:39:07

Bom dia!
bom exemplo esse Avelino, agora gostaria de saber se tem como coloca esse código em formulario (Folha de Dados)? Coloquei no meu formulario mais não conseguir.


Envie seu comentário: