Está en la página 1de 6

Trabajo Final Programación I

El presente trabajo final, cuya puntuación se aplicará a la calificación final del curso, consiste en crear un punto de venta
simple con Microsoft Excel. Para esto, deberá utilizar los archivos de Excel enviados por su profesor y realizar los pasos
que se le indican a continuación.

1. Creación de hojas
En el archivo de Excel con macros cuyo nombre es la matrícula del alumno, que en delante se referenciará como
MiniPV, se crearán seis hojas: PuntoDeVenta, Factura, Inventario, Ventas, VentasDetalle y
DatosGenerales.

Borrar la hoja Hoja1.

2. Inventario de productos
Del archivo PROFECO.xlsx, copiar el contenido de la hoja Hoja1 a la hoja Inventario de MiniPV.

Agregar una columna antes de la columna B. Asignar el valor CODIGO a B1.

Ingresar la fórmula siguiente en B2:

="75031812"&TEXTO(C2, "00000")&"0"

Copiar el contenido de B2 y pegarlo desde B3 hasta B838.

Copiar el contenido de la columna B y pegarlo como valores sobre ella misma.

Borrar la columna C.

3. Registro de ventas
En la hoja Ventas, ingresar las etiquetas siguientes a partir de la celda A1:

FOLIO FECHA MONTO_SIVA MONTO_CIVA

Crear una tabla cuyo rango inicial es $A$1:$D$2, dándole el nombre de tablaVentas.

Crear un rango que posea el nombre ListaFolios, cuyo valor sea tablaVentas[FOLIO].

4. Registro del detalle de la venta


En la hoja VentasDetalle, ingresar las etiquetas siguientes a partir de la celda A1:

FOLIO CODIGO CANTIDAD PRECIO_UNITARIO

Crear una tabla cuyo rango inicial es $A$1:$D$2, dándole el nombre de tablaVentasDetalle.

5. Registro de datos generales


En la hoja DatosGenerales, ingresar los valores siguientes en las celdas señaladas:

Celda Valor
A1 Nombre del negocio
B1 Domicilio del negocio

Minipunto de Venta Página 1


Trabajo Final Programación I
C1 RFC del negocio

Los datos del negocio deberán ser únicos por cada alumno. Si dos o más alumnos utilizan algún valor igual, se
considerará como copiado y no será tomando en cuenta.

6. Formulario del punto de venta


En la hoja PuntoDeVenta, diseñar la interfaz del punto de venta similar a la mostrada a continuación:

A. Realizar los pasos siguientes:


B. En la celda C4, aplicar la validación de datos con la definición de una lista, cuyo origen es el rango
=Inventario!$A$2:$A$838.
C. En las celdas B6, B7 y B8 utilizar la función BUSCARV, cuyo primer argumento será el código seleccionado en la
celda C4, el siguiente es el rango de búsqueda Inventario!$A$2:$J$838, a continuación se indica la posición
del campo del cual se extraerá el valor deseado (Artículo: 5; Marca: 6, y Presentación: 7) y finaliza con el
valor FALSE.
D. En F14 agregar la fórmula mostrada a continuación:
=+SUMA(tablaPuntoDeVenta[TOTAL])
E. La celda F15 deberá contener la fórmula
=F14*0.16
F. La celda F16 tendrá la fórmula
=F14+F15

Para agregar los botones mostrados en la interfaz, ingresar al menú Desarrollador > Controles > Insertar, y arrastrar un
control de formulario de tipo botón.

Minipunto de Venta Página 2


Trabajo Final Programación I

7. Factura de venta
En la hoja Factura, aplicar un diseño similar al mostrado a continuación:

Realizar las tareas siguientes:

A. El contenido de las celdas B4, B5 y B6 vincularlo con las celdas A1, A2 y A3, respectivamente, de la hoja
DatosGenerales.
B. Configurar la celda C1 para validar con una lista, cuya fuente sea el rango ListaFolios.
C. Crear una tabla cuyo rango inicial sea $B$13:$F$14, asignándole el nombre tablaFactura.
D. Ingresar en la celda F17 la fórmula siguiente:
=+SUMA(tablaFactura[TOTAL])
E. Ingresar en la celda F18 la fórmula siguiente:
=F17*$E$18
F. Ingresar en la celda F19 la fórmula siguiente:
=F17+F18

8. Macros – Preparar los elementos globales


Abrir el editor de Visual Basic y crear un módulo. Como primera línea agregar lo siguiente:
Option Explicit
Dim tabla As ListObject

9. Macros – Inicializando la venta


Dentro del módulo creando en el paso anterior, definir una subrutina con el nombre inicializar, cuyo bloque de
código es el siguiente:

Minipunto de Venta Página 3


Trabajo Final Programación I
Sub inicializar()
Set tabla = Worksheets("PuntoDeVenta").ListObjects("tablaPuntoDeVenta")
If Not tabla.DataBodyRange Is Nothing Then
tabla.DataBodyRange.Delete
End If
End Sub

La subrutina anterior será invocada al momento en que se pulsa el botón Nueva venta, ubicado en la hoja
PuntoDeVenta, por lo que habrá que asociarla con éste.

10. Macros – Agregando artículos a la venta


En el modulo usado hasta el momento, crear una subrutina con el nombre AgregarArticulo, cuya definición se
muestra en seguida:

Sub AgregarArticulo()
Dim nuevoRenglon As ListRow
Set nuevoRenglon = tabla.ListRows.Add

nuevoRenglon.Range(1) = Range("C4")
nuevoRenglon.Range(2) = Range("C6") & " " & Range("C7") & Chr(10) & Range("C8")
nuevoRenglon.Range(3) = 1
nuevoRenglon.Range(4) = WorksheetFunction.VLookup(Range("C4"), Range("Inventario"),
10, 0)
nuevoRenglon.Range(5).Formula = "=" &
nuevoRenglon.Range(3).AddressLocal(RowAbsolute:=False, ColumnAbsolute:=False) & "*" &
nuevoRenglon.Range(4).AddressLocal(RowAbsolute:=False, ColumnAbsolute:=False)

Call FormateoArticulo(nuevoRenglon)
End Sub

Esta macro deberá asociarse con el botón Agregar, que se encuentra definido dentro de la hoja PuntoDeVenta.

11. Macros – Formatear datos del artículo agregado


Insertar la subrutina FormateoArticulo, cuyo bloque de código es el siguiente:
Sub FormateoArticulo(renglon As ListRow)
renglon.Range().VerticalAlignment = xlVAlignTop
renglon.Range().Font.Size = 11
renglon.Range(2).Characters(InStr(1, renglon.Range(2).Value, Range("C8").Value),
Len(Range("C8").Value)).Font.Size = 8
renglon.Range(2).HorizontalAlignment = xlHAlignLeft
renglon.Range(3).NumberFormat = "#,##0.00"
renglon.Range(4).NumberFormat = "$##,##0.00"
renglon.Range(5).NumberFormat = "$##,##0.00"
End Sub

Esta subrutina es invocada dentro del procedimiento AgregarArticulo.

12. Macros – Borrar artículo de la venta


Crear una subrutina con el nombre BorrarArticulo, tal como se muestra a continuación:

Minipunto de Venta Página 4


Trabajo Final Programación I
Sub BorrarArticulo()
If Not tabla.DataBodyRange Is Nothing Then
Dim ultRenglon As Long
Dim priRenglon As Long
priRenglon = tabla.DataBodyRange(1).Row
ultRenglon = tabla.DataBodyRange(1).End(xlDown).Row

If (ActiveCell.Row >= priRenglon And ActiveCell.Row <= ultRenglon) Then


tabla.ListRows((ActiveCell.Row - priRenglon) + 1).Delete
End If
End If
End Sub

Esta macro deberá asociarse con el botón Borrar colocado en la hoja PuntoDeVenta.

13. Macros – Cerrar venta


El botón Cerrar venta deberá pulsarse cuando se desea finalizar la venta, siendo necesario asignarle una macro para que
lleve a cabo las tareas de registro de datos y preparación de la interfaz de usuario para una nueva venta. Dicha macro es
la mostrada a continuación:
Sub CerrarVenta()
If Not tabla.DataBodyRange Is Nothing Then
Dim tablaVenta As ListObject
Dim tablaVentaDetalle As ListObject
Dim folio As Long 'Folio de la venta
Dim fecha As Date 'Fecha de la venta
Dim venta As ListRow 'Registro de la venta
Dim detalle As ListRow 'Registro del detalle de la venta
Dim pdv As ListRow 'Artículo vendido desde el punto de venta

Set tablaVenta = Worksheets("Ventas").ListObjects("tablaVentas")


Set tablaVentaDetalle =
Worksheets("VentasDetalle").ListObjects("tablaVentasDetalle")

folio = WorksheetFunction.Max(tablaVenta.ListColumns(1).Range) + 1
fecha = Now

Set venta = tablaVenta.ListRows.Add


venta.Range(1) = folio
venta.Range(2) = fecha
Dim ventaTotal As Double
ventaTotal = 0
For Each pdv In tabla.ListRows
Set detalle = tablaVentaDetalle.ListRows.Add
detalle.Range(1) = folio
detalle.Range(2) = pdv.Range(1)
detalle.Range(3) = pdv.Range(3)
detalle.Range(4) = pdv.Range(4)
ventaTotal = ventaTotal + (pdv.Range(3) * pdv.Range(4))
Next pdv
venta.Range(3) = ventaTotal

Minipunto de Venta Página 5


Trabajo Final Programación I
venta.Range(4) = ventaTotal * 1.16
Call inicializar
End If
End Sub

14. Macros – Recuperar venta para factura


Cuando se selecciona un folio de venta en la lista mostrada en la parte superior de la hoja Factura, Excel deberá traer
los datos de la venta y mostrarlos en el formato de reporte.

Para agregar una macro que este pendiente del folio elegido por el usuario, moverse al editor de Visual Basic y de la
ventana del proyecto seleccionar Hoja2 (Factura), pulsar el botón derecho del ratón sobre ella y elegir ver código.

Dentro de la ventana que se abra, ingresar la subrutina Worksheet_Change, la cual es invocada cuando ocurre un
cambio en los datos que contienen las celdas de la hoja.

Private Sub Worksheet_Change(ByVal Target As Range)


If Not Intersect(Target, Range("C1")) Is Nothing Then
Dim tablaDetalle As ListObject
Dim celdas As Range
Set tablaDetalle = Worksheets("VentasDetalle").ListObjects("tablaVentasDetalle")
Set tablaFactura = Worksheets("Factura").ListObjects("tablaFactura")

If Not tablaFactura.DataBodyRange Is Nothing Then


tablaFactura.DataBodyRange.Delete
End If

With tablaDetalle.ListColumns(1).Range
Dim renglonFactura As ListRow
Set celdas = .Find(What:=Range("C1"), LookIn:=xlValues)

If (Not celdas Is Nothing) Then


primerFila = celdas.Row
fila = primerFila
Do
Set renglonFactura = tablaFactura.ListRows.Add
renglonFactura.Range(1) = celdas.Offset(0, 1).Value
renglonFactura.Range(3) = celdas.Offset(0, 2).Value
renglonFactura.Range(4) = celdas.Offset(0, 3).Value

Set celdas = .FindNext(celdas)


fila = celdas.Row
Loop Until (Not celdas Is Nothing And fila = primerFila)
End If
End With
End If
End Sub

La macro anterior se invoca cuando en la hoja Factura se modifica el dato de alguna de sus celdas, en particular el
contenido de la celda C1.

Minipunto de Venta Página 6

También podría gustarte