Problema al activar celda de la fila que contiene los datos encontrados para ser cargados en un formulario y modificados

He creado un formulario en VBA Excel, para buscar un dato, por ejemplo, buscar personas por su numero de cedula, una vez se encuentra el dato buscado, en un listbox se cargagan todos los resultados que coinciden.

Cuando veo el que me interesa, lo selecciono mediante un click y se supone que ese click, debe hacer que se active la primera celda de la fila donde estan contenidos todos los datos relacionados, de esta manera, pretendo cargarlos en un formulario para moificarlos o actualizarlos, pero miren los errores que me presenta:

1 respuesta

Respuesta
1

Probalo pasando el dato a valor numérico:

Valor = Val(Listbox1.Lista(i)

Sdos!

Es:

Valor = Val(Listbox1.List(i))

¡Gracias! 

Hola Elsa, gracias por tu ayuda, recuerdo que tu me ayudaste con algo que necesité hace ya un buen rato y que también estaba relacionado con el mismo.

Te cuento que hice el cambio, pero no logro hacerlo funcionar.

Es importante, que no solo se refiera a Números, ya que la búsqueda, también se debe hacer por nombres y apellidos, pero eso esta funcionando bien, el problema lo tengo es cuando selecciono del listbox la persona que me interesa de los resultados que me arrojó la búsqueda y no logro que se active la fila donde están esos datos, para que después los pueda cargar en un formulario, editarlos y dejarlos en la fila donde estaban.

Gracias Elsa nuevamente por tu valiosa colaboración.

No puedo probar ahora tu código, pero yo generalmente utilizo otra instrucción de búsqueda, si no te da resultado envíame tu libro.

Set busco = Sheets(...).Range(...).Find(Valor, Lookin:=xlvalues, Lookat:= xlwhole)

If not busco is Nothing Then

'instrucciones si encontró el dato

Else

'instrucciones si No encontró el dato

End If

Coloca el nombre y rango de tu hoja y probarlo. Si no te da los resultados esperados envíame el libro.

Sdos!

¡Gracias! Voy a probar y si no,  ya te envío el libro. 

Elsa, tu opción funciona perfectamente, pero esa parte de la búsqueda no tiene problema.

La dificultad se me presenta al momento de dar click sobre uno de los elementos del ListBox para lograr que se active la celda que contiene esos datos, así que mejor opté por enviarte el fichero a: mailto:[email protected] 

Gracias.

Luis Carlos

Ya te devuelvo el libro con los cambios, que explico aquí:

Como tenés en la primer col del listbox el nro de fila podés utilizar la 1er opción. Cuando no se guarda la fila se utiliza la 2da.

Observa que te cambié la instrucción de búsqueda.

'Activar la celda del registro elegido
Private Sub ListBox1_Click()
    Range("A2").Activate
    Cuenta = Me.ListBox1.ListCount
    For i = 0 To Cuenta - 1
        If Me.ListBox1.Selected(i) Then
            Valor = Me.ListBox1.List(i)
            Sheets("Funcionarios").Range("A2:A65000").Find(what:=Valor, LookIn:=xlValues, lookat:=xlWhole).Activate
            '1er opción: guardo la fila encontrada que en tu caso es la 1er col del listbox
            filx = listbox1.list(i,0)
            '2da opción: cuando el listbox no guarda las filas de los registros.
            'filx = ActiveCell.Row  
        End If
    Next i
End Sub

Como necesitas esa variable (filx) para otras tareas la defino como pública al inicio de todo el código con:

Dim filx as long

Gracias Elsamatilde por tu valiosa ayuda. Funciona a la perfección, eso es justo lo que necesito.

Dos cositas más por ahora. No me está cargando la información de las 11 Columnas en el ListBox y lo otro, que está mal en el mensaje que me debe generar cuando No encuentra datos buscados?

Gracias Elsa.

Luis Carlos

Los listbox solo permiten un máx de 10 columnas.

Es posible utilizar un número mayor si defines la propiedad RowSource, tanto desde el cuadro de Propiedades como por código, por ej:

ListBox1.RowSource = "=Hoja1!A1:M6"

Pero si luego necesitas agregar registros o pasarle ciertos datos por fila no te será posible con más de 10 col. Por ej, con este tipo de instrucciones te dará error:

For Each cd In Sheets("Hoja1").Range("A1:A6")
ListBox1.AddItem cd
ListBox1. List(ListBox1.ListCount - 1, 1) = cd.Offset(0, 1)
ListBox1. List(ListBox1.ListCount - 1, 2) = cd.Offset(0, 2)

'al llegar a la col 10 dará error.

Con respecto a qué está mal en el mensaje... te lo consulto por correo para que me envies muestra del error.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas