¿Cómo puedo seleccionar dato especifico de la hoja de calculo al hacer click en dato de listbox?

Tengo una base de datos en Excel donde registro cierta información "Hoja:DEAL FIX" con varias columnas pero que dependen de la columna A ya que allí es donde se encuentran los datos mediante los cuales puedo agrupar la información por categorías. Con la ayuda de información sobre vba aplicado a Excel he creado un formulario con un listbox que me permite filtrar lo datos de la hoja DEAL FIX a través de un combobox y mostralos. Este combobox muestra los datos de cada categoría de la columna A. Lo que deseo hacer es que al hacer click en un dato especifico del listbox se seleccione automáticamente dicho dato en la hoja de calculo, He tratado pero solo me selecciona el primer dato de determinado grupo de items (todos los datos de una categoría). He podido apreciar que en este foro dan muy buenas respuestas pero no he encontrado una que responda mi pregunta. Agradeceré mucho su ayuda. Saludos

Aquí dejo el código que me selecciona solo el primer dato del grupo de datos filtrado en el listbox:

Private Sub ListBox1_Click()

Worksheets("DEALS FIX").Select
Range("A3").Activate
cuenta = Me.ListBox1.ListCount
For i = 0 To cuenta - 1
If Me.ListBox1.Selected(i) Then
valor = Me.ListBox1.List(i)
Range("A3:A400").Find(what:=valor, lookat:=xlWhole, after:=ActiveCell).Activate
End If
Next i
End Sub

1 respuesta

Respuesta
1

H o l a : Puedes poner el código con el que realizas la carga en el listbox. Necesitamos cargar en el listbox el número de fila al que pertenece cada uno de los registros cuando cargas el listbox, de esa forma cuando le des click al listbox sabremos el registro y entonces ya podríamos seleccionarlo.

Pon el código para actualizarlo y de esa forma también crear el código para seleccionar el dato.

Hola Dante, gracias por responder con prontitud. Aquí debajo dejo el código:

Private Sub ListItems_Change()
'Avoid movement of the screen
Application.ScreenUpdating = False
'........................................

Dim fila, a As Integer
On Error Resume Next
'Erease data from listbox
ListBox1.Clear
'........................................
'declaration of variables
a = 0 'column
fila = 3 'row
'Bucles while the row is empty
While Sheets("DEALS FIX").Cells(fila, 1) <> Empty
'.................................................
dato = ListItems 'criterion

'here goes the condition
'Var = Sheets("DEALS FIX").Cells(fila, 1)
If Sheets("DEALS FIX").Cells(fila, 1) = dato Then
a = ListBox1.ListCount
ListBox1.AddItem
ListBox1.List(a, 0) = Sheets("DEALS FIX").Cells(fila, 1)
ListBox1.List(a, 1) = Sheets("DEALS FIX").Cells(fila, 2)
ListBox1.List(a, 2) = Sheets("DEALS FIX").Cells(fila, 3)
ListBox1.List(a, 3) = Sheets("DEALS FIX").Cells(fila, 4)
ListBox1.List(a, 4) = Sheets("DEALS FIX").Cells(fila, 6)
End If

fila = fila + 1
Wend
Application.ScreenUpdating = True
End Sub

Te comento que este código esta en el combobox. Cuando selecciono un item del combox automáticamente se cargan los registros en el listbox filtrándose automáticamente según el dato seleccionado en el combobox, los datos que filtra se encuentra en la columna "A" de la hoja de calculo (DEALS FIX). Este código lo obtuve de una página web y lo adapte a mi necesidad. En si hay muchas cosas que no entiendo, todavía soy un novato en programación en vba, pero estoy aprendiendo. Si necesitas alguna otra cosa me dejas saber. Muchas Gracias!

Un saludo desde Perú

Agregué esta línea:

ListBox1. List(a, 5) = fila 'se agrega el número de fila

Así quedaría el código para cargar el listbox

Private Sub ListItems_Change()
    'Avoid movement of the screen
    Application.ScreenUpdating = False
    '........................................
    Dim fila, a As Integer
    On Error Resume Next
    'Erease data from listbox
    ListBox1.Clear
    '........................................
    'declaration of variables
    fila = 3 'row
    'Bucles while the row is empty
    While Sheets("DEALS FIX").Cells(fila, 1) <> Empty
        '.................................................
        dato = ListItems 'criterion
        'here goes the condition
        'Var = Sheets("DEALS FIX").Cells(fila, 1)
        If Sheets("DEALS FIX").Cells(fila, 1) = dato Then
            a = ListBox1.ListCount
            ListBox1. AddItem
            ListBox1.List(a, 0) = Sheets("DEALS FIX"). Cells(fila, 1)
            ListBox1.List(a, 1) = Sheets("DEALS FIX"). Cells(fila, 2)
            ListBox1.List(a, 2) = Sheets("DEALS FIX"). Cells(fila, 3)
            ListBox1.List(a, 3) = Sheets("DEALS FIX"). Cells(fila, 4)
            ListBox1.List(a, 4) = Sheets("DEALS FIX"). Cells(fila, 6)
            ListBox1.List(a, 5) = fila  'se agrega el número de fila
        End If
        fila = fila + 1
    Wend
    Application.ScreenUpdating = True
End Sub

Ahora el código para seleccionar la celda sería así:

Private Sub ListBox1_Click()
'Por.Dante Amor
    Sheets("DEALS FIX").Select
    fila = ListBox1.List(ListBox1.ListIndex, 5) 'Se obtiene el número de fila
    Range("A" & fila).Select                    'Se selecciona la celda
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

¡Gracias! 

Me funciono excelente. Maestro, muchas gracias.

Hola Dante, ¿cómo estas? He agregado más columnas al listbox para obtener más información de la hoja de calculo. Ahora el código esta así:

If Sheets("DEALS FIX").Cells(fila, 1) = dato Then
a = ListBox1.ListCount
ListBox1.AddItem
ListBox1.List(a, 0) = Sheets("DEALS FIX").Cells(fila, 1)
ListBox1.List(a, 1) = Sheets("DEALS FIX").Cells(fila, 2)
ListBox1.List(a, 2) = Sheets("DEALS FIX").Cells(fila, 3)
ListBox1.List(a, 3) = Sheets("DEALS FIX").Cells(fila, 4)
ListBox1.List(a, 4) = Sheets("DEALS FIX").Cells(fila, 6)
ListBox1.List(a, 5) = Sheets("DEALS FIX").Cells(fila, 12)
ListBox1.List(a, 6) = Sheets("DEALS FIX").Cells(fila, 20)
ListBox1.List(a, 7) = Sheets("DEALS FIX").Cells(fila, 18)
ListBox1.List(a, 8) = Sheets("DEALS FIX").Cells(fila, 13)
ListBox1.List(a, 9) = Sheets("DEALS FIX").Cells(fila, 24)
ListBox1.List(a, 10) = fila 'this one adds the rownumber

Hice los ajustes aquí también:

Sheets("DEALS FIX").Select
fila = ListBox1.List(ListBox1.ListIndex, 10)
Range("A" & fila).Select

Y luego configure el list box con más columnas. Pero cuando corro el formulario, me filtra OK, pero cuando selecciono la fila en el listbox me bota este mensaje de error:

Run-time error '-2147024809 (80070057)'

" Could not get the list property. Invalid argument.

Me podrias ayudar por favor. Mil gracias!

Saludos

H o l a : Cargar un listbox con AddItem sólo admite hasta 10 columnas, es decir, desde la 0 hasta la 9. Te recomiendo que omitas alguna de tus columnas para que puedas utilizar AddItem; de lo contrario tendrías que utilizar RowSource o List, pero eso requiere de otro proceso.

Avísame por cuál te decides.

He estado revisando mi base de datos y la verdad si necesito que se muestren 15 columnas las cuales resumen la información más relevante. Espero me puedas ayudar.

Con mucho gusto te ayudo con todas tus peticiones.

Crea una nueva pregunta en Todoexpertos dentro del tema de microsoft excel. En el desarrollo de la pregunta escribe: "para Dante Amor". Ahí me describes con detalle lo que necesitas, cuáles columnas quieres cargar y cuál orden. Te anticipo que todo el filtro se tiene que enviar a una nueva hoja o una hoja temporal, entonces el listbox se debe cargar con la nueva hoja.

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas