33

Cómo eliminar automáticamente un archivo de Excel tras una fecha determinada

Un colega, que también trabaja con Excel, me preguntó el otro día, si sería posible eliminar un archivo de Excel de forma automática, una vez ha pasado una determinada fecha, para crear una demostración de una plantilla.

La siguiente macro de Excel hace exactamente eso: Cuando llega una fecha determinada (en este caso, la que introduzcamos en la celda A1), nos informará de que el archivo se va a eliminar porque ha caducado el periodo de prueba. Introduce el siguiente código en un módulo estándar:

Sub Eliminar_archivo()
    Application.DisplayAlerts = False
    ActiveWorkbook.ChangeFileAccess xlReadOnly
    Kill ActiveWorkbook.FullName
    ThisWorkbook.Close False
End Sub


Sub caducidad()
    'deshabilitamos boton cancelar del msgbox
    Application.EnableCancelKey = xlDisabled

    fecha = Range("A1").Value

    If Date < DateSerial(Year(fecha), Month(fecha), Day(fecha)) Then

    MsgBox "Dentro de: " & (DateSerial(Year(fecha), Month(fecha), _
        Day(fecha)) - Date) & " dias este archivo se AUTOLIMINARA", _
        vbInformation, "Tiempo de Expiración"
    Else
    MsgBox "Lo siento, el tiempo de prueba a terminado." & Chr(13) _
    & "Este archivo se autoeliminará.", vbCritical, "Tiempo de Expiración"

    Call Eliminar_archivo

    End If

End Sub

 

¡Compartir es vivir!
Sergio
 

La destreza y el perfeccionismo quizá sean las dos virtudes que me permiten ayudar a mis clientes a facilitar las tareas administrativas de sus negocios.

Haz clic aquí para dejar un comentario 33 comentarios
Moises

Una consulta….Me podria decir si existe alguna macro o programa para quitar fecha de caducidad a un archivo de excel. Tengo un archivo importante para mi que al abrir dice que vence fin de mes. gracias, Mi correo es tmaq28@gmail.com

Responder
Fernando

Es posible recuperar el archivo de la papelera de reciclaje?

Responder
LUIS puga

HOLA SOY LUIS , UNA PREGUNTA SERA POSIBLE ELIMINAR SOLO LOS DATOS ? SIN NECESIDAD DE ELIMINAR EL LIBRO?, IGUAL QUE SE ELIMINE EN CIERTO TIEMPO.

Responder
Sergio

Luis, si no te quieres liar mucho, sustituye todas las instrucciones del procedimiento Eliminar_archivo por la siguiente línea:

Cells.ClearContents

Saludos.

Responder
Sergio

De la papelera de reciclaje es fácil recuperar el archivo. Sólo tienes que pulsar sobre él con el botón derecho y seleccionar “Restaurar archivo”. El archivo volverá a la carpeta en la que lo eliminaste.

Si el archivo ha sido eliminado ya de la papelera de reciclaje, también es posible recuperarlo, pero necesitarás un software especí­fico para esto. Echa un vistazo al siguiente enlace donde encontrarás algunos de los programas:

http://www.emezeta.com/articulos/15-aplicaciones-gratis-para-recuperar-archivos-borrados

Espero haberte ayudado.

 

Saludos

Responder
Sergio

Imagino que la fecha de caducidad estará programada con VBA. Sólamente habría que entrar en el código de la macro y modificarla para inhabilitar la fecha.

Saludos.

Responder
Oscar

Estimado Exceleta!!,
soy un “viejo” que aún anda en estas cosas.
He copiado la macro para eliminar un archivo y no termina de funcionar. Manda el aviso y luego me da error.
Seguramente no he especificado algo en la macro. La copié y la pegué como la has escrito tú.
En qué lineas debo colocar “mis ” datos???.
Y como serí­a la macro para eliminar el archivo sin ningún tipo de aviso. Llegado el dí­a: Puffff, desapareció!!
Muchas gracias, Oscar, un admirador

Responder
Sergio

Hola, Oscar, me alegra que sigas fielmente la web.

Para que la macro funcione correctamente debes introducir una fecha válida en la celda A1. Si la fecha es posterior al dí­a de hoy, te aparecerá¡ un mensaje diciendo los dí­as que restan para llegar a esa fecha. si introduces una fecha anterior, el archivo se eliminará¡ automáticamente.

Para hacer que el archivo se elimine automáticamente, debes colocar el código, en vez de en un módulo estándar, bajo el evento Workbook_Open, pero ten cuidado, ya que si introduces una fecha anterior al dí­a de hoy y cierras el archivo, cuando lo vuelvas a abrir, se ejecutará el código y eliminará el archivo automáticamente.

Responder
    YONDER

    Hola Oscar, gracias por el codigo. Te comento que intente hacerlo para eliminar el archivo cuando se abra pero me fue imposible. Realmente no se como hacer que el evento workbook_open funcione para que elimine el archivo al abrir. podrias colocar el codigo incluyendo el wookbook_open, te lo agradeceria muchichisisimo

    Responder
otro Oscar

Hola, soy otro “viejo” Oscar que se pone a divertirse con excel.
He hecho las mismas pruebas de mi tocayo y no llego al final.
Si por ejemplo tengo un file que se llama “lista de clientes” y quiero que “desaparezca” el 31.12.2014, como serí­a la makro???, Muchas gracias por todo lo que publicas

Responder
Sergio

Hola, Oscar:
Solamente tendrás que modificar la lí­nea de código que comienza por If, sustituyendo “DateSerial(Year(fecha), Month(fecha), Day(fecha))” por la fecha que desees.

Responder
albersil

Buenas y Gracias de antemano. Mi inquietud es ¿Cómo se haría no solo con una fecha determinada, sino a una hora determinada de esa fecha límite? Es decir, ejecutar alguna acción cuando se cumpla el plazo siguiente, por ejemplo, 13:30 horas del día 12/06/2015. Salu32

Responder
Jorge

Buen día la macro funciona excelente pero solo para una hoja si tengo un archivo con dos hojas funciona mientras cierre el archivo en la hoja donde se programo la fecha pero si lo cierro en otra hoja menciona que ya caduco como puedo realizar ese cambio para que pueda cerrar mi archivo en cualquier hoja y siga funcionando ????
Gracias de antemano

Responder
alex

donde pego ese codigo?

Responder
    Sergio

    Alex, pulsa Alt + F11 y crea un nuevo módulo. Ahí es donde debes pegar el código.

    Responder
Marlon

Excelente, trate de emular el código para usarlo en un archivo de word pero no pude 🙁 podrías presentarnos el código para un archivo que haga lo mismo pero en word?

Saludos y gracias de antemano

Responder
    Sergio

    No te sé responder, Marlon. Cada programa tiene su propio modelo de objetos y, aunque son similares, no siempre se implemeta el código de la misma forma. Lo que te puedo decir es que de la misma forma que a un libro de Excel se le denomina Workbook, a un documento de Word se le llama Documents.

    Responder
Albert Salas

Increible ver que despues de 2 años esta info sigue siendo de mucha utilidad , mil gracias Sergio, abusando de tu nobleza,he intentado asignar el boton de un userform a una tecla de funcion F9), pero aun no he dado en el clavo, crees que podrias echarme una mano con eso?
Saludos y gracias de antemano!

Responder
Lurdes

Hola sergio te cuento q no puedo hacer funcionar me puedes ayudar por favor

Responder
Josep

Buenas noches,

Primero que todo darte las gracias por el macro para eliminar el archivo auomaticament, bueno jo he utilizado la variante de limpiar todos los datos, como tu dijiste, i todo perfecto: “Cells.ClearContents” com el excel todo funciona perfectament. Pero el problema que tengo ahora es que trabajo con el excel google driver y el sistema de programacion es diferente, te agradeceria que me ayudaras a transpasas el programa macro al sistema de google drive, aqui te pongo el programa que utilizo y que tu facilitaste en este foro, muchas gracias :

_____________________________________________________________________________________

Sub Eliminar_archivo()
Cells.ClearContents
End Sub

Sub caducidad()
‘deshabilitamos boton cancelar del msgbox
Application.EnableCancelKey = xlDisabled

fecha = Range(“A1”).Value

If Date < DateSerial(Year(fecha), Month(fecha), Day(fecha)) Then

MsgBox "Dentro de: " & (DateSerial(Year(fecha), Month(fecha), _
Day(fecha)) – Date) & " dias este archivo se AUTOLIMINARA", _
vbInformation, "Tiempo de Expiración"
Else
MsgBox "Lo siento, el tiempo de prueba a terminado." & Chr(13) _
& "Este archivo se autoeliminará.", vbCritical, "Tiempo de Expiración"

