Macro de tiempo para abrir un archivo

Quisiera ayuda para una macro que me permita programar una fecha determinada para que el archivo excel deje de funcionar o se bloquee hasta que yo modifique la fecha y le de al archivo otro tiempo de funcionamiento. Agradecido y saludos.

1 Respuesta

Respuesta
1

22/11/16

Buenas, Mauricio

Habría que hacer una serie de consideraciones para que sea efectivo, pero esta rutina avisa y cierra el archivo si hubiese expirado la fecha.

Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y en el panel de la izquierda busca la hoja que dice "ThisWorkbook" (o "EsteLibro" según la versión")

Copia el código siguiente y pégalo en el panel desplegado a la derecha de su Editor de Visual Basic:

Private Sub Workbook_Open()
Application.EnableCancelKey = xlDisabled
FechaFin = "23/11/2016" '<<< Fecha de Expiración
If Date = FechaFin Then
    ElMensaje = "Este archivo ya no es válido." & Chr(10) & _
    "Contactarse con Mauricio Varela para reactivarlo" & Chr(10) & "Ahora se cerrará."
    ElTitulo = "ARCHIVO EXPIRADO!"
    TipoMens = vbCritical
    MsgBox ElMensaje, TipoMens, ElTitulo
    Application.EnableCancelKey = xlErrorHandler
    ActiveWorkbook.Close xlNo
Else
    HojaIni = ActiveSheet.Name
    Application.ScreenUpdating = False
    For Each Hoja In Sheets
        Hoja.Visible = True
    Next
    Sheets(HojaIni).Select
    Application.ScreenUpdating = True
End If
Application.EnableCancelKey = xlErrorHandler
End Sub

Notarás que la rutina impide que se interrumpa el código presionando Ctrl + Pausa (o Break). Que sería una forma de evitar que se cierre.

De todos modos, cualquier control sería inútil si se desactivara la ejecución de macros... ¿verdad?

Si crees que eso podría pasar (que alguien desactive las macros para poder acceder al código y cambiar la fecha o anular esta protección), deberías asegurarte que las hojas estén ocultas (con atributo VeryHidden, para que sólo una macro pudiera desocultarlas) y la rutina que te pasé se encarga de mostrar todas las hojas si la fecha estuviera vigente.

Desde luego, deberás proteger la estructura del libro y el código de Visual Basic con claves.

Para la protección de módulos, accede al Editor de Visual Basic, en su Navegador de Proyectos, busca el de tu archivo –cierra todos los elementos que tenga asociado- haz click derecho sobre él. Elige “Propiedades del VBA Project”. Selecciona la solapa de Protección, marca la casilla de “Bloquear proyecto para visualización” y también ingresa otra contraseña aquí.

Un abrazo!

Fernando

.

Usa esta que tiene un ajuste:

Private Sub Workbook_Open()
Application.EnableCancelKey = xlDisabled
FechaFin = "20/11/2016" '<<< Fecha de Expiración
If Date >= CDate(FechaFin) Then
    ElMensaje = "Este archivo ya no es válido." & Chr(10) & _
    "Contactarse con Mauricio Varela para reactivarlo" & Chr(10) & "Ahora se cerrará."
    ElTitulo = "ARCHIVO EXPIRADO!"
    TipoMens = vbCritical
    MsgBox ElMensaje, TipoMens, ElTitulo
    Application.EnableCancelKey = xlErrorHandler
    ActiveWorkbook.Close xlNo
Else
    HojaIni = ActiveSheet.Name
    Application.ScreenUpdating = False
    For Each Hoja In Sheets
        Hoja.Visible = True
    Next
    Sheets(HojaIni).Select
    Application.ScreenUpdating = True
End If
Application.EnableCancelKey = xlErrorHandler
End Sub

por si la fecha de apertura es posterior a la de vencimiento.

Abrazo
Fer

.

Hola Fer, gracias nuevamente por tu pronta respuesta.  Probé la rutina y funciona perfectamente con respecto a lo que solicitaba, al realizar el ejercicio sale el mensaje correspondiente y luego se cierra. Para poder modificar la fecha y que siga en funcionamiento la planilla tuve que deshabilitar las macros y acceder.  Por supuesto que existen usuarios que saben mas que otros y que pueden ser capaz de hacer ciertas modificaciones para acceder.   Si la fecha de expiración según rutina es el 20 nov 2016, ¿qué pasa si se modifica la fecha del sistema y la pongo en una anterior?.  Otra consulta ¿existe rutina para habilitar si o si las macros antes de abrir planilla?.  

.

Hola, Mauricio

Como habrás notado, MS Excel no es un programa que permita generar archivos sólidos en seguridad. No -al menos- sin extensas programaciones que traten de cubrir todas las alternativas. Probablemente sea porque está destinado -en efecto- para que sea usado por múltiples usuarios.

Dado que la rutina toma la fecha del sistema para hacer la comparación es probable que pueda burlarse el control atrasando la fecha. Eventualmente, podría intentarse una medida de protección que -al guardar el libro- aloje la fecha de último acceso y si esta fuese posterior a la del sistema, cierre el libro.

Finalmente, respecto a la rutina para habilitar macros, notarás que si -de hecho- están desabilitadas no podría ejecutarse, aunque existiera.

Por eso es que te sugerí un libro con todas las hojas bien ocultas, menos la primera que avisa que necesita que la macros estén permitidas para poder mostrar las hojas.

Saludos

Fer

.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas