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.
-
Los códigos de los productos se pueden capturar mediante lector de código de barras o de manera manual.
-
Incluyo un botón para eliminar un producto que se haya capturado por error.
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