Cuando se tienen muchos datos en una tabla, puede llegar a ser un problema el encontrar los registros que ya tienen una fecha de vencimiento, una alerta de vencimiento puede ser la solución, muy útil para Cuentas por Cobrar y Cuentas por Pagar, básicamente se debe mostrar un mensaje al abrir el libro, en ese mensaje se debe poder visualizar lo que ya tiene vencimiento.
Alerta con Formulas Excel
De inicio puede ser una solución el uso de formulas, la idea es que se pueda mostrar un texto cuando se cumple una condición de vencimiento por la fecha.
Formula Vencimiento de Facturas
Partiremos de la idea que en la tabla de datos también se cuenta con la cantidad de dias de crédito, de tal forma que a la fecha podamos sumar esos dias para obtener la fecha de vencimiento.
=SI(E2<=HOY()+2,"Vencimiento","")
Con la formula anterior obtenemos el texto “Vencimiento”, esto cuando faltan dos dias para llegar a la fecha en que la factura vence, para cambiar la cantidad de dias con anticipación que se debe mostrar el mensaje solo debes cambiar el “+2” por la cantidad de dias que desees.
Alerta con Macros
Tomando como base la formula anterior, podemos crear una macro que recorra la tabla de datos y comprobar en cada registro la columna donde aparece “Vencimiento” en los casos que aplica, de tal forma que al finalizar el recorrido se muestre un mensaje con la lista de facturas que están en vencimiento.
Codigo VBA Alerta de Facturas Vencidas
El siguiente código es muy simple pero de grana ayuda para no dejar pasar esas facturas que ya tienes que pagar, lo que hace esta macro es poner un fondo rojo a todas las facturas con vencimiento y ademas te da un mensaje con la lista de todas esas facturas.
Sub AlertaVencimiento()
Dim r As Range
Dim mensaje As String
If wsFacturas.Range("A2") <> "" Then
For Each r In wsFacturas.Range("A2", wsFacturas.Range("A1").End(xlDown))
If r.Offset(0, 6) = "Vencimiento" Then
r.Offset(0, 6).Interior.Color = rgbRed
mensaje = mensaje & r & ", Vencimiento " & r.Offset(0, 1) & ", " & FormatNumber(r.Offset(0, 3)) & vbNewLine
Else
r.Offset(0, 6).Interior.Pattern = xlNone
End If
Next r
If mensaje <> "" Then
MsgBox mensaje, vbCritical, "Vencimiento de Facturas"
End If
End If
End Sub
Explicacion Macro Vencimiento de Facturas
La macro inicia el recorrido de la tabla tomando como base la columna A, el recorrido se inicia solo si hay por lo menos un registro If wsFacturas.Range("A2") <> "" Then
El recorrido se hace desde A2 hasta la ultima fila que tenga algún dato.
For Each r In wsFacturas.Range("A2", wsFacturas.Range("A1").End(xlDown))
Si en la columna G esta el texto “Vencimiento” en el registro en turno, el fondo de esa celda se pone rojo y se agrega un linea a la variable “mensaje”, esa nueva linea tiene el numero de factura, fecha de vencimiento e importe.
If r.Offset(0, 6) = "Vencimiento" Then
r.Offset(0, 6).Interior.Color = rgbRed
mensaje = mensaje & r & ", Vencimiento " & r.Offset(0, 1) & ", " & FormatNumber(r.Offset(0, 3)) & vbNewLine
Si no esta vencida, entonces le quita el color de fondo a la celda.
r.Offset(0, 6).Interior.Pattern = xlNone
Una vez terminado el recorrido, si la variable mensaje tiene por lo menos una linea, se mostrara ese mensaje.
If mensaje <> "" Then
MsgBox mensaje, vbCritical, "Vencimiento de Facturas"
End If
Hacer que el proceso sea ejecutado justo despues de abrir el libro Excel.
Es importante que esta alerta se ejecute cuando se abra el libro, esto con el fin de asegurarnos de poder ver la informacion actualizada cada día.
Para esto simplemente tenemos que agregar el siguiente código en “ThisWorkBook”, este objeto lo podemos ubicar desde el explorador de proyecto de VBA.
Private Sub Workbook_Open()
Call AlertaVencimiento
End Sub
Espero que este ejercicio te sea de mucha ayuda y puedas adaptarlo a tus proyectos.
Deja tus comentarios.
Nicolas Araiza dice
Me aparecer ERROR 13, en la línea de mensaje
Ricardo dice
Muy buen ejemplo… Eso tambn se podría aplicar a un formulario…
usuario con duda dice
Hola, cómo sería si quiero que el msgbox muestre solamente la cantidad de facturas vencidas y no cada una de estas.
Mario Herrera dice
Gracias Norberto por el Ejercicio
Fijate que me sale el siguiente Mensaje:
Se ha Producido el error 424 en tiempo de Ejecución se requiere un Objeto
Leopoldo dice
La siguiente línea me sale en amarillo de error en el depurador.
If wsFacturas.Range(“A2”) “” Then
los signos de mayor y menor si los puse, no entiendo porque en ocasiones al pegar el texto no los aparece.
Saludos cordiales
Gracias
Fred dice
Simplemente quita el wsFacturas, quedaria asi:
If Range(“A2”) “” Then
En todo lo que aparece wsFacturas borralo.
Saludos.
Juan Carlos Lozoya dice
NO DEJA DESCARGAR EL ARCHIVO!!!
me interesa mucho Nolberto, podrías enviarmelo?
Betty dice
Cómo ha declarado “r”????
me sale error 91
Argenis dice
La declaró como Dim r as Range al inicio
Soledad dice
Buenas tardes!
En el workbook coloque como se indicaba lo siguiente:
Private Sub Workbook_Open()
Call AlertaVencimiento
End Sub
Me aparece un error de compilación “No se ha defino Sub o Function”
Desde ya muchas gracias
Andres Correa dice
buen dia
Sale error en el wsfacturas,¿ cual podría ser el problema
?
Danna dice
Nolbeto el archivo no deja descargar y trate por todos los medios
Garcia dice
Podria ayudarme, me da error en la linea de if
If wsFacturas.Range(“A2”) “” Then
y no entiendo que pasa y todo lo demas me funciona
Nolberto Lopez dice
If wsFacturas.Range(“A2”) <> “” Then
Andres Correa dice
Sigue saliendo error cual podrá ser ?
Nolberto Lopez dice
Saludos Andres.
Para poder ayudarle tendiera que saber cual es el mensaje de error que esta obteniendo…
Aunque lo mas probable es que sea porque usted esta usando un archivo diferente al del ejemplo, es decir, creo su propio archivo y solo pego la macro, en ese caso es necesario que cambie el nombre de la hoja wsFacturas por el nombre de la hoja con la que usted esta trabajando.
Si observa en el vídeo, al estar creando la macro, en la parte del explorador de proyectos aparece el nombre “wsFacturas” en la sección de “Microsoft Excel Objetos”, si selecciona el nombre de la hoja, puede cambiar el nombre en la ventana de propiedades que esta abajo (Name), esto no cambia el nombre de la pestaña en excel de esa hoja, sino que ese nombre es el que maneja VBA para referirse internamente a esa hoja.
alex dice
Gracias por compartir su conocimiento
Carlos dice
Buen formulario
omar dice
me podria compartir el archivo para checar el codigo y ver como funciona??? gracias
Nolberto Lopez dice
Saludos Omar.
Si lee el articulo encontrara el código.
También esta la opción de descargar el archivo al final del post.
Herbetth dice
Tengo una duda, lo que sería ese “wsFacturas”,
Tengo un error ” El Objeto es obligatorio ”
¿Puedes ayudarme?
FRAN dice
ANDO EN LAS MISMA