Notifications
Clear all

Retornar dados de um listview em textbox

12 Posts
3 Usuários
0 Reactions
4,975 Visualizações
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Bom dia pessoal,
alguem ai pode me ajudar, seguinte eu tenho um listview que esta com os dados de uma planilha
quero altera algum item dessa planilha no meu listview como faço para ao clicar no item X os dados referente aquele item
ser mostrados todos em seus respecitvos textbox tipo CODIGO = TXTCODIGO e por ai vai.

At.
Marcelo Araujo

 
Postado : 17/01/2012 6:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 
Private Sub ListView1_click()
Dim linha, Index

linha = (ListView1.SelectedItem.Index) + 1 'linha da plan
Index = (ListView1.SelectedItem.Index) 'linha do ListView
Me.LblLinha.Caption = linha

Me.TextBox1.Value = ListView1.ListItems(Index)
Me.TextBox2.Value = ListView1.ListItems(Index).ListSubItems(1).Text
Me.TextBox3.Value = ListView1.ListItems(Index).ListSubItems(2).Text
Me.TextBox4.Value = ListView1.ListItems(Index).ListSubItems(3).Text
Me.TextBox1.SetFocus
End Sub
 
Postado : 17/01/2012 7:33 am
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 
Private Sub ListView1_click()
Dim linha, Index

linha = (ListView1.SelectedItem.Index) + 1 'linha da plan
Index = (ListView1.SelectedItem.Index) 'linha do ListView
Me.LblLinha.Caption = linha

Me.TextBox1.Value = ListView1.ListItems(Index)
Me.TextBox2.Value = ListView1.ListItems(Index).ListSubItems(1).Text
Me.TextBox3.Value = ListView1.ListItems(Index).ListSubItems(2).Text
Me.TextBox4.Value = ListView1.ListItems(Index).ListSubItems(3).Text
Me.TextBox1.SetFocus
End Sub

Opa Jose obrigado por responde, como sempre muito prestativo obrigado, mais não conseguir adaptar ao meu projeto tentei de varias formas ele mostras os valores no nos campos todo errado, segue em anexo para melhor entedimento

 
Postado : 17/01/2012 12:13 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Seria a ordem do controle o 1º item é índice 0, 2º - 1, .....

Private Sub LstLancamentos_Click()
Dim linha, Index

linha = (LstLancamentos.SelectedItem.Index) + 1 'linha da plan
Index = (LstLancamentos.SelectedItem.Index) 'linha do ListView
'Me.LblLinha.Caption = linha

Me.TxtId.Value = LstLancamentos.ListItems(Index)
Me.TxtProduto.Value = LstLancamentos.ListItems(Index).ListSubItems(4).Text 'produto
Me.TxtCultura.Value = LstLancamentos.ListItems(Index).ListSubItems(1).Text 'cultura
Me.TxtFornecedor.Value = LstLancamentos.ListItems(Index).ListSubItems(3).Text
Me.TxtFazenda.Value = LstLancamentos.ListItems(Index).ListSubItems(2).Text
Me.TxtArea.Value = LstLancamentos.ListItems(Index).ListSubItems(7).Text
Me.TxtDose.Value = LstLancamentos.ListItems(Index).ListSubItems(6).Text
Me.TxtNAplicacao.Value = LstLancamentos.ListItems(Index).ListSubItems(5).Text
Me.TxtTotalAplica.Value = LstLancamentos.ListItems(Index).ListSubItems(8).Text
Me.TxtValorUnit.Value = LstLancamentos.ListItems(Index).ListSubItems(9).Text
Me.TxtValorTotal.Value = LstLancamentos.ListItems(Index).ListSubItems(10).Text
End Sub

Seu controle esta sendo carregado em ordem invertida em relação à Plan. É opção sua?

 
Postado : 18/01/2012 8:50 am
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Seria a ordem do controle o 1º item é índice 0, 2º - 1, .....

Private Sub LstLancamentos_Click()
Dim linha, Index

linha = (LstLancamentos.SelectedItem.Index) + 1 'linha da plan
Index = (LstLancamentos.SelectedItem.Index) 'linha do ListView
'Me.LblLinha.Caption = linha

Me.TxtId.Value = LstLancamentos.ListItems(Index)
Me.TxtProduto.Value = LstLancamentos.ListItems(Index).ListSubItems(4).Text 'produto
Me.TxtCultura.Value = LstLancamentos.ListItems(Index).ListSubItems(1).Text 'cultura
Me.TxtFornecedor.Value = LstLancamentos.ListItems(Index).ListSubItems(3).Text
Me.TxtFazenda.Value = LstLancamentos.ListItems(Index).ListSubItems(2).Text
Me.TxtArea.Value = LstLancamentos.ListItems(Index).ListSubItems(7).Text
Me.TxtDose.Value = LstLancamentos.ListItems(Index).ListSubItems(6).Text
Me.TxtNAplicacao.Value = LstLancamentos.ListItems(Index).ListSubItems(5).Text
Me.TxtTotalAplica.Value = LstLancamentos.ListItems(Index).ListSubItems(8).Text
Me.TxtValorUnit.Value = LstLancamentos.ListItems(Index).ListSubItems(9).Text
Me.TxtValorTotal.Value = LstLancamentos.ListItems(Index).ListSubItems(10).Text
End Sub

Seu controle esta sendo carregado em ordem invertida em relação à Plan. É opção sua?

Boa tarde Jose, mais uma vez obrigado por ter me ajudado, cara não sei pq foi q estava carregando de forma invertida mais agora ja esta okei
funcionou que uma beleza, agora so mais uma coisa, como faço para alterar os dados eu tentei aqui e mandei gravar novamente e ele salva outro teria como me dar mais essa dica, quando eu selecionao no listview os dados no txtbox e combox eu pudesse alteralos sem problemas desde ja agradeço

 
Postado : 18/01/2012 11:22 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Márcio,

Evite repetir a citação (só se necessário), senão o tópico fica bastante extenso. Até amanhã retornaremos com uma resposta. demanda tempo. ;)

 
Postado : 18/01/2012 4:38 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

...não sei pq foi q estava carregando de forma invertida...

Para esse problema substitua sua rotina que carrega o controle ListView por essa:

Sub PreencheListview()
    Dim itens As ListItem
    Dim lastRow As Long
    Dim X As Long
    
    Set Ws = Sheets("Lancamento")
        
        ' Verifica qual a ultima célula preenchida
        lastRow = Ws.Cells(Rows.Count, 1).End(xlUp).Row
    
    'Cria o cabeçalho
    With LstLancamentos
        .ColumnHeaders.Clear
        .Gridlines = True
        .View = lvwReport
        .ListItems.Clear
        .FullRowSelect = True
        .ColumnHeaders.Add Text:="ID", Width:=25
        .ColumnHeaders.Add Text:="Cultura", Width:=60, Alignment:=1
        .ColumnHeaders.Add Text:="Fazenda", Width:=60, Alignment:=1
        .ColumnHeaders.Add Text:="Fornecedor", Width:=100, Alignment:=2
        .ColumnHeaders.Add Text:="Produto", Width:=170
        .ColumnHeaders.Add Text:="NºAplicações", Width:=60, Alignment:=2
        .ColumnHeaders.Add Text:="Dose/há", Width:=50, Alignment:=2
        .ColumnHeaders.Add Text:="Aréa", Width:=50
        .ColumnHeaders.Add Text:="Total Aplicaçãos", Width:=115, Alignment:=2
        .ColumnHeaders.Add Text:="Valor Unitário", Width:=115
        .ColumnHeaders.Add Text:="Valor Total", Width:=110
    End With
    
    ' Ciclo em todas as linhas
    For X = 2 To lastRow
        'PREENCHENDO O LISTVIEW
        Set itens = Me.LstLancamentos.ListItems.Add(, , Ws.Cells(X, 1).Value)
            itens.SubItems(1) = Ws.Cells(X, 2).Value
            itens.SubItems(2) = Ws.Cells(X, 3).Value
            itens.SubItems(3) = Ws.Cells(X, 4).Value
            itens.SubItems(4) = Ws.Cells(X, 5).Value
            itens.SubItems(5) = Ws.Cells(X, 6).Value
            itens.SubItems(6) = Ws.Cells(X, 7).Value
            itens.SubItems(7) = Ws.Cells(X, 8).Value
            itens.SubItems(8) = Ws.Cells(X, 9).Value
            itens.SubItems(9) = Ws.Cells(X, 10).Value
            itens.SubItems(10) = Ws.Cells(X, 11).Value
            
    Next
    

End Sub
 
Postado : 19/01/2012 12:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

...como faço para alterar os dados eu tentei aqui e mandei gravar novamente e ele salva outro teria como me dar mais essa dica, quando eu selecionao no listview os dados no txtbox e combox eu pudesse alteralos sem problemas...

Como 1ª linha no ambiente VBA do Form, copie/cole:

Public linha As Integer

Copie/cole e associe a um botão, para editar:

Sub EDITAR()
 If Me.TxtProduto = "" Then
    MsgBox "Pesquise os dados.", 64, "PLANEJAMENTO"
  Exit Sub
    End If
      If MsgBox("Confirma alteração dos dados de: " & Me.TxtProduto & " ?", vbYesNo + vbQuestion, "PLANEJAMENTO") = vbNo Then
       Exit Sub
      End If
   Set Ws = ThisWorkbook.Worksheets("Lancamento")

    Ws.Cells(linha, 1) = Me.TxtId
    Ws.Cells(linha, 2) = TxtCultura
    Ws.Cells(linha, 3) = TxtFazenda
    Ws.Cells(linha, 4) = TxtFornecedor
    Ws.Cells(linha, 5) = TxtProduto
    Ws.Cells(linha, 6) = CLng(TxtNAplicacao) 'os campos que usa o recurso Clng e CDbl nao podem ficar vazios
    Ws.Cells(linha, 7) = TxtDose
    Ws.Cells(linha, 8) = CDbl(TxtArea)
    Ws.Cells(linha, 9) = TxtTotalAplica
    Ws.Cells(linha, 10) = CDbl(TxtValorUnit)
    Ws.Cells(linha, 11) = CDbl(TxtValorTotal)
    Call PreencheListview
End Sub
 
Postado : 19/01/2012 12:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Enfim, segue seu arquivo adaptado.

 
Postado : 19/01/2012 8:26 pm
(@m_araujo)
Posts: 159
Estimable Member
Topic starter
 

Vlw jose obrigado muito obrigado mesmo funcionou perfeitamente, desculpa por cita sempre na proxima prestarei mais atenção. blw

 
Postado : 20/01/2012 5:53 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Quanto à citação foi apenas uma dica. ;)

 
Postado : 20/01/2012 6:55 am
(@jairo2012)
Posts: 3
New Member
 

Olá... Bom dia.

Vendo o que o cara colega postou no forum sobre informação da listview para as combos funcionou comigo tbm.

Agora preciso fazer do que ao carregar uma listview com referencia do banco de dados, quero fazer o contrario, não seria preciso salvar, só quero que ao carregar a listview essa informação vá para uma certa plan, pois preciso fazer uma referencia de lá para envio de e-mail através do form vba.

Obs. Ao filtrar no form a listview a plan que estarar recebendo a informação tbm filtra.

De já muito obrigado pelas resposta!

Deus Seja Louvado!

 
Postado : 16/08/2012 8:37 am