UserForm ListBox solo cargue la cantidad de filas especificadas en un TextBox

Necesito que cuando coloque una cantidad en un TextBox solo muestre esa cantidad de filas en un Listbox. El Listbox solo posee una columna. Esos datos que quedan en el ListBox necesito que al darle a un botón se pasen a una hoja y se eliminen de la hoja original. Las celdas vacías luego de eliminar los datos necesito sean rellenadas con los datos que quedaron o sea, que suban hasta la celda que no esté vacía. Espero me haya explicado bien y que me puedan ayudar.

Respuesta
1

¿Pero el listbox cómo fue llenado?

Dónde están los datos, en cuál hoja, ¿en cuál columna?

Si en el listbox hay 8 datos, cuáles 8 datos de la columna se deben eliminar, los primeros 8, los de en medio, los últimos 8.

Puedes explicar todo lo que necesitas con imágenes de tu listbox y de la hoja, procura que se vean las filas y las columnas de excel.

Gracias por responder. El ListBox1 se llena a partir de un ComboBox1 que al escoger el código trae la descripción (TextBox1) del producto y llena el ListBox1 con los Seriales que quedan disponibles. Eso lo hace perfectamente pero me quedo estancada cuando coloco en el TextBox2 la cantidad de seriales a los que les voy a dar salida, que serían los primeros.

Los Seriales se encuentran en la hoja "SERIALES":

Uso un UserForm para que en la hoja "NOTA DE DESPACHO" se cargue la información:

Como puede ver cuando coloco 2 siguen apareciendo los 4 y lo que necesito es que el ListBox1 muestre los dos primeros, si coloco 3, los tres primeros y así. Cuando le de al botón "AGREGAR A NOTA" borre la cantidad indicada de los primeros de la hoja "SERIALES", suban los seriales que quedan debajo y finalmente copie la información en la hoja "NOTA DE DESPACHO":

Donde dice Código en la columna B19 se copie el código del UserForm. La Descripción en la columna D19 y los Seriales queden debajo en las filas siguientes. La cantidad en la K19.

Si debo agregar otro producto en la misma nota de despacho que se coloque la información desde la fila que esté vacía tomando en cuenta la columna D porque los Seriales van a dejar celdas vacías en la columna B y K.

Espero se entienda. Gracias.

Te anexo los códigos.

Para cuando capturas en el TextBox2 la cantidad de seriales a los que les voy a dar salida:

Private Sub TextBox2_Change()
'Mostrar el número de series según el número capturado
    '
    'VALIDACIONES
    registros = Val(TextBox2.Value)
    If registros = "" Or registros = 0 Then
        Exit Sub
    End If
    If ListBox1.ListCount = 0 Then
        MsgBox "No hay series para agregar"
        Exit Sub
    End If
    If ListBox1.ListCount < registros Then
        MsgBox "No hay suficientes series"
        Exit Sub
    End If
    '
    'BORRA SERIES DEL LISTBOX
    For i = ListBox1.ListCount - 1 To 0 Step -1
        If ListBox1.ListCount = registros Then Exit For
        ListBox1.RemoveItem i
    Next
End Sub

Para cuando presionas el botón "Agregar a nota":

'
Private Sub CommandButton2_Click()
'Agregar a nota de despacho
    '
    Set h2 = Sheets("SERIALES")
    Set h3 = Sheets("NOTA DE DESPACHO")
    '
    'VALIDACIONES
    If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then
        MsgBox "Debes seleccionar un código"
        ComboBox1.SetFocus
        Exit Sub
    End If
    If ListBox1.ListCount = 0 Then
        MsgBox "No hay series en el listbox"
        ComboBox1.SetFocus
        Exit Sub
    End If
    '
    'ELIMINA SERIES DE LA HOJA SERIES
    Set b = h2.Rows(5).Find(ComboBox1.Value, lookat:=xlWhole)
    If Not b Is Nothing Then
        col = b.Column
        u2 = h2.Cells(Rows.Count, col).End(xlUp).Row
        borrar = ListBox1.ListCount
        For i = 1 To borrar
            h2.Cells(6, col).Delete Shift:=xlUp
        Next
    End If
    '
    'LLENA NOTA DE DESPACHO
    u3 = 19
    Do While h3.Cells(u3, "D") <> ""
        u3 = u3 + 1
    Loop
    h3.Cells(u3, "B").Value = ComboBox1.Value
    h3.Cells(u3, "D").Value = TextBox1.Value
    h3.Cells(u3, "K").Value = TextBox2.Value
    '
    For i = 0 To ListBox1.ListCount - 1
        u3 = u3 + 1
        h3.Cells(u3, "D").Value = ListBox1.List(i)
    Next
    '
    ComboBox1.Value = ""
    TextBox2.Value = ""
    ListBox1.Clear
    MsgBox "Datos pasados a la la Nota de Despacho"
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 

¡Gracias! Excelente. Funcionó a la perfección. Muy agradecida. Saludos.

Buenos días, necesito ayuda nuevamente con este mismo caso. Ahora me están solicitando que no sea colocando las cantidades para que tome los primeros seriales, ahora requieren que se puedan seleccionar los seriales que se necesitan en el ListBox y se coloque automáticamente la cantidad seleccionada en el TextBox (donde se colocaba la cantidad anteriormente) y cuando se le de al botón "Agregar Nota" se copien los seriales seleccionados y la cantidad tal como venía funcionando, e igual que se eliminen de la hoja seriales desplazando hacia arriba los seriales que queden debajo de las celdas vacías. Espero me haya explicado bien. 

Si necesita que realice otra pregunta por favor me indica y con gusto lo hago. Gracias nuevamente.

Crea una nueva pregunta y la explicas con imágenes y explicando los ejemplos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas