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