Página 1 de 1

Retornar dados de ListBox para TextBox - Double Click

Enviado: Ter Abr 30, 2019 9:35 am
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 336 vezes
Screenshot_2.png
Screenshot_2.png (38.15 KiB) Exibido 336 vezes

Re: Retornar dados de ListBox para TextBox - Double Click

Enviado: Ter Abr 30, 2019 3:12 pm
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