Cómo cerrar VBA UserForm: Ocultar vs Descargar
Los UserForms de VBA son una herramienta clave para gestionar las interacciones de los usuarios. Cuando los UserForms están bien diseñados, guían a los usuarios a través de las opciones y configuraciones sin ningún archivo de ayuda ni guía. Sin embargo, desde mi propio desarrollo de UserForm, sé que uno de los aspectos que más se pasa por alto es cómo para cerrar formularios de usuario de VBA. ¿Es mejor ocultar o descargar el formulario? ¿Importa de cualquier manera?
Esta publicación cubre consideraciones clave para garantizar que el proceso de cierre logre el resultado deseado.
Tabla de contenido
- Código VBA básico
- Mostrar un formulario de usuario
- Ocultar un formulario de usuario
- Descargar un formulario de usuario
- botón cerrar
- Asignar la tecla Esc
- Ocultar vs Descargar
- Descargar
- Esconder
- Precargando el formulario de usuario
- Cómo cerrar usando el botón X
- ¿Cómo cerró el usuario el formulario?
Descargue el archivo de ejemplo: únase al programa Insiders gratuito y obtenga acceso al archivo de ejemplo utilizado para esta publicación.
Nombre de archivo: 0123 Cerrar VBA UserForms.zip
Tener acceso
Código VBA básico
Para comenzar, veamos el código VBA básico para abrir y cerrar formularios de usuario. En esta publicación, el formulario de usuario se llama myUserForm y se parece a esto.
El UserForm tiene tres elementos:
- Cuadro de texto : llamado txtTextBox
- Botón Ocultar : llamado cmdHide
- Botón de descarga : llamado cmdUnload
Mostrar un formulario de usuario
El código para mostrar un formulario de usuario generalmente se almacena fuera del formulario de usuario en un módulo estándar. El siguiente código muestra un formulario de usuario.
Sub OpenUserForm()'Show a userformmyUserForm.ShowEnd Sub
Ocultar un formulario de usuario
Para ocultar un formulario de usuario usando un botón, el código puede estar contenido dentro del propio formulario de usuario o en un módulo separado.
Código contenido en el formulario de usuario
El siguiente código muestra un ejemplo donde el código está contenido dentro del formulario de usuario. A mí. se refiere al objeto UserForm.
Private Sub cmdHide_Click()'Hide the UserForm using code within the UserFrom moduleMe.HideEnd Sub
Código contenido dentro de un módulo de código estándar
Cuando el código esté contenido dentro de otro módulo, debemos hacer referencia al nombre del formulario de usuario, como se muestra en el código siguiente.
Sub hideMyForm()'Ocultar el formulario de usuario usando código dentro de un módulo estándarmyUserForm.HideEnd Sub
Cuando usamos el código oculto fuera del formulario de usuario, debemos llamar el código desde el botón.
Private Sub cmdHide_Click()'Call the code contained within a standard moduleCall hideMyFormEnd Sub
Descargar un formulario de usuario
Otra forma de cerrar un UserForm es descargarlo. Al igual que en los ejemplos anteriores, se puede hacer referencia al código desde dentro o fuera del módulo de código de UserForm.
Código contenido en el formulario de usuario
El código es un ejemplo donde el código está contenido dentro del formulario de usuario.
Private Sub cmdUnload_Click()'Unload the UserForm using code within the UserForm moduleUnload MeEnd Sub
Código contenido dentro de un módulo de código estándar
El siguiente ejemplo es donde el código está contenido dentro de un módulo de código estándar.
Sub unloadMyForm()'Unload the UserForm using code within a standard moduleUnload myUserFormEnd Sub
Cuando utilizamos el código para mostrar fuera del formulario de usuario, debemos llamar el código desde el formulario de usuario.
Private Sub cmdUnload_Click()'Call the code contained within a standard moduleCall unloadMyFormEnd Sub
botón cerrar
La opción más sencilla para cerrar un formulario de usuario es el botón de cierre estándar [X]. Es conveniente porque siempre está en la parte superior de la ventana, donde el usuario lo espera. De forma predeterminada, no requiere ningún código para funcionar, ya que es parte del marco de Windows.
El botón de cerrar es equivalente al método de descarga para cerrar VBA UserFrom.
Asignar la tecla Esc
La tecla Esc se usa comúnmente en el diseño de interfaces para cerrar una ventana. También podemos usarla en nuestro formulario de usuario, aunque la opción para aplicar la configuración se encuentra en un lugar extraño.
Seleccione un botón en el formulario de usuario y establezca la propiedad Cancelar en Verdadero .
Cuando se muestra el formulario de usuario, al presionar la tecla Esc se activa el botón con la propiedad Cancelar . Por lo tanto, la tecla Esc se puede asignar a un botón con ocultar o descargar.
Ocultar vs Descargar
Como existe la opción de ocultar o descargar, ¿cuál debemos elegir? ¿Importa? SÍ, definitivamente importa.
Las dos opciones difieren en su enfoque; logran cosas ligeramente diferentes.
Descargar
Descargar cierra el formulario por completo; ya no existe en la memoria. Será como si el evento de inicialización nunca se hubiera disparado, por lo que si hacemos referencia a alguno de los objetos del UserForm, no tendrán valor.
Esconder
Ocultar hace que un formulario de usuario sea invisible. Todavía está ahí; simplemente no podemos verlo. Como todavía existe, aún podemos hacer referencia a objetos en el formulario para recuperar sus valores.
Por ejemplo, si hay texto en un cuadro de texto, podemos obtener ese valor después de que se haya cerrado el formulario. El siguiente código muestra un cuadro de mensaje con el texto del formulario de usuario.
Sub displayTextFromClosedUserForm()'Display the text contained within the UserFrom text box'If UserFrom not loaded, it will display nothing'If UserForm hidden, will display the valueMsgBox myUserForm.txtTextBoxEnd Sub
Nota: Mientras el formulario permanece abierto, continúa reteniendo la memoria.
Precargando el formulario de usuario
¿Qué sucede si queremos hacer referencia a un objeto en un formulario de usuario antes de mostrarlo? El evento de inicialización no se ha ejecutado y el formulario no existe en la memoria. Para solucionar este problema, usamos el comando de carga para crear el formulario de usuario, pero no mostrarlo.
Sub LoadUserForm()'Load the UserForm without displayingLoad myUserFormEnd Sub
Al utilizar este método, el evento de inicialización se activa, pero no el evento de activación. El evento de activación solo se activa cuando se muestra el formulario de usuario.
Para garantizar que el formulario de usuario esté siempre en la memoria, cargue el formulario durante el evento de apertura del libro.
Cómo cerrar usando el botón X
De forma predeterminada, el botón de cerrar [X] descarga el formulario de usuario, lo cual es un problema si queremos ocultarlo, pero podemos secuestrar el control del botón [X] para lograr lo mismo que el comando ocultar.
El UserForm tiene un evento llamado QueryClose. Con este evento, podemos cancelar la acción de descarga y luego ocultar el UserForm.
Ingrese el siguiente código en el módulo de código UserFrom
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)'Capture the [X] button clickIf CloseMode = vbFormControlMenu Then 'Stop the default unload close Cancel = True 'Force the Hide close Me.HideEnd IfEnd Sub
Una vez que hayamos cancelado la acción de descarga, ahora podemos hacer referencia a los elementos en el formulario de usuario, como si estuviera oculto normalmente.
¿Cómo cerró el usuario el formulario?
Como hay varias formas de cerrar un formulario de usuario, puede resultar útil saber qué opción seleccionó el usuario. Por ejemplo, ¿hizo clic en "Aceptar" o "Cancelar"?
En esta situación, una opción sencilla es utilizar una variable pública . Podemos asignar el valor a la variable como parte del procedimiento de cierre.
Luego, cualquier módulo puede acceder a la variable pública.
Artículos Relacionados:
- Cambiar el tamaño de un formulario de usuario con VBA o API de Windows
- Ocultar o deshabilitar un botón de cierre de VBA UserForm [X]
- Subs privados vs públicos, funciones variables en VBA
Deja una respuesta