Activar celda de ítem seleccionado en listbox (PARTE2)

Activar la celda del ítem seleccionado en listbox (Consulta parte1)

Hola expertos estoy teniendo problemas para activar la celda luego de seleccionar el ítem en un listbox. Esta listbox tiene 7 columnas. Estoy usando este código. Estoy teniendo el error 1004.

Private Sub ListBox1_Click()
'
'ACTIVA LA CELDA DEL PRODUCTO SELECCIONADO EN LA LISTA
'
ThisWorkbook.Sheets("LOGISTICA2").Select
valor = ListBox1.Value
fila = WorksheetFunction.Match(valor, Range("B:B"), 0)
Range("B:B").Rows(fila).Select
Exit Sub
End Sub
Private Sub UserForm_Initialize()
'
'
numerodedatos = Hoja12.Range("B" & Rows.Count).End(xlUp).Row 'CUENTA DENTRO DE CUANTOS DATOS SE VA A BUSCAR
Hoja12.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
X = 0
For fila = 5 To numerodedatos 'EL N° DE FILA DICE DONDE COMIENZAN LOS DATOS DE LA HOJA
COL1 = Hoja12.Cells(fila, 2).Value 'DEFINE EN QUE COLUMNA BUSCAR
Me.ListBox1.AddItem
Me.ListBox1.List(X, 0) = Hoja12.Cells(fila, 2).Value 'AGREGAR LOS ITEMS DE LA COLUMNA D DE LAS COINCIDENCIAS EN LA COLUMNA18
Me.ListBox1.List(X, 1) = Hoja12.Cells(fila, 3).Value
Me.ListBox1.List(X, 2) = Hoja12.Cells(fila, 6).Value
Me.ListBox1.List(X, 3) = Hoja12.Cells(fila, 7).Value
Me.ListBox1.List(X, 4) = Hoja12.Cells(fila, 10).Value
Me.ListBox1.List(X, 5) = Hoja12.Cells(fila, 11).Value
Me.ListBox1.List(X, 6) = Hoja12.Cells(fila, 12).Value
X = X + 1
Next
End Sub

1 Respuesta

Respuesta
1

Olvídate de seleccionar la celda en la hoja, eso no es una buena practica.

Lo más conveniente es encontrar el dato y tener en una variable el objeto del dato. Te explico

Private Sub ListBox1_Click()
    '
    'activa la celda del producto seleccionado en la lista
    '
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("LOGISTICA2")
    valor = ListBox1.Value
    Set b = h1.Columns("B").Find(valor, LookIn:=xlValue, lookat:=xlWhole)
    If Not b Is Nothing Then
        fila = b.Row
    End If
    '
End Sub

En el objeto l1 almacenamos el libro

En el objeto h1 almacenamos la hoja

En el objeto b almacenas el resultado de la búsqueda

Luego entonces, en el objeto b tenemos toda la información de la celda, puedes obtener la fila con b.row

la columna con b.column

El color con b.interior.colorindex

el dato con b.value

la dirección con b.address

etc, etc.

Entonces en b tienes todo lo relacionado a la celda. No es necesario que selecciones la hoja, ni la celda, solamente utiliza b para lo que necesites.

Explícame qué necesitas y te ayudo a resolverlo, solamente utilizando el objeto b


Me faltó una "s" en el parámetro lookin, debe ser así:

Private Sub ListBox1_Click()
    '
    'activa la celda del producto seleccionado en la lista
    '
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("LOGISTICA2")
    valor = ListBox1.Value
    Set b = h1.Columns("B").Find(valor, LookIn:=xlValues, lookat:=xlWhole)
    If Not b Is Nothing Then
        fila = b.Row
    End If
    '
End Sub

Te entiendo Dante, pero el tema es que me resulta útil dejar la celda seleccionada porque luego de seleccionar el item en la lista , se abre otro formulario al presionar un botón, y en ese formulario se completan unos textboxs cuyos datos se registran en el libro en esa misma fila seleccionada pero en columnas distintas (usando offset).

Ademas tengo un problema de filtro de datos, se supone que el código hace que se agreguen items a la listbox solo si existen datos en la columna b". Pero en cada registro de datos los items se van corriendo una fila hacia abajo, y los nuevos registros no se filtran (no deben verse en la listbox si no tienen datos en la columna b). En la imagen te marco con rojo las filas que no deberían aparecer en la listbox.

Además los datos en la columna b muchas veces se pueden repetir.

Todo se puede. Puedes abrir un form y de ahí pasar el valor de una variable a otro form.

Pero si para ti es más sencillo seleccionar la celda, entonces quedaría así:

Private Sub ListBox1_Click()
    '
    'activa la celda del producto seleccionado en la lista
    '
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("LOGISTICA2")
    h1.select
    valor = ListBox1.Value
    Set b = h1.Columns("B").Find(valor, LookIn:=xlValues, lookat:=xlWhole)
    If Not b Is Nothing Then
        fila = b.Row
        b.select
    End If
    '
End Sub

Crea otra pregunta para tu problema del filtro en el listbox. Te recomiendo que cada que crees una pregunta, pon todo el código, y utiliza imágenes de tu hoja para explicar el problema.


No olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas