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

Inserir linha de dados do ListBox em uma formulário para editar - Excel VBA

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
Marcus Melo
Acabou de chegar
Acabou de chegar
Mensagens: 1
Registrado em: Sex Mai 05, 2017 5:10 pm

Inserir linha de dados do ListBox em uma formulário para editar - Excel VBA

Mensagem por Marcus Melo »

Boa tarde pessoal,

Estou com um grande problema. Andei olhando alguns códigos para montar um sistema de cadastro, estou barrando na hora de inserir linha de dados de uma listbox no formulário para editar o conteúdo posteriormente.

Quero ao selecionar a linha aparecer nos campos "valor" e "pago", referente às colunas 9 e 10 da planilha, as informações para editar. São os únicos item que poderão ser editados e salvos na mesma planilha e no mesmo registro ( não deve ser criado o novo registro). E depois atualizar a o listbox.

Segue abaixo todo meu projeto anexo
Desde já agradeço

Código: Selecionar todos

Option Explicit

Private Sub ComboCid_Change()
 txt2.SetFocus
End Sub

'Filtro personalizado com uma combobox e uma caixa de texto

Private Sub txt2_Change()
 Dim linhalistbox As Long, c As Range
  Dim guia As Worksheet: Set guia = ActiveSheet
  ListBox4.Clear
 
   guia.[A1:J1].AutoFilter Field:=3, Criteria1:=ComboCid.Text
   For Each c In guia.Range("H2:H" & guia.Cells(Rows.Count, 10).End(3).Row).SpecialCells(12)
    
    If Left(c.Value, Len(txt2.Text)) = txt2.Text Then
    
     With ListBox4
     
      .AddItem
      .List(linhalistbox, 0) = guia.Cells(c.Row, 1)
      .List(linhalistbox, 1) = guia.Cells(c.Row, 2)
      .List(linhalistbox, 2) = guia.Cells(c.Row, 3)
      .List(linhalistbox, 3) = guia.Cells(c.Row, 4)
      .List(linhalistbox, 4) = guia.Cells(c.Row, 5)
      .List(linhalistbox, 5) = guia.Cells(c.Row, 6)
      .List(linhalistbox, 6) = guia.Cells(c.Row, 7)
      .List(linhalistbox, 7) = guia.Cells(c.Row, 8)
      .List(linhalistbox, 8) = guia.Cells(c.Row, 9)
      .List(linhalistbox, 9) = guia.Cells(c.Row, 10)
     
     End With
     linhalistbox = linhalistbox + 1
    End If
   Next c
     guia.AutoFilterMode = False
End Sub


Private Sub UserForm_Initialize()

Plan1.Select
Dim Rng As Range, Dn As Range, AL As Object
  With ActiveSheet
   Set Rng = .Range(.Range("C2"), .Range("C" & Rows.Count).End(xlUp))
  End With
    Set AL = CreateObject("System.Collections.ArrayList")
  For Each Dn In Rng
   If Not AL.Contains(Dn.Value) Then AL.Add Dn.Value
  Next Dn
    AL.Sort
  
  ' id do usuario que será relacionado na pesquisa
  With ComboCid
   .Clear
   .List = AL.ToArray
  End With
End Sub 
Tela projeto.jpg
Tela projeto.jpg (212.44 KiB) Exibido 4840 vezes
Anexos
Planilha projeto.png
Planilha projeto.png (252.81 KiB) Exibido 4839 vezes


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.


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Inserir linha de dados do ListBox em uma formulário para editar - Excel VBA

Mensagem por srobles »

Marcus Melo,

Experimente o seguinte :
Código do botão alterar:

Código: Selecionar todos

Private Sub btnAtualizar_Click()
    'Se a resposta á pergunta for SIM,
    If MsgBox("Aplicar alterações no registro selecionado?", vbQuestion + vbYesNo, "Atualizar informações") = vbYes Then
        'Alteramos os valores das colunas do item selecionado do listbox
        'para os valores contidos nos textbox
        ListBox1.List(ListBox1.ListIndex, 8) = TextBox1
        ListBox1.List(ListBox1.ListIndex, 9) = TextBox2
        
        'Realizamos a alteração na planilha
        With ThisWorkbook.Sheets("Plan1") 'Mude para o nome de planilha em que trabalha
            .Cells(ActiveCell.Row, "I") = TextBox1 'Valor
            .Cells(ActiveCell.Row, "J") = TextBox2 'Pago
        End With
        
        MsgBox "Alteração realizada com sucesso!", vbInformation, "Atualização de dados"
    End If
End Sub
Código do evento Click do ListBox

Código: Selecionar todos

Private Sub ListBox1_Click()
    'Se o valor do ListBox for diferente de nulo,
    If ListBox1 <> "" Then
        TextBox1 = ListBox1.List(ListBox1.ListIndex, 8) 'Valor
        TextBox2 = ListBox1.List(ListBox1.ListIndex, 9) 'Pago
        
        'Fazemos uma busca na planilha para deixarmos a linha em questão com foco
        With ThisWorkbook.Sheets("Plan1") 'Mude para o nome de planilha em que trabalha
            .Activate
            .Cells(1, "A").Select
            'Fazemos o Find na planilha, baseando-se na coluna BOLETIM (valor inicial do ListBox)
            On Error GoTo vErro
            .Cells.Find(ListBox1, ActiveCell, xlValues, xlWhole, xlByRows, xlNext).Activate
vErro:
    If Err = 91 Then 'Se o valor não existir ou não for encontrado
        Exit Sub
    End If
        End With
    End If
End Sub
Estes são apenas exemplos. Se desejar refinar ainda mais o código, fique á vontade.

Abs


Responder