Cargar a un ListBox de 2 columnas datos de un rango de celdas discontinuas

Tengo el siguiente código en el que estoy trabajando con el fin de que al abrir el formulario de búsqueda en el listbox ya se presenten seleccionados los items que están en la planilla/hoja. He puesto algo en el código para que no muestre celdas vacías.

    With ListBox2
        .ColumnCount = 2
        .ColumnWidths = "20 pt; 50pt"
        On Error Resume Next
        ListBox2.Clear
        Set h2 = Sheets("SesionesEntrenamiento2")
        For i = 11 To h2.Range("K11:K25").Row
            If h2.Cells("K11:K25") <> "" Then
            n = ListBox2.ListCount
            ListBox2.AddItem
            ListBox2.list(n, 0) = h2.Cells(i, "I")
            ListBox2.list(n, 1) = h2.Cells(i, "K")
        End If
    Next
    End With
End Sub

Algo está mal en el mismo porque únicamente me sale el primer registro (código y ejercicio) a pesar de que puedo tener hasta 16. Los códigos están en la columna "I" y el nombre de ejercicios en la "K".

Además si le saco el On Error Resume Next me genera error 5... 

Dentro de la misma hoja tengo varias planillas que se van sucediendo de izq a der, y en el userform un combobox donde selecciono el nº de sesión que se corresponde con la planilla correspondiente, que al guardar los datos los carga a las planillas.

Me gustaria que además, fuese capaz de, según el nº de sesión que cargo en el combobox (1, 2, 3..) el listbox cargue los datos/items que pueda haber en dichas planillas, ¿cómo sería dicha estructura de código con un ejemplo de sesiones?

1 respuesta

Respuesta
1

Te anexo el código actualizado para cargar desde la fila 11 y hasta la ultima fila con datos de la columna "I"

Private Sub UserForm_Activate()
'Act.Por.Dante Amor
    With ListBox2
        .ColumnCount = 2
        .ColumnWidths = "50 pt; 50pt"
        .Clear
        Set h2 = Sheets("SesionesEntrenamiento2")
        For i = 11 To h2.Range("I" & Rows.Count).End(xlUp).Row
            If h2.Cells(i, "I") <> "" Then
                .AddItem h2.Cells(i, "I")
                .List(ListBox2.ListCount - 1, 1) = h2.Cells(i, "K")
            End If
        Next
    End With
End Sub

Esta parte no la entendí:

"

Dentro de la misma hoja tengo varias planillas que se van sucediendo de izq a der, y en el userform un combobox donde selecciono el nº de sesión que se corresponde con la planilla correspondiente, que al guardar los datos los carga a las planillas.

Me gustaria que además, fuese capaz de, según el nº de sesión que cargo en el combobox (1, 2, 3..) el listbox cargue los datos/items que pueda haber en dichas planillas, ¿cómo sería dicha estructura de código con un ejemplo de sesiones?

"

No sé a qué te refieres con "Dentro de la misma hoja tengo varias planillas", tendría que ver un ejemplo de cómo lo tienes, qué tienes en el combo, qué quieres cargar y en dónde lo quieres cargar.

Con mucho gusto te ayudo con todas tus peticiones.

Valora esta respuesta y crea una nueva pregunta en el tema de microsoft Excel. En el desarrollo de la pregunta escribe: "para Dante Amor". Ahí me describes con detalle lo que necesitas.

Sal u dos

¡Gracias!

Funciona bien! Se ven sólo los ejercicios que ya están en la planilla y no incluye las celdas vacías

Pero tiene un inconveniente, si hay algo más abajo de la celda "K25" también sale en el listBox. Para ser más explícito, trabajo con una lista de 16 ejercicios, van desde K11 a K25 pero más abajo de K25 tengo celdas con las que voy a trabajar y no quiero que salgan en el listbox. De I11 a I25 van los códigos de cada uno de los ejercicios. ¿Cómo lo puedo limitar?

Cambia esta línea

For i = 11 To h2.Range("I" & Rows.Count).End(xlUp).Row

Por esta

For i = 11 To 25

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas