Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Colorir linha do Listview de acordo com critério
Colorir linha do Listview de acordo com critério
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
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
Re: Colorir linha do Listview de acordo com critério
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
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 719 vezes
- Rafael Monteiro
- 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
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.
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.
- Reinaldo
- 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
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
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"
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
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
Re: Colorir linha do Listview de acordo com critério [RESOLVIDO]
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
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 649 vezes
- Reinaldo
- 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
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