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
Anexos
:: Descarga Formulario de punto de venta 2.rar
Muy bueno el proyecto!!
Espero sigamos contando con los avances del mismo
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.
necesito que imprima ticket… se puede??
Hola, no me suma bien, me pueden ayudar
https://uploads.disquscdn.com/images/4b8c32b9131e72240fe99f86df927603ea198bcc3260248e88524ab71579a0a4.jpg
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