Call Eliminar_archivo

End If

End Sub

Responder
    Sergio

    Lo siento, Josep, pero en ese aspecto no te puedo ayudar. Las dos hojas de cálculo utilizan lenguajes diferentes y no tengo nada de experiencia en el de Google Drive.

    Haz tu consulta en el foro de la web. Quizá haya un usuario que tenga más experiencia que yo en GD.

    Responder
Victor

Sergio, gracias por compartir esta información, a mi mente vienen otras inquietudes.

Pasa que en ocasiones en mi trabajo debo de compartir información que es confidencial y que no debe de estar dispersa por muchos lados, por lo que me gustaría saber si este mismo documento puedo colocarle “candados” para evitar que sea copiado (Ya sea copiado el documento o copiada la información que está en las celdas), agradecería tus comentarios, me serían de mucha ayuda!

Gracias de antemano!
Saludos Cordiales

Responder
Jim Kelly Davis Rojas Chávarri

Buenas tardes, lo he probado en Word y no sale… Un gran favor, podrìan pasar la estructura del còdigo para word para probarlo. Desde ya, muy agradecido.

Responder
    Sergio

    Prueba con la siguiente macro. Sólo habría que cambiar el nombre de los objetos, ya que Word no tiene el objeto ThisWorkBook. Además, la fecha habría que introducirla a mano porque Word no tiene celdas donde pueda introducirse.

    Sub eliminar_archivo()
    Application.DisplayAlerts = False
    Application.Documents.Close
    End Sub

    Sub caducidad()
    ‘deshabilitamos boton cancelar del msgbox
    Application.EnableCancelKey = xlDisabled

    fecha = #8/16/2018#

    If Date < DateSerial(Year(fecha), Month(fecha), Day(fecha)) Then MsgBox "Dentro de: " & (DateSerial(Year(fecha), Month(fecha), _ Day(fecha)) - Date) & " dias este archivo se AUTOLIMINARA", _ vbInformation, "Tiempo de Expiración" Else MsgBox "Lo siento, el tiempo de prueba a terminado." & Chr(13) _ & "Este archivo se autoeliminará.", vbCritical, "Tiempo de Expiración" Call eliminar_archivo End If End Sub

    Responder
Jim

Hola estimado, he probado el código pero no se autoelimina, solo se cierra. Al parecer, no se puede en word.

Responder
    Sergio

    Jim, puedes sustituir la macro eliminar_archivo por este código:


    Sub eliminar_archivo()
    Dim MiArchivo As String
    MyFile = ActiveDocument.Path & "\" & ActiveDocument.Name
    ActiveDocument.Close (wdDoNotSaveChanges)
    Kill MiArchivo
    End Sub

    Esta macro elimina el propio archivo pero para que funcione, debes alojarla en el libro de macros personal y no en el documento de Word que quieres eliminar.

    Responder
Elizabeth

Hola Sergio, de mucha ayuda tu macro pero ya la descubrieron hay forma de ocultarla o que me pida una contraseña para poder modificar la macro y la persona que la está usando no cambie la fecha?

Responder
José García

Saludo!!
Me funciono pero debí de ejecutarla manualmente, imagínate que tengo varias hojas, en cual hoja de esa debiera de colocar la fecha, le coloque en todas y no funciona solo si la ejecuta manualmente, así que seria bueno el especificarle el nombre de la hoja donde se convalidará la fecha
Gracias!!

Responder
Rigoberto

Excelente aporte! Ahora, una pregunta, como podemos evitar que algún usuario guarde el archivo en un formato “macro-free”, ya que de esta manera no funcionaría la macro de “autoeliminar”. Muchas gracias de antemano.

Responder
    Sergio

    ¡Hola Rigoberto!

    Con un poco de código puedes hacer que el archivo únicamente se pueda guardar con extensión xlsm.

    Pero siento decirte que ningún libro de Excel está a salvo de usos inadecuados…

    Responder
raul matias heredia

hola sergio…recibo archivos de excel via mail con el mismo formato y quisiera actualizar con cada uno de ellos una planilla excel general de forma automatica. Es posible hacer?

Responder
    Sergio

    Hola Raúl!
    Con Power Query puedes realizar esa tarea. Si necesitas ayuda con ella, puedes buscarla en el foro de la web.

    Responder

Escribe una respuesta: