Notifications
Clear all

Pintar linhas de um Listview

12 Posts
3 Usuários
0 Reactions
2,796 Visualizações
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Pessoal,

A muito tento entender como fazer: Poder estipular condições e pintar determinadas linhas de um listview caso a condição não seja atendida. Ex:
De acordo com o código abaixo eu preencho meu listview, mas como faria para pintar o banco(1), banco(4), banco(8) e banco(10).

While Not banco.EOF
    Set itens = Me.ListView1.ListItems.Add(, , banco(1))
        itens.SubItems(1) = "" & banco(4)
        itens.SubItems(2) = "" & banco(8)
        itens.SubItems(3) = "" & banco(10)
        banco.MoveNext
Wend

Uso Excel 2007 conexão ADO Access 2007

Obrigado.

At

 
Postado : 10/07/2012 3:06 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se o modelo disponibilizado no site ThomasVasquez, pelo colega Mauro Coutinho no lhe ajuda

http://www.tomasvasquez.com.br/forum/vi ... _zR9pGlmC0

 
Postado : 10/07/2012 7:09 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Veja...

Public Sub ColorListviewRow(lv As ListView, RowNbr As Long, RowColor As OLE_COLOR)
'************************************************************************
'Purpose: Color a ListView Row
'Inputs : lv - The ListView
'         RowNbr - The index of the row to be colored
'         RowColor - The color to color it
'Outputs: None
'************************************************************************
    
    Dim itmX As ListItem
    Dim lvSI As ListSubItem
    Dim intIndex As Integer
    
    On Error GoTo ErrorRoutine
    
    Set itmX = lv.ListItems(RowNbr)
    itmX.ForeColor = RowColor
    For intIndex = 1 To lv.ColumnHeaders.Count - 1
        Set lvSI = itmX.ListSubItems(intIndex)
        lvSI.ForeColor = RowColor
    Next

    Set itmX = Nothing
    Set lvSI = Nothing
    
    Exit Sub

ErrorRoutine:

    MsgBox Err.Description

End Sub 
 
Postado : 11/07/2012 4:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Alexandre,

Poderia informar a referência (procedência) da função acima...

 
Postado : 11/07/2012 7:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Alexandre,

Poderia informar a referência (procedência) da função acima...

José, eu achei varias referencias sobre a rotina acima, mas não encontrei o Autor, mas temos algo sobre a mesma no site abaixo, acredito ser adaptação de VB p/ VBA.

VB - Color a row in a ListView
http://www.vbforums.com/showthread.php?t=231157

[]s

 
Postado : 11/07/2012 8:15 am
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Prezados, agradeço as respostas:

Reinaldo, o exemplo é listview zebrado, não é isso que eu preciso, e dele não consegui outra linha de raciocínio.
Alexandre, eu já tinha visto esse exemplo nas pesquisas que fiz, mas também não consegui encaixar minha rotina nele.

Gostaria que na medida do possível a dica fosse encima do meu exemplo. Melhorei um pouco, vejam:

Dim itens As ListItem
Dim Dt As String

Dt = Date

While Not banco.EOF
Set itens = Me.ListView1.ListItems.Add(, , banco(1))

Aqui eu coloquei uma condição, sabendo que no banco(1) está minha data eu pergunto se ela é igua a hoje, se sim, pinto de azul.
A primeira coluna que armazena essa data, fica pintada de azul (ok!), mas os subitems já tentei de todo jeito e não sei pintar.

If banco(1) = Dt Then
itens.ForeColor = vbBlue
End If
        
        itens.SubItems(1) = "" & banco(4)
        itens.SubItems(2) = "" & banco(8)
        itens.SubItems(3) = "" & banco(10)
        banco.MoveNext

Wend

Obrigado.

 
Postado : 11/07/2012 1:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Se puder disponibilize seu form (exemplo de sua plan), para que possamos tentar reproduzir o que espera, sem termos que construir um outro form.

 
Postado : 11/07/2012 1:20 pm
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

Reinaldo, a males que vem para bem rsrs...

Eu fiquei com preguiça de criar um exemplo e gastei mais enzimas do meu cérebro pra entender o exemplo do Alexandre.

Funcionou a contento!

Obrigado colegas!

 
Postado : 12/07/2012 6:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

...Funcionou a contento!...

Não pode compartilhar?? :cry:

 
Postado : 12/07/2012 5:41 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

JoseA e companhia me desculpe por não mandar a referência :( :oops:

Mais foi onde o Mauro encontro, em VBForum.

Poxa Mauro, você está sumido cara, deve está só na correria , aparece mais, precisamos de você!! :)

Att

 
Postado : 12/07/2012 5:52 pm
(@depoisteconto)
Posts: 183
Reputable Member
Topic starter
 

...Funcionou a contento!...

Não pode compartilhar?? :cry:

Claro que sim joseA, e me perdoem por não ter feito previamente.

Vejam como ficou minha adaptação:

Dim itens As ListItem
Dim Dt As String
Dim x As Integer

Dt = Date
N = 1

While Not banco.EOF
Set itens = Me.ListView1.ListItems.Add(, , banco(1))
    itens.SubItems(1) = "" & banco(4)
    itens.SubItems(2) = "" & banco(8)
    itens.SubItems(3) = "" & banco(10)
    
    If banco(1) = Dt Then
    itens.ForeColor = vbBlue
    For x = 0 To Me.ListView1.ColumnHeaders.Count - 1
    Me.ListView1.ListItems(N).ListSubItems(x).ForeColor = vbGreen
    Me.ListView1.ListItems(N).ForeColor = vbGreen
    Me.ListView1.ListItems(N).ForeColor = vbGreen
    Next
    End If
    N = N + 1
    banco.MoveNext
Wend
 
Postado : 13/07/2012 7:28 am
(@jairo2012)
Posts: 3
New Member
 

Olá...

Tenho um cadastro com listview. Esse cadastro possui um temporizador. Registra o inicio da cadastro e o fim do mesmo.

São duas colunas, tempo inicial e tempo final.

Estou precisando calcular o tempo inicial de toda coluna 1 e tbm toda a coluna 2.

Sendo que... O tempo inicial tem que ir para uma testbox e o tempo final textbox tbm. E em uma terceira texbox o resultado das duas, diminuir...

Poderia me ajuda?

If Me.ComboBox1 = "LI-L01-GVARGA" Then                             '' SALVAR
registro = Worksheets("LI-L01-GVARGA").UsedRange.Rows.Count + 1

        Plan23.Cells(registro, 1) = TextBoxauditor.Value
        Plan23.Cells(registro, 2) = CDate(Format(TextBox58.Value, "dd/mm/yyyy"))
        Plan23.Cells(registro, 3) = CDate(Format(TextBox53.Value, "dd/mm/yyyy"))
        Plan23.Cells(registro, 8) = TextBox47.Value
        Plan23.Cells(registro, 4) = TextBox57.Value
        Plan23.Cells(registro, 5) = txtcrediarista.Value
        Plan23.Cells(registro, 6) = txtanalistacredito.Value
        Plan23.Cells(registro, 7) = txtjustificativaanalista.Value
        Plan23.Cells(registro, 9) = ComboBoxitem.Value
        Plan23.Cells(registro, 10) = TextBox54.Value
        Plan23.Cells(registro, 11) = TextBox55.Value
        Plan23.Cells(registro, 12) = TextBox57.Tag                           ''AQUI É O TEMPO INICIAL...
        Plan23.Cells(registro, 13) = TimeValue(Now)                         ''AQUI É O TEMPO FINAL...
        Plan23.Cells(registro, 14) = ComboBox2.Value
        Plan23.Cells(registro, 15) = registro
Private Sub ComboBox2_Change() ''Carregar a list
Dim linha As Integer

If Me.ComboBox2 = "LI-L01-GVARGA" Then

linha = 2

ListView1.ListItems.Clear
Do While Plan23.Range("b" & linha) <> ""
        
Set Lista = ListView1.ListItems.Add(, , Plan23.Range("a" & linha))
            
               Lista.SubItems(1) = Format(Plan23.Range("b" & linha), "dd/mm/yyyy")
               Lista.SubItems(2) = Format(Plan23.Range("c" & linha), "dd/mm/yyyy")
               Lista.SubItems(3) = Plan23.Range("d" & linha)
               Lista.SubItems(4) = Plan23.Range("e" & linha)
               Lista.SubItems(5) = Plan23.Range("f" & linha)
               Lista.SubItems(6) = Plan23.Range("g" & linha)
               Lista.SubItems(7) = Plan23.Range("h" & linha)
               Lista.SubItems(8) = Plan23.Range("i" & linha)
               Lista.SubItems(9) = Plan23.Range("j" & linha)
               Lista.SubItems(10) = Plan23.Range("k" & linha)
               Lista.SubItems(11) = Format(Plan23.Range("l" & linha), "hh:mm:ss")                               ''AQUI CARREGA O TEMPO
               Lista.SubItems(12) = Format(Plan23.Range("m" & linha), "hh:mm:ss")
               Lista.SubItems(13) = Plan23.Range("n" & linha)


               
linha = linha + 1
Loop




Obrigado desde já...

End If
 
Postado : 20/08/2012 5:14 pm