Buscar datos Listbox y agregar datos a hoja excel

Tengo un problema que no puedo resolver. Tengo un listbox en un formulario, que simula una Factura de compra, que lo lleno según condición, también tengo una Hoja llamada Stock. El problema nace cuando, le doy el botón guardar, la macro debería buscar los nombres de los productos del listbox y según eso, aumentar la cantidad del producto en Stock. El listbox tiene dos columnas: Producto, Cantidad. La hoja stock tiene 4 columnas, A = Producto, B = Ingreso, C= Salida, y D = Saldo.

1 respuesta

Respuesta
1

H o l a.

Puedes poner ejemplos, cómo tienes los datos antes de actualizar, qué datos tienes en el listbox y cómo quedan los datos en la hoja después de actualizar. Si lo puedes hacer con imágenes, procura que se vean las filas y las columnas de excel.

S a l u d o s

Hola Dante, gracias por responder.

Ahi esta el listbox, con el boton ingresar voy ingresando los productos comprados.

esta es la hoja "Stock" donde debe incrementar las cantidades en la columna D... cuando no haya un producto, lo agrega al final.

Gracias Dante

Hola Dante:

Quería saber como va la macro. Saludos

H o l a:

Te anexo la macro

Private Sub CommandButton1_Click()
'Por.Dante Amor
    If ListBox1.ListCount = 0 Then
        MsgBox "No hay datos a guardar"
        Exit Sub
    End If
    '
    For i = 0 To ListBox1.ListCount - 1
        prod = ListBox1.List(i, 0)
        cant = ListBox1.List(i, 1)
        Set h = Sheets("Stock")
        Set b = h.Columns("A").Find(prod, lookat:=xlWhole)
        If Not b Is Nothing Then
            h.Cells(b.Row, "D") = h.Cells(b.Row, "D") + cant
        Else
            u = h.Range("A" & Rows.Count).End(xlUp).Row + 1
            h.Cells(u, "A") = prod
            h.Cells(u, "D") = cant
        End If
    Next
End Sub

Prueba y me comentas.

Hola Dante, estoy probando la macro y no funciona. Hice un cambio en:

Set b = h.Columns("A").Find(prod, lookat:=xlWhole)  por

Set b = Hoja3.Range("A3").End(xlDown)

Funciona, pero todo lo suma al ultimo producto, que en este caso es FÓSFOROS, si ingresas un producto nuevo, su cantidad lo ingresa también a Fósforos.

Pero esto que pusiste ya no está buscando le falta la instrucción .Find

Set b = Hoja3.Range("A3").End(xlDown)

La información que me diste, es que los datos están en la hoja "stock" en la columna A

Además no entiendo para qué le cambias a la macro, prueba la macro tal como te la envié y entonces me dices si la macro no funciona, ya que si le cambias no entiendo lo que estás haciendo.

Si quieres que busque en la hoja3 y delimitar el rango podría ser así:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    If ListBox1.ListCount = 0 Then
        MsgBox "No hay datos a guardar"
        Exit Sub
    End If
    '
    For i = 0 To ListBox1.ListCount - 1
        prod = ListBox1.List(i, 0)
        cant = ListBox1.List(i, 1)
        Set h = Hoja3
        u = h.Range("A" & Rows.Count).End(xlUp).Row
        Set b = h.Range("A3:A" & u).Find(prod, LookAt:=xlWhole)
        If Not b Is Nothing Then
            h.Cells(b.Row, "D") = h.Cells(b.Row, "D") + cant
        Else
            u = h.Range("A" & Rows.Count).End(xlUp).Row + 1
            h.Cells(u, "A") = prod
            h.Cells(u, "D") = cant
        End If
    Next
End Sub

Prueba la macro actualizada y me comentas, si necesitas algún cambia avísame para actualizarla nuevamente.

Tienes que cuidar en dónde haces cambio, en esta variable se estable el objeto hoja:

Set h = Hoja3

Y después tienes que hacer referencia al objeto h, si no haces referencia a esa hoja, entonces la macro no va a funcionar correctamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas