Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Colorir linha do Listview de acordo com critério

Esclarecimentos e dúvidas sob o Modelo de Aplicativo de Cadastro em VBA no Microsoft Excel publicado no site e blog http://www.tomasvasquez.com.br
Jtruculo
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Sáb Mar 12, 2016 5:24 am

Colorir linha do Listview de acordo com critério

Mensagem por Jtruculo »

Pessoal, boa tarde!

Sou um grande fã do canal e do formulário de cadastro. Já fiz utilização dele em vários trabalhos e obtive bons resultados, porem sempre sem muitas alterações no formulário, apenas fiz validações, acréscimo de campos e aplicação de eventos como enviar e-mail, impedir duplicidade, mascara em campos, salvar pdf etc. Agora surgiu uma demanda, preciso controlar vencimentos através do listview, alguém do forum tem um código de exemplo utilizando o formulário de cadastro (2) do Tomás onde através de uma data comparada com (hoje) na coluna do listview possamos determinar a cor da fonte da linha do listview que satisfaz o critério? Ex: Data<15 dias Azul; Data< 5 dias = Laranja Data>Hoje vermelho... Estou usando a versão 2. Desde já agradeço! Bom estudo a todos


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Jtruculo
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Sáb Mar 12, 2016 5:24 am

Re: Colorir linha do Listview de acordo com critério

Mensagem por Jtruculo »

Pessoal, boa tarde!

Verifiquei que tivemos muitos views da proposta que abri (+200) mas nenhuma resposta
Pelo que estudei aqui, o ListView não é muito querido pela comunidade, mas é muito funcional para controles de vencimentos por ex...

Achei um mega post aqui do Mikel: viewtopic.php?f=20&t=6313&p=25182&hilit ... iew#p25182

Neste post ele comenta sobre um modelo (perfeito com listView) do MDC do Tomas adaptado pelo Mauro Coutinho, que adaptou o MDC para ListView em vez de ListBox, não tinha percebido esta publicação

Sobre colorir as linhas do ListView conforme critério, utilizei a sub abaixo postada pelo Edivan Cabral no seu canal do Youtube, funcionou bem no carregamento inicial, porem está travando a atualização da tela quando faço a pesquisa no UserForm frmPerquisa, ainda não consegui aplicar o colorir critérios nas linhas do ListView APÓS CLICAR NO BOTÃO FILTRAR, o form frmPesquisa faz a pesquisa normalmente, retorna os dados mas colore APENAS a primeira coluna do ListView (ID). Apenas um bug nos separa da missão, se alguém tiver uma ideia eu agradeço.

Segue o modelo de cadastro com listview + um modulo para colorir as linhas conforme critérios
(0~10 = Vermelho; 11~20 = Laranja e 21~30 = Verde)
Obs: A coluna que está sendo usada para calcular e colorir a linha do listview é a nr. 3 (Vencimento), não tive tempo de preparar maiores automações

Sub utilizada:

Sub Colorir_Linhas_Com_Criterios()

Dim Colunas As Integer
Dim linhas As Integer
Dim x As Integer
Dim y As Integer


With frmPesquisa


Colunas = .lstLista.ColumnHeaders.Count
linhas = .lstLista.ListItems.Count

For y = 1 To linhas
'Menores de 10
If .lstLista.ListItems(y).ListSubItems(2) < 10 Then
.lstLista.ListItems(y).ForeColor = RGB(255, 0, 0)

For x = 1 To Colunas - 1
On Error Resume Next
.lstLista.ListItems(y).ListSubItems(x).ForeColor = RGB(255, 0, 0)
Next
GoTo Continue
End If

'Menores de 20
If .lstLista.ListItems(y).ListSubItems(2) < 20 Then
.lstLista.ListItems(y).ForeColor = RGB(246, 110, 26)

For x = 1 To Colunas - 1
On Error Resume Next
.lstLista.ListItems(y).ListSubItems(x).ForeColor = RGB(246, 110, 26)
Next
GoTo Continue
End If

'Menores de 30
If .lstLista.ListItems(y).ListSubItems(2) < 30 Then
.lstLista.ListItems(y).ForeColor = RGB(2, 202, 78)

For x = 1 To Colunas - 1
On Error Resume Next
.lstLista.ListItems(y).ListSubItems(x).ForeColor = RGB(2, 202, 78)
Next
GoTo Continue
End If

Continue:
Next

End With
End Sub
Anexos
Tomas Vasquex Listview.rar
(70.02 KiB) Baixado 432 vezes


Avatar do usuário
Rafael Monteiro
Consultor
Consultor
Mensagens: 277
Registrado em: Seg Nov 28, 2011 8:27 am
Localização: Sorocaba - SP
Contato:

Re: Colorir linha do Listview de acordo com critério

Mensagem por Rafael Monteiro »

Olá Jtruculo ,

Parece que você encontrou um post que te ajudou. Mas o importante é entender de maneira mais clara como funciona as cores nas linhas e colunas Listview, por que tenha certeza que você vai se deparar com muitos probleminhas nesse código de colorir.

A dica que dou é o seguinte: Aplicar Formatação Condicional em "Número" é diferente de "Data". O formato do texto ou número faz com que a regra do IF não seja aplicada corretamente. Por isso deve ter em mente como usar esse código em diversos tipos de formatos de texto.

Analise isso. Qualquer dúvida me chame no Privado.

Abs.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Colorir linha do Listview de acordo com critério

Mensagem por Reinaldo »

Pelo que entendi/pude observar, a "colorização" está sendo feita e a rotina e executada normalmente;
porem o controle list... não está sendo atualizado em tela (se mover a barra para ver as demais colunas irá notar a colorização).
O motivo desse "congelamento" não pude precisar, mas acrescentando a chamada Repaint na rotina filtrar, após o filtro e colorir, aparentemente deixa tudo ok

Código: Selecionar todos

Private Sub btnFiltrar_Click()
Application.ScreenUpdating = False
     Call PopulaListBox(txtNomeEmpresa.Text, txtNomeContato.Text, txtEndereco.Text, txtTelefone.Text, txtRegiao.Text)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
    Call Colorir_Linhas_Com_Criterios
Me.Repaint
End Sub
Os valores em um controle list.. são básicamente Textos/String, assim pode utilizar na comparação de valores uma função de conversão, por exemplo "CDec"

Código: Selecionar todos

Sub Colorir_Linhas_Com_Criterios()
Dim Colunas As Integer, Linhas As Integer
Dim x As Integer, y As Integer
        
With frmPesquisa
    Colunas = .lstLista.ColumnHeaders.Count
    Linhas = .lstLista.ListItems.Count
    For y = 1 To Linhas
        'Menores de 10
        If CDec(.lstLista.ListItems(y).ListSubItems(2)) < 10 Then
            .lstLista.ListItems(y).ForeColor = RGB(255, 0, 0)
            For x = 1 To Colunas - 1
                On Error Resume Next
                .lstLista.ListItems(y).ListSubItems(x).ForeColor = RGB(255, 0, 0)
            Next
        GoTo Continue
        End If
         'Menores de 20
        If CDec(.lstLista.ListItems(y).ListSubItems(2)) < 20 Then
            .lstLista.ListItems(y).ForeColor = RGB(246, 110, 86)
            For x = 1 To Colunas - 1
                On Error Resume Next
                .lstLista.ListItems(y).ListSubItems(x).ForeColor = RGB(246, 110, 86)
            Next
            GoTo Continue
        End If
        'Menores de 30
        If CDec(.lstLista.ListItems(y).ListSubItems(2)) < 30 Then
            .lstLista.ListItems(y).ForeColor = RGB(2, 202, 78)
            For x = 1 To Colunas - 1
                On Error Resume Next
                    .lstLista.ListItems(y).ListSubItems(x).ForeColor = RGB(2, 202, 78)
                Next
                GoTo Continue
        End If
Continue:
    Next
End With
End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Jtruculo
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Sáb Mar 12, 2016 5:24 am

Re: Colorir linha do Listview de acordo com critério [RESOLVIDO]

Mensagem por Jtruculo »

Reinaldo e Rafael,
Bom dia!

Temos um template!!!

@Rafael, estudei o assunto que vc comentou, realmente tem que analisar os tipos de dados, achei muita informação no link: https://docs.microsoft.com/pt-br/office ... -functions

@Reinaldo
Apliquei as alterações que você enviou, está funcionando perfeitamente, ficou muito bom mesmo
Ao incluir as atualizações do "btnFiltrar_Click" já solucionou o erro, porem eu usei o BD da planilha MdC, se eu não tivesse alterado tb a "Sub Colorir_Linhas_Com_Criterios" incluindo a conversão CDec iria dar erro porque meu banco de dados tem muitos números contendo casas decimais

Inclui uma validação para entrada apenas de nrs na textbox "txtNomeContato", onde eu coloquei os números que servem de critério da "Sub Colorir_Linhas_Com_Criterios", caso alguém precise mudar a coluna critério é só mudar o índice na "Sub Colorir_Linhas_Com_Criterios" localizada no modulo, porem, com o cuidado de valida-lo porque se salvar com letras ou caracteres dá erro na hora que o form chamar a planilha de banco de dados

Bom, quero agradecer a ajuda de todos, agora já posso finalizar meu projeto, estou fazendo um controle de gestão financeira de projetos (Annual Business Plan) com cerca de 110 textbox, só faltava este elemento para finalizar

Obs: Segue novamente o anexo com as alterações aplicadas

Muito obrigado a todos por toda atenção e tempo dedicados nesta ajuda
Anexos
MdC Listview Colorir Critérios.rar
(76.67 KiB) Baixado 377 vezes


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Colorir linha do Listview de acordo com critério

Mensagem por Reinaldo »

Rotina para colorir, com outra "escrita"

Código: Selecionar todos

Sub Colore()
Dim Colunas As Integer, linhas As Integer
Dim x As Integer, y As Integer
Dim Azul As Integer, Verde As Integer, Vermelho As Integer
 On Error Resume Next
With frmPesquisa
    Colunas = .lstLista.ColumnHeaders.Count - 1
    linhas = .lstLista.ListItems.Count
        For y = 1 To linhas
            Select Case CDbl(.lstLista.ListItems(y).ListSubItems(2))
                Case 1 To 9
                Vermelho = 255: Verde = 0: Azul = 0
                Case 10 To 19
                Vermelho = 0: Verde = 0: Azul = 255
                Case 20 To 31
                Vermelho = 2: Verde = 202: Azul = 78
            End Select
            For x = 1 To Colunas
               ' .lstLista.ListItems(y).ForeColor = RGB(Vermelho, Verde, Azul)
                .lstLista.ListItems(y).ListSubItems(x).ForeColor = RGB(Vermelho, Verde, Azul)
            Next
        Next
End With
End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder