Ir para conteúdo
Fórum Script Brasil
  • 0

Listview Interactiva


Norberto Jesus

Pergunta

Boa tarde,

Tenho uma plan que contem várias colunas com dados, sendo a última como opção "conciliado" ou "não conciliado".

As linhas dessas colunas, que no final digam "não conciliado" migram para a Listview, quando é mostrada a minha UserForm com a opção daquele quadradinho para selecionar (o que não sei fazer).

Sempre que coloque o certinho na Listview essa linha desaparece dela e na plan troca o estado de "não conciliado" para "conciliado".

alguém pode dar uma ajudinha?????

Só para nota, já devem ter reparado, sou novo aqui no forum e este é o meu 1º tópico, caso esteja a fazer algo de errado agradeço a indicação para correcção.

Cumprimentos,

PS - Estou a trabalhar em excel / vb.

Editado por Norberto Jesus
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

o codigo seria mais ou menos esse pra inserir na listview (imagino q você teja usando o objeto listview dentro do visual basic 6):

Dim NewItem As ListItem
Dim ultima_linha As Long, i As Long
ultima_linha = Application.Cells(Application.Cells.Rows.Count, 1).End(xlUp).Row

For i = 1 To ultima_linha
    If Application.Cells(i, 2).Value = "não conciliado" Then
        Set NewItem = ListView1.ListItems.Add(, , Application.Cells(i, 1).Value)
    End If
Next[/code]

no caso, ele procura as opcoes "conciliado" ou "não conciliado" na coluna 2, e se encontrar "não conciliado", insere o valor da coluna 1 na listview.

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Kuroi,

É isso mesmo, no entanto falta um pormenor, eu tenho na listview as chechboxes = true e sempre que marco uma linha dessa listview, ele muda na plan o estado dessa determinada linha de "não conciliado" para "conciliado", faz tipo um refresh na listview e volta a carregar os dados restantes com as expecificações já definidas, os tais "não conciliados"... Estou a fazer-me entender?

Além disso tenho ainda subitems... ou seja, o estado "conciliado" e/ou "não conciliado" está na coluna C e não na B... erro meu no inicio!

Obrigado,

Editado por Norberto Jesus
Link para o comentário
Compartilhar em outros sites

  • 0
Além disso tenho ainda subitems... ou seja, o estado "conciliado" e/ou "não conciliado" está na coluna C e não na B... erro meu no inicio!

norberto, se esta na coluna C, tudo o q você tem q fazer é trocar Application.Cells(i, 2).Value por Application.Cells(i, 3).Value naquele codigo q passei.

É isso mesmo, no entanto falta um pormenor, eu tenho na listview as chechboxes = true e sempre que marco uma linha dessa listview, ele muda na plan o estado dessa determinada linha de "não conciliado" para "conciliado", faz tipo um refresh na listview e volta a carregar os dados restantes com as expecificações já definidas, os tais "não conciliados"... Estou a fazer-me entender?

não entendi a parte do refresh, mas pra alterar na planilha a partir do clique no checkbox da listview, você pudia fazer uma pesquisa a partir do texto do item, caso ele não se repita:

Private Sub ListView1_ItemCheck(ByVal Item As MSComctlLib.ListItem)
    Dim ultima_linha As Long, i As Long
    ultima_linha = Application.Cells(Application.Cells.Rows.Count, 1).End(xlUp).Row
    
    For i = 1 To ultima_linha
        If Application.Cells(i, 1).Value = Item.Text Then
            If Item.Checked Then
                Application.Cells(i, 3).Value = "conciliado"
            Else
                Application.Cells(i, 3).Value = "não conciliado"
            End If

            Exit For
        End If
    Next
End Sub[/code]

EDITADO:

acho q entendi a parte do refresh. porque se o item mudou pra "conciliado", então ele tem q sair do listview, certo?? nesse caso, é so você adicionar a linha ListView1.ListItems.Remove Item.Index antes do Exit For no codigo q passei acima.

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

Kkuroi,

É sempre bom falar com quem percebe... é mesmo o que quero, só há 2 pormenores:

Quando digo que o estado está em C, quero adicionar à listview a coluna A e B e não apenas a A. Repito a linha de codigo: (o que não deve estar correcto)

Set NewItem = ListView1.ListItems.Add(, , Application.Cells(i, 1).Value)
        Set NewItem = ListView1.ListItems.Add(, , Application.Cells(i, 2).Value) '(mudei apenas i,1 para i,2)

Os dados não ficam em duas colunas mas sim em uma... :huh:

E ao contrário de que dizes, existem dados repetidos nas colunas A e B...

Mais uma vez, obrigado, resolveu mesmo!

Cumprimentos,

Norberto

Editado por Norberto Jesus
Link para o comentário
Compartilhar em outros sites

  • 0
Quando digo que o estado está em C, quero adicionar à listview a coluna A e B e não apenas a A. Repito a linha de codigo: (o que não deve estar correcto)

Set NewItem = ListView1.ListItems.Add(, , Application.Cells(i, 1).Value)

Set NewItem = ListView1.ListItems.Add(, , Application.Cells(i, 2).Value) '(mudei apenas i,1 para i,2)

hum, aqui o codigo seria assim:

Set NewItem = ListView1.ListItems.Add(, , Application.Cells(i, 1).Value)
NewItem.SubItems(1) = Application.Cells(i, 2).Value[/code] mas antes você tem q ter setado q o listview tem duas colunas.
E ao contrário de que dizes, existem dados repetidos nas colunas A e B...
hum, então você teria q guardar o numero da linha do item. você poderia usar uma coluna nova pra isso, mas se você não quer q tenha mais uma coluna, você pode usar a propriedade Key do item. o problema é q o Key é meio chato porque ele não aceita valores numericos, então você tem adicionar um caractere não numerico junto, mas ai da pra resolver com o Val(). ai você faria assim:
[code]Set NewItem = ListView1.ListItems.Add(, i & "a", Application.Cells(i, 1).Value)
ai o codigo no clique do check ia ficar ate mais facil:
Private Sub ListView1_ItemCheck(ByVal Item As MSComctlLib.ListItem)
    If Item.Checked Then
        Application.Cells(Val(Item.Key), 3).value = "conciliado"
    Else
        Application.Cells(Val(Item.Key), 3).value = "não conciliado"
    End If
End Sub[/code]

tenta ai.

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi,

Tá bom de mais... valeu sua ajuda... de forma alguma chegaria a este resultado e tão depressa!

Não querendo encher mais o saco, mesmo so para terminar e dou o tópico por encerrado, tem como numa textbox fazer a soma de todos os dados "selecionados" na listview (nas checkboxes)? :rolleyes:

Cumprimentos,

Norberto

Link para o comentário
Compartilhar em outros sites

  • 0

hum, se eu entendi, você teria q fazer um For Each pra percorrer os items, e depois você procura na planilha. não sei direito como ficou o seu programa, mas baseando no q eu passei acima, ficaria mais ou menos isso:

Dim it As ListItem, vl As Double
Dim coluna As Integer

vl = 0
coluna = 5 'No lugar de 5, você poe o numero da coluna onde estao os valores q você quer somar.

For Each it In ListView1.ListItems
    If it.Checked Then
        vl = vl + CDbl(Application.Cells(Val(it.Key), coluna).Value)
    End If
Next
Text1.Text = vl[/code]

ou se o valor q você quer somar já esta em uma das colunas do listview, você pode pegar direto dela, nem precisa mais acessar a planilha, tenta ai.

Link para o comentário
Compartilhar em outros sites

  • 0

kuroi,

Sei que este assunto está encerrado, mas acho que não vale a pena abrir novo tópico...

As últimas duas colunas que são adicionadas no evento "Private Sub UserForm_Initialize()" são com casas decimais.

Set NewItem = ListView1.ListItems.Add(, , Application.Cells(i, 1).Value)
NewItem.SubItems(1) = Application.Cells(i, 2).Value
NewItem.SubItems(2) = Application.Cells(i, 3).Value
NewItem.SubItems(3) = Application.Cells(i, 4).Value
NewItem.SubItems(4) = Application.Cells(i, 5).Value
NewItem.SubItems(5) = Application.Cells(i, 6).Value

Como faço para o subItems 4 e 5 tenham sempre a formatação #,## ?

Obrigado,

Editado por Norberto Jesus
Link para o comentário
Compartilhar em outros sites

  • 0

você pode formatar na hora de preencher:

Set NewItem = ListView1.ListItems.Add(, , Application.Cells(i, 1).Value)
NewItem.SubItems(1) = Application.Cells(i, 2).Value
NewItem.SubItems(2) = Application.Cells(i, 3).Value
NewItem.SubItems(3) = Format(Application.Cells(i, 4).Value, "#,##0.00;-#,##0.00")
NewItem.SubItems(4) = Format(Application.Cells(i, 5).Value, "#,##0.00;-#,##0.00")
NewItem.SubItems(5) = Application.Cells(i, 6).Value[/code]

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...