Está en la página 1de 6

Numerador automtico para facturas o recibos en

Excel
Con Excel es fcil crear plantillas para facturas o recibos. Ms an, se pueden
descargar gratuitamente de varios sitios. La plantilla del ejemplo que usar en esta
nota fue descargada del sitio de Microsoft.

Una de las consultas que recibo frecuentemente, es cmo crear un numerador


automtico para facturas o recibos en hojas de Excel. Si observan la plantilla de la
factura, vern que la celda C5 contiene el nmero de factura.

Lo que queremos hacer es que este nmero se actualice cada vez que emitimos
una factura, de manera que la siguiente tenga el nmero consecutivo (el archivo
con el ejemplo se puede descargar aqu aunque recomiendo el nuevo modelo que
incluye base de datos de las facturas producidas).
Esto se puede hacer de varias maneras, pero todas implican usar macros.
Una solucin sencilla es agregar un botn al que le asociamos una macro. El
botn lo creamos copindolo de la barra de formularios.

Pulsamos el botn Nuevo, lo que abre un mdulo de Vba con el evento Sub
Botn3_AlHacerClic(). Aqu escribimos este cdigo
[C5] = [C5] + 1

Ahora, cuando apretamos el botn el valor en la celda C5 se incrementar en 1.


Esta tcnica es muy sencilla, pero no ofrece ninguna ventaja frente al sencillo
mtodo de cambiar el valor en la celda manualmente. Adems, si nos olvidamos
de presionar el botn, la prxima factura saldr con el mismo nmero.
Una forma de lograr algn tipo de control es ligar el botn a la accin de sumar los
importes de la factura. Es decir, hasta que no apretemos el botn no aparecer la
suma total de la factura en la celda correspondiente (la celda C35 en nuestra
plantilla).
Empezamos por eliminar la frmula en la celda C35. Teniendo en cuenta que el
rango de los montos de las lneas de la factura es C18:C34, modificamos nuestro
cdigo, para que sume los valores de las celdas del rango y luego cambie el
nmero de factura

Sub Botn3_AlHacerClic()
[C35] = WorksheetFunction.Sum(Range("C18:C34"))
[C5] = [C5] + 1
End Sub

Otra alternativa es que el nmero de factura cambie automticamente en las


circunstancias debidas, por ejemplo antes de imprimirla.
Para esto debemos usar un tipo de macro especiales llamadas "eventos".
Eventos son macros que actan cuando, como su nombre lo sugiere, algo sucede
en la hoja, o el objeto, al cual estn ligadas. Los eventos sern tema de una futura
nota, como vengo prometiendo. En esta nota nos limitaremos a un ejemplo
prctico.
Para saber qu eventos existen ligados al objeto, en nuestro caso el cuaderno que
contiene la hoja con la factura, pasamos al editor de Vba y hacemos doble clic al
icono ThisWorkbook,

Abrimos la lista desplegable de la ventanilla donde aparece General y elegimos


Workbook

Abrimos la ventanilla contigua para ver qu eventos estn a nuestra disposicin

Como podemos ver, existe un evento BeforePrint, es decir "antes de imprimir".


Ponemos el cdigo anterior en este evento
Private Sub Workbook_BeforePrint(Cancel As Boolean)
[C35] = WorksheetFunction.Sum(Range("C18:C34"))

[C5] = [C5] + 1
End Sub
Ahora, cuando queramos imprimir la factura, ya sea con el icono de impresin o
con el men Archivo-Imprimir, se disparar el evento, el nmero de la factura
aumentara en 1 y el total ser recalculado.
Para mejorar nuestro evento, podemos incluir la posibilidad de cancelar la
impresin. Lo que haremos es agregar algunas lneas de cdigo

Private Sub Workbook_BeforePrint(Cancel As Boolean)


Dim Mensaje, Resp
Dim dlgPrint As Boolean
Mensaje = "El total es " & [C35] 'Total
Mensaje = Mensaje & " Imprimir?"
Resp = MsgBox(Mensaje, vbQuestion + vbYesNo)
On Error GoTo errNoPrint
If Resp = vbYes Then
Application.EnableEvents = False
[C5] = [C5] + 1
dlgPrint = Application.Dialogs(xlDialogPrint).Show
If dlgPrint = False Then
[C5] = [C5] - 1
Cancel = True
Application.EnableEvents = True
Exit Sub
End If
Else
Cancel = True
Application.EnableEvents = True
End If
Application.EnableEvents = True

Exit Sub
errNoPrint:

[C5] = [C5] - 1
Cancel = True
Application.EnableEvents = True
End Sub

Primero calculamos el total; luego producimos un mensaje donde exponemos el


total y damos la opcin de cancelar la impresin

Si el usuario aprieta No, el proceso de impresin se detiene y el nmero de la


factura no cambia.
Como se puede ver, con algunas lneas de cdigo puestas en el lugar
correspondiente, podemos lograr una aplicacin bastante prctica. El cuaderno
con la factura puede descargarse aqu
Si usamos el evento BeforePrint, el botn es innecesario y puede ser eliminado.

También podría gustarte