Macro que oblique a pulsar un botón antes de cambiar de hoja o cerrar excel

Tengo un archivo excel en el que se ejecuta una macro, pero necesito que cuando una persona que usa el archivo vaya a cambiar de hoja, o directamente vaya a guardar o a cerrar el archivo excel le oblique a pulsar un botón.

Este botón a su vez ejecuta una macro que deshace lo realizado por la macro ejecutada inicialmente.

¿Alquién me podría ayudar?

1 Respuesta

Respuesta
1

Con la siguientes macros no te permite cambiar de hoja, no te permite cerrar, no te permite guardar, hasta que se presione el botón.

Pero una vez que presionan el botón y quieran realizar esas actividades, ¿de qué forma las macros lo pueden permitir?, es decir, de qué forma sabremos que ya presionaron el botón. ¿La macro que dices realiza algo en particular que podamos revisar que efectivamente ya presionaron el botón?

Se me ocurre que cuando abran el archivo borres la celda "D1" de la hoja "temporal".

Luego, cuando presionen el botón, al final de la macro del botón, deberás tener una instrucción para poner, por ejemplo, el texto: "presionado".

Con esa indicación, las macros pueden saber que el botón ya fue presionado.

La secuencia sería así:

1. En los eventos de workbook:

Private Sub Workbook_Open()
'Por.Dante Amor
    Sheets("temporal").Range("D1") = ""
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Por.Dante Amor
    'Para cerrar
    If Sheets("temporal").Range("D1") = "" Then
        MsgBox "Para cerrar, presiona el botón"
        Cancel = True
    Else
        Sheets("temporal").Range("D1") = ""
    End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Por.Dante Amor
    'Para guardar
    If Sheets("temporal").Range("D1") = "" Then
        MsgBox "Para guardar, presiona el botón"
        Cancel = True
    Else
        Sheets("temporal").Range("D1") = ""
    End If
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'Por.Dante Amor
    'Para cambiar de hoja
    If Sheets("temporal").Range("D1") = "" Then
        MsgBox "Para cambiar de hoja, presiona el botón"
        Application.EnableEvents = False
        Sh.Activate
        Application.EnableEvents = True
        Else
        Sheets("temporal").Range("D1") = ""
    End If
End Sub

2. En tu macro del botón pon esto:

Sub boton()
'Por.Dante Amor
    ' las instrucciones de tu macro
    '
    Sheets("temporal").Range("D1") = "presionado"
End Sub

De esa forma, cuando abres el libro, la celda D1 está en blanco, si quieren cambiar de hoja, guardar o cerrar, las macros se activan y si la celda D1 está en blanco no permitirá. Entonces ejecutas el botón, el botón al final de la macro escribe en D1 la palabra "presionado", por consiguiente, cuando intentan nuevamente cambiar de hoja, guardar o cerrar, las macros se activan y como la celda D1 tiene datos, entonces sí se permite la actividad, pero las macros nuevamente ponen la celda D1 en blanco, para que de esta forma si intentan realizar otra actividad (cambiar hoja, guardar o cerrar), será necesario que opriman nuevamente el botón.

Además la hoja "temporal" la puedes ocultar.


Espero que te sea de utilidad, de lo contrario dime cómo podríamos revisar que ya oprimieron el botón.


Funciona a la perfección, y el detalle de la celda D1 lo hace más robusto asegurando que antes de abandonar debes presionar el botón. Muchas gracias y feliz navidad!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas