¿Cómo usar el evento QueryClose en VBA?

El evento `QueryClose` en VBA se utiliza en formularios de usuario (UserForms) para interceptar el intento de cerrar el formulario, permitiendo ejecutar código antes de que el formulario se cierre. Este evento se puede usar, por ejemplo, para confirmar si el usuario realmente desea cerrar el formulario o para validar si ciertas condiciones se cumplen antes de proceder con el cierre.

El evento `QueryClose` se activa antes de que el formulario se cierre y proporciona dos parámetros importantes: `Cancel` y `CloseMode`.

  • `Cancel`: Un valor booleano que, al establecerse en `True`, cancela el cierre del formulario.
  • `CloseMode`: Un valor que indica cómo se intentó cerrar el formulario (por ejemplo, si fue desde un botón de control o una llamada desde código VBA).

Aquí te doy un ejemplo de cómo utilizar el evento `QueryClose` en un UserForm:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    ' Verifica si el formulario se está cerrando desde el botón de cerrar de la ventana (CloseMode = 0)
    If CloseMode = vbFormControlMenu Then
        ' Pregúntale al usuario si realmente quiere cerrar el formulario
        If MsgBox("¿Está seguro de que desea cerrar el formulario?", vbYesNo + vbQuestion, "Confirmar cierre") = vbNo Then
            ' Si el usuario elige 'No', cancela el cierre del formulario
            Cancel = True
        End If
    End If

End Sub

En el ejemplo anterior, cuando el usuario intenta cerrar el formulario usando el botón de cierre de la ventana (la `X`), se muestra un mensaje de confirmación. Si el usuario responde “No”, el cierre del formulario se cancela estableciendo `Cancel` a `True`.

Este método es útil para prevenir cierres accidentales o para asegurar que haya guardado el trabajo antes de cerrar el formulario. Recuerda que el valor de `CloseMode` puede variar según el método utilizado para cerrar el formulario, por lo que puedes ajustar las condiciones definidas dentro del `If` según tus necesidades.

Unlock Your Potential

Excel

Basic - Advanced

Access

Access Basic - Advanced

Power BI

Power BI Basic - Advanced

Help us grow the project