Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

BeforeClose en VBA

| 3 comentarios

Evento Workbook BeforeClose

Microsoft Excel permite predefinir algunas acciones populares que lo haría en diferentes objetos como  (hoja de cálculo, libro, botones, etc), estas acciones se denominan Eventos. Por ejemplo:  la activación de una hoja de cálculo es un evento, el cierre de un libro es un acontecimiento, cuando hacemos clic en un botón es un evento. Cada objeto tiene su propia lista de eventos, los libros de Microsoft Excel tiene una lista de eventos como son (cerrar libro o libro abierto), las hoja de cálculo tiene una lista de eventos que son(activar la hoja de trabajo o editar una celda).

Si se realiza un evento, como puede ser, el cierre de un libro, el código deseado puede ser activado. Si se requiere guardar un libro automáticamente cuando se cierra un libro o quizás se quiera un cuadro de mensaje de bienvenida para que aparezca cuando se abre un libro de trabajo. Los Eventos son procedimiento Sub (comienza con Private Sub y termina con End Sub) y se genera de manera automática, con un nombre específico, se puede llamar a un procedimiento Sub o escribir su propio código en el código de evento.

¿Cúando se produce el Evento Workbook BeforeClose?

Workbook_BeforeClose es un evento que se desencadena cuando un libro de Microsoft Excel es cerrado. Por ejemplo, se puede utilizar Workbook_BeforeClose Evento para salvar libro, o inicializar el valor (reponer el valor inicial anulada por el usuario), De forma predeterminada, Microsoft Excel preguntaría si desea guardar el archivo antes del cierre si se han realizado cambios.

mensaje

En ese caso, el procedimiento de evento se dispara antes que este cuadro de mensaje.

Sintaxis de Excel Workbook_BeforeClose Evento

Private Sub Workbook_BeforeClose (Cancel As Boolean)

Cancel .- El valor por defecto de Cancel es False, eso significa que el libro se cerrará de forma normal después Procedimiento del evento se dispara. Si se establece como True se indica que no se desea cerrar el libro y ningún cuadro de mensaje le pedirá guardar el archivo.

Evento Workbook Deactivate

Hay otro evento llamado Workbook_Deactivate, que se activa cuando se cierra un libro o cambiar a otro libro. Tanto Workbook_BeforeClose y Workbook_Deactivate se pueden activar cuando un libro está cerrado, pero si ambos están presentes en un libro, Workbook_BeforeClose se disparará primero.

  • Ejemplo de Excel Workbook_BeforeClose Evento
  1. Presione ALT + 11 para entrar al Editor de Visual Basic.
  2. Haga doble clic en ThisWorkbook -> Seleccionar libro -> Seleccionar BeforeClose

beforclose

(Para mayor visualización de la imagen, hacer click en la misma)

Inserte su código entre Private Sub y End Sub. En el siguiente ejemplo, cuando se cierra el libro, un cuadro de mensaje le pedirá confirmar si desea dejar el libro de trabajo o No. Si hace clic en "OK", el libro va a guardar y cerrar. Si "Cancelar", el libro no se cerrara.

mensaje2

Código correspondiente al  mensaje:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
salir = MsgBox("¿Está seguro de que quiere salir?", vbOKCancel)
If salir = vbOK Then
ThisWorkbook.Save
Else
Cancel = True
End If
End Sub

3 comentarios

  1. Excelente

  2. Muy bien explicado. Muchas gracias.
    Lo malo de Excel es que ya casi cualquier persona sabe el truco para desproteger hojas sin saber la contraseña
    Hay alguna forma de que al abrir el archivo pueda programar algo para detectar si están desprotegidas las hojas para volverlas a proteger?
    Tal vez un
    if worksheets("hoja").Protected=false then worksheets("hoja").Protect
    por ejemplo?

    Y otro problema es que los macros no van a ejecutarse si el usuario de la hoja no los habilita. Pero yo podría ocultar las hojas con
    Worksheets("hoja").Visible = xlSheetVeryHidden
    y colocar un botón para que el usuario tenga que presionarlo para hacerlas visibles y por fuerza deberá activar macros o no podría usar mi archivo.
    Saludos

    • Si proteges una hoja ya protegida no ocurre nada, así que ejecuta una macro al abrir de manera que se protejan las hojas.

Deja una respuesta

Los campos requeridos estan marcados con *.