Cerrar un libro solo si éste esta abierto

Tengo un archivo que se cierra automaticamente a los 60 minutos despues de ser abierto, dicho archivo, cada semana es renombrado. Esta parte funciona bien.

Si se abre a las 7:00am se cierra automaticamente a las 8:00am. El asunto es que si el libro ya fue cerrado, lo abre para cerrarlo.

¿Cómo puedo solucionar este problema?

______________________________________________________________

Private Sub workbook_open()
    Sheets("PROGRAMA D' PRODUCCION").Select
        Application.ScreenUpdating = False
            Call PlanContenedores
            Call Update2
            Call ProtejeLista
        Application.ScreenUpdating = True
    Sheets("PROGRAMA D' PRODUCCION").Select
    Call Temporizador

End Sub

__________________________________________________________

Sub Temporizador()

    Application.OnTime Now + TimeValue("00:59:00"), "CerrarConTemp", , True

End Sub

___________________________________________________________

Sub CerrarConTemp()

ThisWorkbook. Save
        ThisWorkbook. Close
End Sub

__________________________________________________________

Respuesta
1

Te anexo los códigos:

En los eventos de thisworkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call parar
End Sub
'
Private Sub workbook_open()
    Sheets("PROGRAMA D' PRODUCCION").Select
        Application.ScreenUpdating = False
            Call PlanContenedores
            Call Update2
            Call ProtejeLista
        Application.ScreenUpdating = True
    Sheets("PROGRAMA D' PRODUCCION").Select
    hora = Now + TimeValue("00:59:00")
    Call Temporizador
End Sub


En un módulo debes declarar como pública la variable hora y debe ir al principio de todo el código:

Public hora
'
Sub Temporizador()
    Application.OnTime hora, "CerrarConTemp", , True
End Sub
'
Sub CerrarConTemp()
    ThisWorkbook.Save
    ThisWorkbook.Close
End Sub
'
Sub parar()
    'On Error Resume Next
    Application.OnTime hora, "CerrarConTemp", , False
End Sub

El proceso es el siguiente: 

- Cuando abres el libro se activa el evento Open

- Se actualiza la variable pública con esto: hora = Now + TimeValue("00:59:00"), es decir, queda almacenada en memoria, por ejemplo, si abres el libro a las 9:00, hora = 9:59

- Se ejecuta el Temporizador

- El temporizador ejecuta OnTime con 9:59, "CerrarConTemp",, True

- Cuando cierras el libro, se ejecuta el evento Close

- El evento Close ejecuta la macro Parar

- La macro parar ejecuta OnTime con 9:59, "CerrarConTemp", , False

Aquí hay 2 claves importantes, la primera, para detener la ejecución activa, debe ponerse la misma hora con la que se inició, en este ejemplo se debe poner 9:59, pero como el reloj está continuamente avanzando, por eso utilizamos una variable, esa variable siempre, en este ejemplo, va a tener 9:59. La otra clave, al final de la instrucción se debe poner False, ese indicador es para detener la ejecución activa.

- Con eso se cierra el libro y ya no se activa OnTime.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas