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...

5 Responses

  1. Fernando says:

    Muy bueno el proyecto!!
    Espero sigamos contando con los avances del mismo

  2. CHRNOS says:

    Esta genial este aporte gracias por compartir esta plataforma de excel que es muy util, utilice tu método y modifique algunas cosas para adaptarlo a lo que necesitaba, solo tengo un problema y no se si sigas aun con este proyecto.

    El problema que tengo es en producto a mayoreo, quisiera saber si existe una formula para hacer que cuando se ingrese una cierta cantidad que esta en otra celda registre el precio de otra celda e la que están dadas como mayoreo.

    Espero puedas guiarme con esto y estaré al pendiente por si contesta.

  3. daniel torres says:

    necesito que imprima ticket… se puede??

    • Yeraldin Munera says:

      buenas noches, estoy adaptando tu programa para mi uno de venta y resulta que ocurre una falla: al registrar los productos no està sumando los totales. No sè si el error tenga que ver con incompatibilidad de las versiones de excel, ya que si descargo el prgrama en un pc con excel 2013 funciona pero en equipos con versiones diferentes no funiona. Podrìas por favor ayudarme con esto, no se de que manera solucionarlo muchas gracias

Leave a Reply

Your email address will not be published. Required fields are marked *