miércoles, 3 de febrero de 2016

Crear Libro de Excel con fecha de caducidad



Por lo general, invertimos tiempo en la creación de plantillas que contienen fórmulas que nos facilitan las tareas diarias. Y a veces por motivos de fuerza mayor, tenemos que compartir información y nos vemos obligados a entregar esa plantilla que tanto esfuerzo y tiempo nos ha costado; que aunque el código de programación lo tengamos protegido con contraseña, pero sigue siendo funcional para quien la recibe.

Ahora bien, si vamos a compartir información con nuestra preciada plantilla y fórmulas contenidas en ella, pues aquí aprenderemos a establecer una fecha de caducidad, es decir, que en un determinado período de tiempo, el libro de trabajo en cuestión, se auto-eliminará.


En esta ocasión les mostraré cómo programar una fecha de caducidad a un Libro de trabajo.

Para lograr nuestro objetivo, debemos seguir los siguientes pasos:

Nos dirigimos al entorno VBA, ahí damos doble clic sobre el objeto "Thisworkbook", y nos aparecerá el área de trabajo, en donde vamos a pegar las siguientes líneas de código:

Private Sub Workbook_Open()
Dim FechaCaducidad As Date

FechaCaducidad = #8/10/2016#

    If FechaCaducidad > Date Then
        MsgBox "Faltan " & FechaCaducidad - Date & " días para su caducidad", vbInformation
    Else
        MsgBox "Lo sentimos, pero este libro de trabajo" & vbCrLf & "ha llegado a su fecha de vencimiento", vbCritical
            
            Application.DisplayAlerts = False
            ActiveWorkbook.ChangeFileAccess xlReadOnly
            Kill ActiveWorkbook.FullName
            ThisWorkbook.Close
    End If
End Sub
ADVERTENCIA: Maneja esta rutina con mucha precaución.

Observen en la siguiente imagen como les debe quedar...




Muy bien... dentro del evento OPEN del objeto "Thisworkbook", podemos insertar cualquier código de programación que se auto-ejecute cuando se abre el libro de trabajo, que en nuestro caso, es muy conveniente que se dispare la rutina de caducidad del libro en cuestión, ya que con esto, provocaremos que el archivo al llegar a su fecha de vencimiento, pues que simplemente se auto-elimine, impidiendo al usuario recuperarlo; ya que no quedará rastro, ni en la papelera de reciclaje.

Hemos declarado la variable FechaCaducidad de tipo Date, a la cual le asignamos la fecha en que el archivo tendrá que ser eliminado.

Dentro de la condición IF, validamos que si la fecha de caducidad es mayor que la fecha actual, entonces nos tiene que salir el mensaje "Faltan n días para su caducidad"...



de no ser así, es decir, que si la fecha de caducidad es menor o igual a la fecha actual, pues se disparará la rutina de auto-eliminación del fichero, mostrando el mensaje "Los sentimos, pero este libro de trabajo ha llegado a su fecha de vencimiento" ...



ejecutando el código correspondiente, el cual les explico a continuación.

Con la línea Application.DisplayAlerts = False, desactivamos todas las alertas, para evitar que el usuario cancele la rutina, luego con la siguiente línea ActiveWorkbook.ChangeFileAccess xlReadOnly, cambiamos las propiedades del archivo para establecerlo como sólo de lectura, para posteriormente darle el tiro de gracia con Kill ActiveWorkbook.FullName, en donde eliminamos el libro de trabajo activo, identificándolo con su nombre completo. Y finalizamos con el cierre del archivo ThisWorkbook.Close

En cuanto a los mensajes de alerta, los he colocado para que aprecien el funcionamiento de la rutina, los cuales ustedes pueden borrar del código de programación para que pase desapercibido.
Además, tendrán que proteger el proyecto VBA con contraseña, para que los usuarios no tengan acceso a la rutina de auto-eliminación.

Espero que esto les sea de utilidad, y si es así, compartan este material con sus amigos en las diferentes redes sociales.

Nos vemos en la próxima entrega.

Saludos!





45 comentarios:

  1. Respuestas
    1. Muchas gracias por comentar. Me alegra que te guste.
      Saludos cordiales!

      Eliminar
  2. ESTA INTERESANTE PROFE. BENDICIONES ME GUSTA, Y CON ESE CODIGO SE PUEDE TAMBIEN DEJAR ABIERTO PARA QUE NO SE ELIMINE EN ALGUN MOMENTO.................

    ResponderEliminar
    Respuestas
    1. Por supuesto! puedes dejar el código por ahí puesto de forma de comentario, y cuando lo necesites, pues simplemente lo activas. Saludos!

      Eliminar
  3. Buen dia...! Sus videos me han sido de mucha utilidad.

    Estoy muy interesado en un curso On line de programacion VBA ud. Lo imparte? O que me recomienda?
    Gracias.

    ResponderEliminar
    Respuestas
    1. En mi canal de YouTube, podrás encontrar material interesante sobre VBA. Pero no comprendo bien tu pregunta.
      ¿Te refieres a que si doy cursos de forma privada?
      Saludos!

      Eliminar
    2. Si me pregunta se refiere a si ud. imparte cursos en algun sitio en especial aparte de su canal de YouTube.

      Utilice el codigo de fecha de caducidad pero
      Tengo un codigo para contraseña de un archivo y no logro que los dos se ejecuten junto la fecha de caducidad, agradeceria su ayuda gracias.

      el codigo de contraseña es el siguiente:

      Private Sub Workbook_Open()

      Call oculta
      Frm_Contraseñas.Show

      End Sub

      Eliminar
    3. Asi es como tengo los dos codigos:

      Option Explicit


      Private Sub Workbook_Open()
      Dim FechaCaducidad As Date

      FechaCaducidad = #10/10/2016#

      If FechaCaducidad > Date Then
      MsgBox "Faltan " & FechaCaducidad - Date & " días para su caducidad", vbInformation
      Else
      MsgBox "Lo sentimos, pero este libro de trabajo" & vbCrLf & "ha llegado a su fecha de vencimiento", vbCritical

      Application.DisplayAlerts = False
      ActiveWorkbook.ChangeFileAccess xlReadOnly
      Kill ActiveWorkbook.FullName
      ThisWorkbook.Close
      End If
      End Sub



      Private Sub Workbook_Open()

      Call oculta
      Frm_Contraseñas.Show

      End Sub


      SI BORRO EL DE CONTRASEÑA SI FUNCIONA EL DE FECHA DE CADUCIDAD PERO NECESITO EJECUTAR LOS DOS AL INGRESAR.

      AGRADEZCO SU AYUDA!
      GRACIAS!

      Eliminar
    4. NECESITO DE TU AYUDA!

      le coloque al codigo de fecha de caduciad una fecha anterior a la actual para verificar su funcionamiento y he perdido mi archivo, se que es de risa pero necesito saber si hay alguna manera de recuperar la informacion. :(

      Eliminar
    5. El evento OPEN no lo puedes repetir, es por eso que te da error. Todo lo tienes que ejecutar dentro del evento OPEN.
      Te recomiendo que en un módulo aparte coloques el código de caducidad. Luego desde el evento OPEN, inicia el formulario de contraseña y por último deja lo de la caducidad.
      Si el archivo se eliminó, ya no lo puedes recuperar, porque se elimina de forma permanente.
      Saludos cordiales!

      Eliminar
    6. Te agradezco mucho tu ayuda! logre hacerlo con tu expliación.
      Muhas Gracias!
      Aprovechando tus conocimientos queria hacerte la siguiente consulta:
      Tengo tres tablas:
      1. Materiales de Albañileria
      2. Materiales de Plomeria
      3. Materiales de Carpinteria

      Todas las tablas tienen los mismos encabezdos:

      Codigo, material,unidad, precio

      Necesito buscar un material introduciedo en una celda x su codigo y que me de su nombre, unidad y precio no importando en cual de las tres tablas se encuentre dicho material.
      ya intente utilizando buscarv pero no he logrado conformar la formula de manera correcta.

      Te agradeceria mucho si pudieras orientarme.
      Saludos de Guatemala!
      Un abrazo!

      Eliminar
  4. Me llamo Pedro Sánchez.....Gran aporte Otto, muchas gracias, muy muy práctico, me gustaría mucho crear un código en donde en vez de bloquear y eliminar el archivo, permita introducir un password para volver a activar el archivo, en caso de que se desconozca el password únicamente se cierrre el archivo en cuestión..

    ResponderEliminar
    Respuestas
    1. Eso que necesitas lo tiene el Gestor de Inventarios. Checa la pestaña de descarga, ahí verás el enlace para descargar el proyecto y el vídeo de la última actualización. Saludos!

      Eliminar
  5. Muy buen Aporte. Gracias por Compartir.
    Saludos!

    ResponderEliminar
  6. excelente aporte, gracias por compartir tus conocimientos y que Dios siga bendiciendo su vida.

    ResponderEliminar
    Respuestas
    1. Muchas gracias Rafael. Me alegra que te guste el contenido.
      Saludos y un fuerte abrazo!

      Eliminar
  7. buen dia estimado Otto gran aporte mi amigo queria preguntarle como puedo añadirle una contraseña al libro de trabajo para que se active en una fecha especificada y luego de ese tiempo pida la clave de seguridad que asignamos a dicho libro. y luego de 3 intentos de ingresar una clave erronea este se elimine automaticamente. a la espera de sus buenos aportes.

    ResponderEliminar
    Respuestas
    1. Hola mi amigo, gusto en saludarte. Está bien interesante tu sugerencia. Y la verdad, con este mismo código se puede hacer. Lo haré en un rato libre. Saludos cordiales!

      Eliminar
  8. Profe una vez mas feliz tarde con una consulta se
    puede ponerle fecha de caducidad a un botón de
    comando o un userform en vba gracias x tu
    respuesta.

    ResponderEliminar
    Respuestas
    1. Sí, por supuesto! Puedes hacer que en un determinado período de tiempo, dicho botón se deshabilite o el formulario quede bloqueado. Más adelante haré un par de ejemplos de eso para que lo puedas descargar desde la pestaña "Descargas" de este Blog.
      Saludos!

      Eliminar
  9. excelente tutorial como todos los que he visto de usted profesor mil gracias por compartir su conocimiento

    ResponderEliminar
  10. Cordial saludo Otto Javier. Muchas gracias por compartir su conocimiento. Me ha parecido muy interesante este código para una información que comparto en mi trabajo y que cambia periódicamente. Le deseo muchas felicidades a usted y a su familia

    ResponderEliminar
  11. Estimado Otto. Gracias por todo el conocimiento que ha impartido, es muy valioso su aporte, le escrito por algunas ocasiones y me gustaría saber si tu usted me puede asesorar de forma privada con un proyecto que estoy ejecutando.

    ResponderEliminar
  12. Extraordinario aporte profesor Otto, Muchas gracias. BENDICIONES

    ResponderEliminar
  13. Mi pregunta es: como evitar si el usuario cambia la hora del windows estos codigos serial vulnerables....

    ResponderEliminar
  14. Mi pregunta es: como evitar si el usuario cambia la hora del windows estos codigos serial vulnerables....

    ResponderEliminar
  15. essste blog! sé que solo tengo 30 <-) pero.. donde estuvo toda mi vidaaaw! es grandioso!

    ResponderEliminar
  16. Buen Dia, hará algún capítulo de reportes, necesito crear un reporte en donde por medio del agente o vendedor me despliegue las razones sociales que atiende y los proyectos que tiene a su cargo, agradezco de antemano su ayuda

    ResponderEliminar
  17. Excelente Aporte podrias compartir la macros via email...

    ResponderEliminar
  18. ¿se puede subir un archivo a sharepoint con macros y código VBA y que sea totalmente funcional?

    ResponderEliminar
  19. HE PROBADO CON UN MACRO QUE TENIA Y LO HA ELIMINADO ¿¿COMO RECUPERO???
    CREO QUE LO CA...

    ResponderEliminar
  20. HE PROBADO CON UN MACRO QUE TENIA Y LO HA ELIMINADO ¿¿COMO RECUPERO???
    CREO QUE LO CA...

    ResponderEliminar
  21. Estimado Otto sumarme a la gratitud por todos los conocimientos que comparte en este su blog e incluso por youtube, son de mucha utilidad un gran saludos y un inmenso GRACIAS por su tiempo compartido.

    ResponderEliminar
  22. Convocatoria Laboral
    Buenos días Otto Javier

    La empresa Promotora Telco Invesiones SAS dedicada al sector de las Telecomunicaciones con su sede principal en Dosquebradas - Risaralda, solicita personal para el cargo de auxiliar administrativo que tenga conocimientos avanzados en Excel, solicito su colaboración si es posible para difundir por su canal esta vacante.

    Muchas gracias por la atención brindada

    Feliz día


    Freddy Arias Hoyos
    Cl 8 # 10-73 Zona Industrial la Popa
    Cel 3177339943 Tel. 3306230 Ext. 203
    Dosquebradas - Risaralda

    ResponderEliminar
  23. buen día espero y se encuentre bien, queria comentarle un detalle que tengo con uno de mis trabajos de libro de excel este archivo lo comparto con usuarios del corporativo.
    pero siempre le han de mover, quisiera saber si me puede apoyar con un tutorial si hay manera de que ellos puedan utilizar el archivo como lectura y redación pero que si quieren guardar les pida una clave de administrador o simplemente que no les deje guardar y que solo el administrador pueda hacer los cambios en este libro

    ResponderEliminar
  24. excelente como siempre, me motivo mas y mas de excel gracias a sus tutoriales de sus tutoriales he aprendido mucho y e avanzado a pasos a paso !Gracias! como siempre impartiendo sus conocimientos.
    Saludos :)

    ResponderEliminar