Tengo un UserForm con un TextBox que trae datos a otros TextBox pero cuando debería terminar repite nuevamente los datos

Tengo un pequeño sistema de Facturación que he creado poco a poco porque no soy experta en excel y tengo un problema. Me pidieron un UserForm donde en el TextBox principal uno coloque el número de factura e inmediatamente traiga los datos de la factura así como también los productos y cantidades adquiridas. Logré que me traiga los datos de la factura pero a la hora de que me coloque los productos y cantidades tengo una cadena sin fin. En un TextBox me coloca el código del producto y en otro la cantidad pero si ya no hay más productos adquiridos en vez de dejar los TextBox vacíos repite los productos hasta que ya no queden TextBox. He intentando varias cosas pero no me funcionan. Espero me puedan ayudar. De antemano, muchas gracias. Agrego la programación:

Private Sub TextBox1_Change()

On Error Resume Next
Set busco = Sheets("BASE DE DATOS").Range("C:C").Find(Trim(TextBox1.Value), LookIn:=xlValues, lookat:=xlWhole)

If Not busco Is Nothing Then
firstaddress = busco.Address
TextBox2.Value = busco.Offset(0, 0)
TextBox3.Value = busco.Offset(0, 2)
TextBox4.Value = busco.Offset(0, 1)
TextBox5.Value = busco.Offset(0, 9)
TextBox6.Value = busco.Offset(0, 3)
TextBox7.Value = busco.Offset(0, 4)
busco.Value = TextBox1.Value
Set busco = Range("C:C").FindNext(busco)
TextBox8.Value = busco.Offset(0, 3)
TextBox9.Value = busco.Offset(0, 4)
Set busco = Range("C:C").FindNext(busco)
TextBox10.Value = busco.Offset(0, 3)
TextBox11.Value = busco.Offset(0, 4)
Set busco = Range("C:C").FindNext(busco)
TextBox12.Value = busco.Offset(0, 3)
TextBox13.Value = busco.Offset(0, 4)
Set busco = Range("C:C").FindNext(busco)
TextBox14.Value = busco.Offset(0, 3)
TextBox15.Value = busco.Offset(0, 4)
Set busco = Range("C:C").FindNext(busco)
TextBox16.Value = busco.Offset(0, 3)
TextBox17.Value = busco.Offset(0, 4)
If busco.Offset(0, 12) = "ANULADA" Then
MsgBox ("Factura ya está Anulada!"), vbCritical, "Resultado"
TextBox1 = Empty
Exit Sub
End If
TextBox2 = Format(TextBox2, "00000")
TextBox5 = Format(TextBox5, "#,000.00")
End If

End Sub

1 respuesta

Respuesta
2

En estos casos lo recomendable es poner un listbox. Con lo que tienes solamente puedes poner hasta 5 ó 6 productos, ¿y si la factura tiene más de 6 productos?, entonces tendrías que agregar más textbox. Con el listbox puedes agregar varios productos.

Utiliza lo siguiente:

Private Sub TextBox1_Change()
'Act Por Dante Amor
    Set h = Sheets("BASE DE DATOS")
    Set r = h.Columns("C")
    Set b = r.Find(Trim(TextBox1.Value), LookIn:=xlValues, LookAt:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        If b.Offset(0, 12) = "ANULADA" Then
            MsgBox ("Factura ya está Anulada!"), vbCritical, "Resultado"
            TextBox1 = Empty
            Exit Sub
        End If
        TextBox2.Value = b.Offset(0, 0)
        TextBox3.Value = b.Offset(0, 2)
        TextBox4.Value = b.Offset(0, 1)
        TextBox5.Value = b.Offset(0, 9)
        '
        ListBox1. Clear
        Do
            'detalle
            ListBox1.AddItem b.Offset(0, 3)
            ListBox1. List(ListBox1.ListCount - 1, 1) = b.Offset(0, 4)
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
End Sub

Nota: Cuando crees el listbox, en propiedades en  ColumnCount pon el número 2, para que tenga 2 columnas 1 para los productos y otra para las cantidades.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas