Formulario de punto de venta en Excel vba

El objetivo de este ejemplo que les comparto es comenzar un Sistema de Punto de venta en el que simulemos el Software que se usa en plazas comerciales, pero a un nivel básico.

Aclaración: éste ejemplo puede ser el principio de un gran proyecto, así que con toda confianza lo pueden reproducir y adecuar a sus proyector personales.

Cómo funciona

Tenemos una base de datos con un lista de productos donde especificamos el código, la descripción y el precio unitario de cada uno.

image

Figura 1. Tabla de productos.

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.

Desarrollé un formulario donde capturaremos el código de los productos y simularemos una venta en una tienda.

image

Figura 2. Formulario de punto de venta.

El código del producto lo capturaremos en el TextBox CÓDIGO y se nos pedirá la cantidad de artículos de dicho producto.

Cada producto que vayamos registrando se agregará al ListBox del formulario donde se agregará su descripción, la cantidad de artículos, el precio unitario y el total.

En la parte inferior habrá dos etiquetas donde visualizaremos la cantidad de artículos y el total de la compra.

image

Figura 3. Captura de productos en formulario de punto de venta.

Al dar click en el botón GUARDAR, los datos de la compra se darán de alta en la tabla VENTAS donde cada fila será cada uno de los productos y la columna CONSECTIVO nos servirá para hacer reportes y resúmenes por ID (CONSECUTIVO).

image

Figura 4. Tabla de ventas.

Código vba

Y para que hagan todas la variantes posibles, les paso el código utilizado en el ejemplo.

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.
'---------------------------------------------------------------------------------------
'
Option Explicit
'
Private Sub CommandButton1_Click()
'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(CInt(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(CInt(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()
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 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

:: Descargar Formulario de punto de venta.rar

You may also like...

2 Responses

  1. Oscar Menacho says:

    Estimado Sergio,
    Como siempre, claro, sencillo y directo al grano . . . excelente
    Permíteme sugerir que en lugar del textBox1 para ingreso del código sería mejor un ComboBox, de manera que el usuario no tenga que recordar todos los códigos de productos cuando haga el ingreso manualmente y tenga la lista disponible ingresando las primeras letras del articulo.
    Además una consulta: cómo estan relacionados la lectora de códigos de barra con el código VBA de este ejemplo? es decir, cómo se relaciona lo que lee la lectora con el textbox1?

    slds

  2. Oscar Menacho says:

    Estimado Sergio,
    Como siempre, claro, sencillo y directo al grano . . . excelente
    Permíteme sugerir que en lugar del textBox1 para ingreso del código sería mejor un ComboBox, de manera que el usuario no tenga que recordar todos los códigos de productos cuando haga el ingreso manualmente y tenga la lista disponible ingresando las primeras letras del articulo.
    Además una consulta: cómo estan relacionados la lectora de códigos de barra con el código VBA de este ejemplo? es decir, cómo se relaciona lo que lee la lectora con el textbox1?

    slds

Leave a Reply

Your email address will not be published.

%d bloggers like this: