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

Retornar dados de ListBox para TextBox - Double Click

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
LuisHSJ
Colaborador
Colaborador
Mensagens: 10
Registrado em: Ter Abr 30, 2019 9:17 am

Retornar dados de ListBox para TextBox - Double Click

Mensagem por LuisHSJ »

Bom dia galera, estou com uma dúvida e gostaria de saber se podem me ajudar.

É o seguinte, possuo uma ListBox com apenas 4 valores visíveis, quando dou duplo clique sobre uma das linhas, abre-se um formulário preenchido com as informações referentes a linha que foi selecionada.

Até aí tudo certo, porém, encontrei um problema, sempre que eu seleciono uma linha X, o formulário abre, preenche as informações, tudo OK, porém, ao selecionar uma linha X-1 (qualquer linha anterior a última linha que selecionei), ocorre algum bug e os valor retornados para o formulário não são correspondentes a linha selecionada. Se eu fecho e seleciono novamente, os dados tornam-se correspondentes novamente.

Além disso, toda vez que seleciono uma linha anterior a última linha selecionada, o programa tem uma leve demora para retornar os dados (provavelmente pelo método find rolar o banco todo em um sentido pra depois retornar o dado), porém, teria como acelerar esse processo?

Segue imagens referentes aos forms e o código utilizado.

Private Sub ListClientes_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

Me.MultiPageClientes.Pages(1).Visible = True
Me.MultiPageClientes.Value = 1 ' pula para a pág 2

If ListClientes <> "" Then

With ThisWorkbook.Sheets("BDFUNC").Activate
Cells.Find(ListClientes, ActiveCell, xlValues, xlWhole, xlByRows, xlNext, False, False, True).Activate

TxtRE = Cells(ActiveCell.Row, "A")
TxtNome = Cells(ActiveCell.Row, "B")
TxtNascimento = Cells(ActiveCell.Row, "C")
cmbEstadoCivil = Cells(ActiveCell.Row, "D")
cmbSexo = Cells(ActiveCell.Row, "E")
TxtSangue = Cells(ActiveCell.Row, "F")
TxtDefi = Cells(ActiveCell.Row, "G")
TxtCPF = Cells(ActiveCell.Row, "H")
TxtRG = Cells(ActiveCell.Row, "I")
TxtCTPS = Cells(ActiveCell.Row, "J")
TxtPIS = Cells(ActiveCell.Row, "K")
TxtPassaporte = Cells(ActiveCell.Row, "L")
TxtTelFixo = Cells(ActiveCell.Row, "M")
TxtTelCelular = Cells(ActiveCell.Row, "N")
TxtWhatsapp = Cells(ActiveCell.Row, "O")
TxtEmail = Cells(ActiveCell.Row, "P")
TxtMaeNome = Cells(ActiveCell.Row, "Q")
TxtPaiNome = Cells(ActiveCell.Row, "R")
TxtEndereco = Cells(ActiveCell.Row, "S")
TxtNumero = Cells(ActiveCell.Row, "T")
TxtBairro = Cells(ActiveCell.Row, "U")
TxtCep = Cells(ActiveCell.Row, "V")
TxtEnderecoComplemento = Cells(ActiveCell.Row, "W")
TxtCidade = Cells(ActiveCell.Row, "X")
cmbUF = Cells(ActiveCell.Row, "Y")
TxtAdmissao = Cells(ActiveCell.Row, "Z")
TxtDemissao = Cells(ActiveCell.Row, "AA")
TxtTE = Cells(ActiveCell.Row, "AB")
cmbFerias = Cells(ActiveCell.Row, "AC")
TxtTurno = Cells(ActiveCell.Row, "AD")
TxtJornada = Cells(ActiveCell.Row, "AE")
TxtCargo = Cells(ActiveCell.Row, "AF")
TxtSalario = Cells(ActiveCell.Row, "AG")
TxtBanco = Cells(ActiveCell.Row, "AH")
TxtAgencia = Cells(ActiveCell.Row, "AI")
TxtConta = Cells(ActiveCell.Row, "AJ")
cmbTipoConta = Cells(ActiveCell.Row, "AK")
TxtObservacao = Cells(ActiveCell.Row, "AL")
TxtIdade = Cells(ActiveCell.Row, "AM")

End With
End If

Call Idade
Call TempoEmpresa

End Sub
Screenshot_1.png
Screenshot_1.png (62.29 KiB) Exibido 3353 vezes
Screenshot_2.png
Screenshot_2.png (38.15 KiB) Exibido 3353 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: Retornar dados de ListBox para TextBox - Double Click

Mensagem por srobles »

LuisHSJ,

Se não estiver utilizando o evento Click do ListClientes, experimente adicionar neste evento a rotina que faz o Find na planilha, exemplo :

Código: Selecionar todos

Private Sub ListClientes_Click ()
   Dim vBusca
   With ThisWorkBook.Sheets("BDFUNC")
      .Activate
      With .Range("A:C")
         Set vBusca = .Find(ListClientes.List(ListClientes.ListIndex, 0, xlValues, xlWhole)
            If Not vBusca Is Nothing Then
               .Range(vBusca.Address).Select
               'Se preferir, crie um array para armazenar os dados da linha selecionada
               'E no evento DblClick, apenas informe quais valores
               'vão em cada controle do form
            End if
            Set vBusca = Nothing
       End With
   End With
End Sub
Depois, remova a parte do código de busca contido no evento DblCLick do ListClientes e deixe apenas o código referente ao preenchimento dos campos do formulário.

Se possível, disponibilize seu modelo com dados ficticios. Assim podemos melhor lhe ajudar.

Espero ter ajudado.

Abs


Responder