Actualización 1: Formulario de punto de venta en Excel vba probado con lector de código de barras

Primera versión: Formulario de punto de venta en Excel vba.

En otro artículo publiqué la primera versión de un archivo de Excel para comenzar a armar un Punto de venta para tiendas.

En esta primera actualización incluyo dos nuevas características que harán del archivo una opción más viable para que te animes a hacerlo más robusto.

  1. Los códigos de los productos se pueden capturar mediante lector de código de barras o de manera manual.
  2. Incluyo un botón para eliminar un producto que se haya capturado por error.

image

Figura 1. Formulario de Punto de venta en Excel para usar con lector de código de barras.

Ver video Punto de venta en Excel vba probado con lector de código de barras 

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Lector de código de barras

Como sabemos los lectores de código de barras son un dispositivo de entrada similar al teclado. Al pasar el lector sobre un código de barras nos devolverá un texto que se capturará en el formulario, por lo que en nuestra hoja de PRODUCTOS deberán estar dados de alta los códigos para que el formulario nos solicite la cantidad de artículos del producto escaneado.

Eliminar productos

Se añade a la derecha del formulario un botón con la leyenda “Eliminar producto”. Si por error capturamos o escaneamos un producto, sólo deberemos elegirlo en la lista y presionar el botón.

Al eliminar el producto se descontará de los totales de la parte inferior llamados ARTÍCULOS y TOTAL.

Código vba

Ubicación: frmVenta (formulario).

'---------------------------------------------------------------------------------------
' Module    : frmVenta
' Author    : MVP Excel, Sergio Alejandro Campos
' Date      : 21/11/2014
' Purpose   : Formulario tipo punto de venta para capturar productos.
'---------------------------------------------------------------------------------------
' Updates   : 18/12/2014. El texto del código del producto se convierte a Double para aceptar códigos largos.
'           : 18/12/2014. Se añade botón para eliminar un producto capturado por error.
'
Option Explicit
'
Private Sub CommandButton1_Click()
'Registrar producto y capturar cantidad
'Declaramos variables
Dim strDescripcion As String
Dim intCantidad As Double
Dim doublePUnitario As Double
Dim intTotal As Double
'
'En caso de error
On Error GoTo ErrorHandler
'
With Application.WorksheetFunction
    '
    'Usamos BUSCARV para encontrar el detalle del producto
    '
    strDescripcion = .VLookup(CDbl(Me.TextBox1.Value), PRODUCTOS.Range("A:C"), 2, 0)
    '
    intCantidad = InputBox(strDescripcion & vbNewLine & vbNewLine & "Ingresa la cantidad.", "Cantidad", 1)
    '
    If intCantidad = 0 Then GoTo ErrorHandler
    '
    'Llenamos el ListBox
    '...CÓDIGO
    Me.ListBox1.AddItem Me.TextBox1.Value
    '
    '...DESCRIPCIÓN
    ListBox1.List(ListBox1.ListCount - 1, 1) = strDescripcion
    '
    '...CANTIDAD
    ListBox1.List(ListBox1.ListCount - 1, 2) = .Text(intCantidad, "#,##0")
    '
    '...P.UNITARIO
    doublePUnitario = .VLookup(CDbl(Me.TextBox1.Value), PRODUCTOS.Range("A:C"), 3, 0)
    ListBox1.List(ListBox1.ListCount - 1, 3) = .Text(doublePUnitario, "$#,##0.00;-$#,##0.00")
    '
    '...TOTAL
    intTotal = doublePUnitario * intCantidad
    ListBox1.List(ListBox1.ListCount - 1, 4) = .Text(intTotal, "$#,##0.00;-$#,##0.00")
    '
    '...ETIQUETAS
    Me.lblProductos = .Text(CInt(Me.lblProductos) + CInt(intCantidad), "#,##0")
    Me.lblTotal = .Text(CDbl(Me.lblTotal) + CDbl(intTotal), "$#,##0.00;-$#,##0.00")
    '
    Me.TextBox1.Value = ""
    Me.TextBox1.SetFocus
    '
End With
'
Exit Sub
'
ErrorHandler:
'
MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, "EXCELeINFO"
'
Me.TextBox1.Value = ""
Me.TextBox1.SetFocus
'
End Sub
'
Private Sub CommandButton4_Click()
Unload Me
End Sub
'
Private Sub CommandButton5_Click()
'Guardar compra en tabla
Dim i As Variant
Dim j As Variant
Dim TransRowRng As Range
Dim NewRow As Integer
'
With VENTAS
    '
    For i = Me.ListBox1.ListCount To 1 Step -1
        '
        Set TransRowRng = ThisWorkbook.Worksheets("VENTAS").Cells(1, 1).CurrentRegion
        NewRow = TransRowRng.Rows.Count + 1
        .Cells(NewRow, 1).Value = Date
        .Cells(NewRow, 2).Value = Me.txtConsec.Value
        '
        For j = 0 To 4
            '
            .Cells(NewRow, j + 3).Value = Me.ListBox1.List(Me.ListBox1.ListCount - i, j)
            '
        Next j
        '
    Next i
    '
End With
'
MsgBox "Registros guardados con éxito.", vbInformation, "EXCELeINFO"
'
Unload Me
'
End Sub


Private Sub CommandButton6_Click()
'Eliminar producto capturado erroneamente.
'
'Declaramos variables
Dim Cuenta As Integer
Dim Numero As Integer
Dim j As Integer
Dim i As Integer
Dim strNombreItem As String
Dim CantidadSeleccionado As String
Dim TotalSeleccionado As Double

'
Cuenta = Me.ListBox1.ListCount
Numero = 0
'
'Validamos que haya un elemento seleccionado.
For j = 0 To Cuenta - 1
    If Me.ListBox1.Selected(j) = True Then
        Numero = Numero + 1
    End If
Next j
'
If Numero <> 0 Then
    '
    'La hoja seleccionada se pasará al ListBox de hojas visibles.
    For i = 0 To Cuenta - 1
        If Me.ListBox1.Selected(i) = True Then
            strNombreItem = Me.ListBox1.List(i)
            CantidadSeleccionado = ListBox1.List(i, 2)
            TotalSeleccionado = ListBox1.List(i, 4)
            Me.ListBox1.RemoveItem i
            Me.lblProductos.Caption = _
            WorksheetFunction.Text(Me.lblProductos.Caption - CantidadSeleccionado, "#,##0")
            Me.lblTotal.Caption = _
            WorksheetFunction.Text(Me.lblTotal.Caption - TotalSeleccionado, "$#,##0.00;-$#,##0.00")
        End If
    Next i
    '
End If
'
End Sub

'
Private Sub UserForm_Initialize()
Dim intConsecutivo As String
'
Me.ListBox1.ColumnCount = 5
Me.ListBox1.ColumnWidths = "70 pt; 150 pt; 55 pt; 60 pt; 60 pt"
Me.txtFecha.Value = Date
'
intConsecutivo = VENTAS.Range("I1").Value
'
If intConsecutivo = "CONSECUTIVO" Then
    '
    Me.txtConsec = 1
    '
Else
    '
    Me.txtConsec = intConsecutivo + 1
    '
End If
End Sub

Anexos

:: Descarga Formulario de punto de venta 2.rar

You may also like...