Hacer referencia a la columna 2 de un listbox para pasar todos los items

Tengo 2 listbox en los cuales selecciono varios items desde el primero al segundo. El segundo listbox consta de 2 columnas y tengo un botón que tiene la finalidad de pasar todo el listado del segundo listbox a un rango de celdas. Uso el siguiente código:

Private Sub CommandButton14_Click()
n = 0
    For i = ListBox2.ListCount - 1 To 0 Step -1
        If n = 16 Then
            MsgBox "Atención, se sobrepasa el número máximo de ejercicios para la ficha", vbExclamation
            'ListBox2(ListBox2.ListIndex) = False
            Exit Sub
        End If
        If ListBox2.List(i) Then
            Set SE2 = Sheets("SesionesEntrenamiento2")
            SE2.Range("K11:K26") = ListBox2.List
            n = n + 1
        End If
    Next
Unload Me
End Sub

El problema es que me transfiere al rango "K11-K26" los valores de la columna 1 del listbox y yo quiero que pase los valores de la columna 2, cada uno de los item a cada una de las celdas, pero tras probar de varias formas no lo he conseguido.

1 respuesta

Respuesta
1

El código para pasar la columna 2 a las celdas es este:

    Set h2 = Sheets("SesionesEntrenamiento2")
    j = 11
    For i = ListBox2.ListCount - 1 To 0 Step -1
        h2.Range("K" & j) = ListBox2.List(i, 1)
        j = j + 1
    Next

Según tu código, el contador va en reversa, empieza en el último valor. Entonces entiendo que el último valor del listbox vfa en la K11, el penúltimo en la K12, y así sucesivamente hasta llegar al primer valor. Si no es así, entonces el código sería así:

    Set h2 = Sheets("SesionesEntrenamiento2")
    j = 11
    For i = 0 To ListBox2.ListCount - 1
        h2.Range("K" & j) = ListBox2.List(i, 1)
        j = j + 1
    Next

Lo que no entendí, es si en el listbox2, tienes más de 16 registros, qué debe hacer, pasar únicamente 16 y cancelar el resto, o enviar un mensaje avisando que son más de 16?

Te anexo el código completo, considerando que si son más de 16 se cancele todo.

Private Sub CommandButton14_Click()
'Act.Por.Dante Amor
    If ListBox2.ListCount = 0 Then
        MsgBox "No hay datos a pasar", vbExclamation
        Exit Sub
    End If
    '
    If ListBox2.ListCount > 16 Then
        MsgBox "Atención, se sobrepasa el número máximo de ejercicios para la ficha", vbExclamation
        Exit Sub
    End If
    '
    Set h2 = Sheets("SesionesEntrenamiento2")
    j = 11
    For i = 0 To ListBox2.ListCount - 1
        h2.Range("K" & j) = ListBox2.List(i, 1)
        j = j + 1
    Next
    Unload Me
End Sub

O también puedes poner un mensaje, solicitando si continúa para poner solamente 16 o cancelar todo.

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

Hola Dante

El codigo final que me has dejado es exactamente lo que queria y funciona perfectamente

Habia adaptado un codigo que encontre y a pesar de no saber interpretarlo del todo me funcionaba con la columna 1.

Te agradezco la amabilidad para ayudarme como otras tantas veces.

Una duda, en caso de querer que los item del listbox, x dicho orden, se pasen a celdas discontinuas o concretas en lugar de un unico rango como el caso anterior que modificacion tendria que hacer?

Gracias y feliz año nuevo

Algo como esto:

Set h2 = Sheets("SesionesEntrenamiento2")   
h2.Range("K15") = ListBox2.List(0, 1)
h2.Range("K20") = ListBox2.List(1, 1)
h2.Range("L18") = ListBox2.List(2, 1)
h2.Range("M13") = ListBox2.List(3, 1)
'etc

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas